Web Service Client in Python ZSI mit - „klassenlose Struktur nicht Wörterbuch bekommen“
Frage
Ich versuche, ein Beispiel-Client in Python ZSI für einen einfachen Web Service zu schreiben. Der Web-Service WSDL folgt:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/test/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="test" targetNamespace="http://www.example.org/test/">
<wsdl:message name="NewOperationRequest">
<wsdl:part name="NewOperationRequest" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="NewOperationResponse">
<wsdl:part name="NewOperationResponse" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="test">
<wsdl:operation name="NewOperation">
<wsdl:input message="tns:NewOperationRequest"/>
<wsdl:output message="tns:NewOperationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="testSOAP" type="tns:test">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="NewOperation">
<soap:operation soapAction="http://www.example.org/test/NewOperation"/>
<wsdl:input>
<soap:body namespace="http://www.example.org/test/" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body namespace="http://www.example.org/test/" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="test">
<wsdl:port binding="tns:testSOAP" name="testSOAP">
<soap:address location="http://localhost/test"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Jedes Mal, wenn ich laufe folgenden Code:
from ZSI.ServiceProxy import ServiceProxy
service = ServiceProxy('test.wsdl')
service.NewOperation('test')
I erhalten:
(...)
/var/lib/python-support/python2.5/ZSI/TCcompound.pyc in cb(self, elt, sw, pyobj, name, **kw)
345 f = lambda attr: pyobj.get(attr)
346 if TypeCode.typechecks and type(d) != types.DictType:
--> 347 raise TypeError("Classless struct didn't get dictionary")
348
349 indx, lenofwhat = 0, len(self.ofwhat)
TypeError: Classless struct didn't get dictionary
Ich habe Google für diesen Fehler gesucht und gefunden: Paar Beiträge beschreiben ähnliches Problem, aber ohne Antwort. Wissen Sie war, ist hier falsch? Gibt es einen Fehler in der WSDL, mache ich etwas in dem Code verpassen, oder es ist ein Fehler in ZSI?
Vielen Dank im Voraus für die Ihnen helfen: -)
Lösung
Schließlich habe ich die Lösung gefunden.
Ich sollte wie folgt ausgeführt:
from ZSI.ServiceProxy import ServiceProxy
service = ServiceProxy('test.wsdl')
service.NewOperation(NewOperationRequest='test')
Der Grund des Problems war, dass der Name des Parameters fehlte (sic!) - dumme Fehler; -)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow