Hinzufügen von xsi: type und Envelope Namespace bei Verwendung von SUDS
Ich muss mit einem SOAP-Dienst interagieren und habe dabei große Probleme. Würde mich wirklich über Hinweise hierzu freuen. Die ursprüngliche Fehlermeldung lautete:
org.apache.axis2.databinding.ADBException: Any type element type has not been given
Nach einigen Recherchen hat sich herausgestellt, dass dies eine Meinungsverschiedenheit zwischen SUDS und dem Server ist, wie man damit umgeht
type="xsd:anyType"
auf das betreffende Element.
Ich habe die Verwendung von SOAPUI bestätigt und nach dem Rat, dass das Problem durch die folgenden Schritte behoben werden kann:
Hinzufügen von xsi: type = "xsd: string" zu jedem Element, das Probleme verursachtHinzufügen von xmlns: xsd = "http://www.w3.org/2001/XMLSchema" zum SOAP-UmschlagAlso, wo SUDS dies derzeit tut:
<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>
es sollte stattdessen folgendes erzeugen:
<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>
Gibt es einen richtigen Weg, dies zu tun? Ich habe Vorschläge für die Verwendung von ImportDoctor oder MessagePlugins gesehen, aber nicht wirklich verstanden, wie der gewünschte Effekt erzielt werden kann.