Я пытаюсь получить релевантную информацию из службы SOAP из земельного кадастра голландского правительства (WSDL here) с PySimpleSoap. До сих пор мне удалось связаться и запросить информацию об определенном имуществе со следующим кодом:TypeError in SOAP Request (using 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
}
}
}
}
)
Этот «вид» работает. Я установил trace=True
, поэтому я получаю подробные сообщения журнала, и в этих сообщениях журнала я вижу выдающийся xml-вывод (paste here), который в значительной степени включает в себя всю информацию, которую я запрашиваю. НО, я также получаю эту отслеживающий:
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)
Насколько я понимаю, это означает, что IMKAD_Perceel
тег не может быть понят simplexml parser который (я угадываю), потому что он не может прочитать/найти определение этого тега в файле wdsl.
Так что я проверил (огромное количество) протоколирование сообщений от разбора файла WSDL, и показывает эти строки:
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
Я думаю, эти линии означают, что IMKAD_Perceel
определения пусто. Поэтому я использовал SoapUI самоанализ the WSDL file, в котором я нашел an url to this .xsd-file, в котором я нахожу определение IMKAD_Perceel
:
<xs:element name="IMKAD_Perceel"
substitutionGroup="ipkbo:IMKAD_OnroerendeZaak"
type="ipkbo:IMKAD_Perceel"
/>
Тег действительно, кажется, закрывая себя, что означает, что она пуста. Это причина, по которой pysimplesoap считает, что IMKAD_Perceel
не определен? Почему он не может просто интерпретировать xml и возвращать его как dict? (как было сказано ранее, полный вывод xml, который я получаю, находится в this paste).
Кто-нибудь знает, как я могу заставить pysimplesoap интерпретировать xml и преобразовать его в dict, независимо от того, придерживается ли он wsdl?
Все советы приветствуются!
Мы не можем воспроизвести ошибку, так как мы не имеем права использовать эту услугу. Я думаю, вам лучше связаться с провайдером этого веб-сервиса. – skyline75489
@ skyline75489 - Я добавил пасту xml, которую я получил обратно: http://pastebin.com/eamQzGSt. Помогает ли это отлаживать? – kramer65
Ответ, который у вас есть, кажется, все в порядке, даже он жалуется на «ошибку типа». Есть ли какие-либо проблемы с ответом? – skyline75489