Проблема сопоставления XML SOAP href - какое сопоставление помогает? - PullRequest
1 голос
/ 22 декабря 2010

Я внедряю клиент 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,так что я не уверен, если стандарт, или нет. (Я не могу изменить услугу!)

1 Ответ

1 голос
/ 03 января 2011

Это RPC / кодированный формат SOAP, который больше не поддерживается основными платформами. Вы должны использовать Ось (1), чтобы разобраться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...