Flex的WebSerivce对比Axis 1.2RC2(求助)
诚然Flex中自带的WebService.jar包是对Axis进行了封装,应该有所改变(没看到过MM上文档说明到底改了点啥),近来打算用新的Axis 1.2RC2来替换Flex内置的web服务,然而问题就由此发生了。
原来的server-config.wsdd配置文件如下:
其中getCategoryList和getItemListByCategoryId返回的是Category和Item两个对象的ArrayList。
用Flex自带的WebService.jar解释后,得到的wsdl中,对这个两个方法返回值的描述是(简单描述一下,省略大部分)
并且有Category和Item两个对象从JAVA Mapping到XML的说明 (即wsdl:types的schema,这里只列了Category一个结构)
以上一切都很正常,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
相关的方法定义也变为
以上一切也都可以正常工作,Flex调用这两个web服务也ok,但不能正确从XML文件映射为Flex的对象,获得的对象为一个Array,只是里面的值还是正确的。 问题就是wsdl中缺少了schema,Flex不能把xml文件映射为对象了,只能按Array来解释。
现在我又不得不使用Flex自带的web服务实现包,不知道那位熟悉Axis的同志能指点一二!
原来的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>
<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>
用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>
<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>
<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自带的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>
<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>
<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服务实现包,不知道那位熟悉Axis的同志能指点一二!