Dodawanie przestrzeni nazw xsi: type i envelope podczas korzystania z SUDS

Muszę współdziałać z usługą SOAP i mam z tym wiele problemów; naprawdę doceniłbym wszelkie wskazówki na ten temat. Oryginalny komunikat o błędzie brzmiał:

org.apache.axis2.databinding.ADBException: Any type element type has not been given

Po kilku badaniach okazuje się, że jest to niezgodność między SUDS a serwerem, z którym trzeba sobie poradzić

type="xsd:anyType"

na danym elemencie.

Potwierdziłem użycie SOAPUI i po porady, że problem można rozwiązać, wykonując następujące kroki:

Dodanie xsi: type = "xsd: string" do każdego elementu, który powoduje problemyDodawanie xmlns: xsd = "http://www.w3.org/2001/XMLSchema" do koperty SOAP

Więc gdzie obecnie robi to SUDS:

<SOAP-ENV:Envelope ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<ns3:Body>
  <ns0:method>
     <parameter>
        <values>
           <table>
              <key>EMAIL_ADDRESS</key>
              <value>[email protected]</value>
           </table>
        </values>
     </parameter>
  </ns0:method>

zamiast tego powinien to zrobić:

<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">

  <ns3:Body>
  <ns0:method>
     ...
     <parameter>
        <values>
           <table>
              <key xsi:type="xsd:string">EMAIL_ADDRESS</key>
              <value xsi:type="xsd:string">[email protected]</value>
           </table>
        </values>
     </parameter>
  </ns0:method>

Czy jest to właściwy sposób? Widziałem sugestie dotyczące używania ImportDoctor lub MessagePlugins, ale tak naprawdę nie zastanawiałem się, jak osiągnąć pożądany efekt.

questionAnswers(2)

yourAnswerToTheQuestion