Я внедряю клиент 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>
Но фактический ответ немного сложен, фактический ответ не находится в элементе, но элемент содержит атрибут soap: href, ссылающийся на элемент soap: multiRef через его id.(мыло 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 mapping, но это не работает)
Я не сильно разбираюсь в XML,так что я не уверен, если стандарт, или нет. (Я не могу изменить услугу!)