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 SOAPWię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.