Ich versuche, relevante Informationen von einem SOAP-Service aus dem niederländischen Grundbuch (WSDL here) mit PySimpleSoap zu erhalten. Bisher konnte ich die Verbindung und fordern Sie Informationen zu einem bestimmten Objekt mit dem folgenden Code:TypeError in SOAP-Anfrage (mit pysimplesoap)
from pysimplesoap.client import SoapClient
client = SoapClient(wsdl='http://www1.kadaster.nl/1/schemas/kik-inzage/20141101/verzoekTotInformatie-2.1.wsdl', username='xxx', password='xxx', trace=True)
response = client.VerzoekTotInformatie(
Aanvraag={
'berichtversie': '4.7', # Refers to the schema version
'klantReferentie': klantReferentie, # A reference we can set ourselves.
'productAanduiding': '1185', # a four-digit code referring to whether the response should be in "XML" (1185), "PDF" (1191) or "XML and PDF" (1057).
'Ingang': {
'Object': {
'IMKAD_KadastraleAanduiding': {
'gemeente': 'ARNHEM AC', # municipality
'sectie': 'AC', # section code
'perceelnummer': '1234' # Lot number
}
}
}
}
)
Dieses „irgendwie“ funktioniert. Ich setze trace=True
, also erhalte ich umfangreiche Protokollnachrichten, und in diesen Protokollnachrichten sehe ich eine humongous XML-Ausgabe (paste here), die ziemlich alle Informationen einschließt, die ich anfordere. ABER, ich bekomme auch diese Zurückverfolgungs:
Traceback (most recent call last):
File "<input>", line 1, in <module>
'perceelnummer': perceelnummer
File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 181, in <lambda>
return lambda *args, **kwargs: self.wsdl_call(attr, *args, **kwargs)
File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 346, in wsdl_call
return self.wsdl_call_with_args(method, args, kwargs)
File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 372, in wsdl_call_with_args
resp = response('Body', ns=soap_uri).children().unmarshall(output)
File "/Library/Python/2.7/site-packages/pysimplesoap/simplexml.py", line 433, in unmarshall
value = children and children.unmarshall(fn, strict)
File "/Library/Python/2.7/site-packages/pysimplesoap/simplexml.py", line 433, in unmarshall
value = children and children.unmarshall(fn, strict)
File "/Library/Python/2.7/site-packages/pysimplesoap/simplexml.py", line 433, in unmarshall
value = children and children.unmarshall(fn, strict)
File "/Library/Python/2.7/site-packages/pysimplesoap/simplexml.py", line 380, in unmarshall
raise TypeError("Tag: %s invalid (type not found)" % (name,))
TypeError: Tag: IMKAD_Perceel invalid (type not found)
Soweit ich verstehe, bedeutet dies, dass die IMKAD_Perceel
Tag kann nicht von der simplexml parser zu verstehen, die (ich vermute ich), weil es nicht/finden die Definition lesen konnte dieses Tags in der WDSL-Datei.
So überprüfte ich die (enorme Menge an) Log-Meldungen aus der WSDL-Datei Parsen, und das zeigt diese Zeilen:
DEBUG:pysimplesoap.helpers:Parsing Element element: IMKAD_Perceel
DEBUG:pysimplesoap.helpers:Processing element IMKAD_Perceel element
DEBUG:pysimplesoap.helpers:IMKAD_Perceel has no children!
DEBUG:pysimplesoap.helpers:complexContent/simpleType/element IMKAD_Perceel = IMKAD_Perceel
DEBUG:pysimplesoap.helpers:Parsing Element complexType: IMKAD_Perceel
DEBUG:pysimplesoap.helpers:Processing element IMKAD_Perceel complexType
DEBUG:pysimplesoap.helpers:complexContent/simpleType/element IMKAD_Perceel = IMKAD_OnroerendeZaak
DEBUG:pysimplesoap.helpers:Processing element IMKAD_Perceel complexType
Ich denke, diese Zeilen bedeuten, dass die IMKAD_Perceel
Definition leer ist. So habe ich SoapUIthe WSDL file introspect, in dem ich an url to this .xsd-file in denen fand ich eine Definition des IMKAD_Perceel
finden:
<xs:element name="IMKAD_Perceel"
substitutionGroup="ipkbo:IMKAD_OnroerendeZaak"
type="ipkbo:IMKAD_Perceel"
/>
Der Tag in der Tat scheint sich zu schließen, was bedeutet, dass er leer ist. Ist dies der Grund, dass pysimplesoap denkt, dass IMKAD_Perceel
nicht definiert ist? Warum kann das XML nicht einfach interpretiert und als dict zurückgegeben werden? (Wie bereits erwähnt, ist die vollständige XML-Ausgabe, die ich erhalte, in this paste).
Weiß jemand, wie ich pysimplesoap interpretieren kann das XML und konvertieren Sie es in ein Diktat, unabhängig davon, ob es an der WSDL hält?
Alle Tipps sind willkommen!
Wir können den Fehler nicht reproduzieren, da wir nicht zur Nutzung dieses Dienstes berechtigt sind. Ich denke, es ist besser für Sie, den Anbieter dieses Webdienstes zu kontaktieren. – skyline75489
@ skyline75489 - Ich habe eine Paste der XML, die ich zurück erhalte, hinzugefügt: http://pastebin.com/eamQzGSt. Hilft das beim Debuggen? – kramer65
Die Antwort, die Sie erhalten, scheint in Ordnung zu sein, selbst wenn sie sich über 'type error' beschwert. Gibt es ein Problem mit der Antwort? – skyline75489