TypeError en la solicitud SOAP (usando pysimplesoap)

Estoy tratando de obtener información relevante de un servicio SOAP del registro de tierras del gobierno holandés ( WSDL aquí ) con PySimpleSoap . Hasta ahora logré conectar y solicitar información sobre una propiedad específica con el siguiente código:

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 } } } } ) 

Este “un poco” funciona. Configuré trace=True para obtener mensajes de registro extensivos, y en esos mensajes veo una salida xml gigantesca ( pegar aquí ) que incluye prácticamente toda la información que solicito. PERO, también recibo este rastreo:

 Traceback (most recent call last): File "", line 1, in  'perceelnummer': perceelnummer File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 181, in  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) 

Según tengo entendido, esto significa que la etiqueta IMKAD_Perceel no puede ser entendida por el analizador simplexml que (supongo) es porque no pudo leer / encontrar la definición de esta etiqueta en el archivo wdsl.

Así que verifiqué la (enorme cantidad de) mensajes de registro al analizar el archivo wsdl, y eso muestra estas líneas:

 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 

Supongo que estas líneas significan que la definición de IMKAD_Perceel está vacía. Así que utilicé SoapUI para inspeccionar el archivo WSDL , en el que encontré una url para este archivo .xsd en el que encuentro una definición de IMKAD_Perceel :

  

La etiqueta de hecho parece estar cerrándose, lo que significa que está vacía. ¿Es esta la razón por la que pysimplesoap piensa que IMKAD_Perceel no está definido? ¿Por qué no puede simplemente interpretar el xml y devolverlo como un dict? (como se dijo antes, la salida xml completa que recibo está en este pegado ).

¿Alguien sabe cómo puedo hacer que pysimplesoap interprete el xml y lo convierta en un dict, sin importar si se adhiere al wsdl?

Todos los consejos son bienvenidos!

Parece que pysimplesoap no es capaz de tratar con el grupo de substitutionGroup en el esquema xml.

Puedes ver eso en el archivo xsd:

  

Existe este IMKAD_Perceel substitutionGroup , lo que significa que IMKAD_Perceel e IMKAD_OnroerendeZaak son lo mismo y son sustituibles entre sí.

En el esquema de soap, esta parte particular de la respuesta se define como:

   Inhoud van het bericht.         

Sin embargo, puedes ver que la respuesta real es como:

  ... ... ... ...  

Entonces pysimplesoap parece confundirse y no puede obtener el tipo correcto de respuesta.