我正在将SOAP客户端实现到我拥有WSDL文件的现有服务。
我使用axis2 - http://axis.apache.org/axis2/java/
我遇到了映射到类的问题: WSDL仅指定了3种可能的响应:
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://request.pgw.muzo.com">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="Response">
<sequence>
<element name="digest" nillable="true" type="xsd:string"/>
<element name="ok" type="xsd:boolean"/>
<element name="primaryReturnCode" type="xsd:int"/>
<element name="secondaryReturnCode" type="xsd:int"/>
<element name="requestId" type="xsd:long"/>
</sequence>
</complexType>
<complexType name="OrderResponse">
<complexContent>
<extension base="tns2:Response">
<sequence>
<element name="orderNumber" nillable="true" type="xsd:string"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="OrderStateResponse">
<complexContent>
<extension base="tns2:OrderResponse">
<sequence>
<element name="state" type="xsd:int"/>
</sequence>
</extension>
</complexContent>
</complexType>
</schema>
</wsdl:types>
但是实际响应有点复杂,实际响应不在元素中,但elemnt包含属性soap:href通过它的id向soap:multiRef元素提供。 (肥皂是http://schemas.xmlsoap.org/soap/envelope/)
<soapenv:Body>
<ns1:queryOrderStateResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://webservices.pgw.muzo.com">
<queryOrderStateReturn href="#id0" />
</ns1:queryOrderStateResponse>
<multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xsi:type="ns2:OrderStateResponse" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://request.pgw.muzo.com">
<digest xsi:type="soapenc:string">AAA</digest>
<ok href="#id1" />
<orderNumber xsi:type="soapenc:string">232</orderNumber>
<primaryReturnCode href="#id2" />
<secondaryReturnCode href="#id3" />
<state href="#id4" />
<requestId href="#id5" />
</multiRef>
...
</soapenv:Body>
这种行为是正常的吗? (轴允许我使用xmlbeans或adb映射但不适用于此)
我对XML并不多,所以如果href是标准与否,我就不会感到害羞。 (我不能改变服务!)
答案 0 :(得分:1)
它是主要框架不再支持的SOAP的RPC /编码格式。你必须使用Axis(1)处理这些东西。