Flex的WebSerivce对比Axis 1.2RC2(求助)

诚然Flex中自带的WebService.jar包是对Axis进行了封装,应该有所改变(没看到过MM上文档说明到底改了点啥),近来打算用新的Axis 1.2RC2来替换Flex内置的web服务,然而问题就由此发生了。
原来的server-config.wsdd配置文件如下:
<service name="FashionService" provider="java:RPC">
  
<parameter name="methodName" value="getCategoryList, getItemListByCategoryId"/>
  
<parameter name="className" value="fashion.items.FashionService"/>
  
<beanMapping languageSpecificType="java:fashion.items.Item" qname="ns4:Item" xmlns:ns4="http://localhost:8080/fashionservice"/>
  
<beanMapping languageSpecificType="java:fashion.items.Category" qname="ns4:Category" xmlns:ns4="http://localhost:8080/fashionservice"/>
 
</service>
其中getCategoryList和getItemListByCategoryId返回的是Category和Item两个对象的ArrayList。
用Flex自带的WebService.jar解释后,得到的wsdl中,对这个两个方法返回值的描述是(简单描述一下,省略大部分)
<wsdl:message name="getCategoryListResponse">
    
<wsdl:part name="getCategoryListReturn" type="soapenc:Array"/>
</wsdl:message>
<wsdl:operation name="getCategoryList">
    
<wsdl:input message="impl:getCategoryListRequest" name="getCategoryListRequest"/>
    
<wsdl:output message="impl:getCategoryListResponse" name="getCategoryListResponse"/>
</wsdl:operation>
<wsdl:output name="getCategoryListResponse">
    
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/fashionservice/services/FashionService" use="encoded"/>
</wsdl:output>

并且有Category和Item两个对象从JAVA Mapping到XML的说明 (即wsdl:types的schema,这里只列了Category一个结构)
<complexType name="Category">
  
<sequence>
    
<element name="data" nillable="true" type="xsd:string"/>
    
<element name="id" nillable="true" type="xsd:string"/>
    
<element name="label" nillable="true" type="xsd:string"/>
    
<element name="status" nillable="true" type="xsd:string"/>
  
</sequence>
</complexType>
以上一切都很正常,Flex调用这两个web服务也ok,能正确从XML文件映射为Flex的对象。比如Category的id,data,label等字段能从flex中直接名字引用。

然而把Flex自带的WebService.jar替换为Axis 1.2RC2的axis.jar等相关jar包后,问题就出现了。
首先可以保证Axis工作是正常的,server-config.wsdd配置文件也保持不变
同样获得wsdl
而wsdl:types 的schema却变为Array了,没有了server-config.wsdd中的BeanMapping中的两个POJO
 <wsdl:types>
  
<schema targetNamespace="http://localhost:8080/fashionservice/services/FashionService" xmlns="http://www.w3.org/2001/XMLSchema">
   
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   
<complexType name="ArrayOf_xsd_anyType">
    
<complexContent>
     
<restriction base="soapenc:Array">
      
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
     
</restriction>
    
</complexContent>
   
</complexType>
  
</schema>
 
</wsdl:types>
相关的方法定义也变为
 <wsdl:message name="getCategoryListResponse">
    
<wsdl:part name="getCategoryListReturn" type="impl:ArrayOf_xsd_anyType"/>
</wsdl:message>
<wsdl:operation name="getCategoryList">
    
<wsdl:input message="impl:getCategoryListRequest" name="getCategoryListRequest"/>
    
<wsdl:output message="impl:getCategoryListResponse" name="getCategoryListResponse"/>
</wsdl:operation>
<wsdl:operation name="getCategoryList">
    
<wsdlsoap:operation soapAction=""/>
    
<wsdl:input name="getCategoryListRequest">
        
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://items.fashion" use="encoded"/>
    
</wsdl:input>
    
<wsdl:output name="getCategoryListResponse">
        
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/fashionservice/services/FashionService" use="encoded"/>
    
</wsdl:output>
</wsdl:operation>
以上一切也都可以正常工作,Flex调用这两个web服务也ok,但不能正确从XML文件映射为Flex的对象,获得的对象为一个Array,只是里面的值还是正确的。 问题就是wsdl中缺少了schema,Flex不能把xml文件映射为对象了,只能按Array来解释。

现在我又不得不使用Flex自带的web服务实现包,不知道那位熟悉Axis的同志能指点一二!
posted @ 2004-12-09 15:54  dannyr|一个都不能少!  阅读(2010)  评论(0编辑  收藏  举报