mvantellingen / python-zeep

A Python SOAP client
http://docs.python-zeep.org
Other
1.88k stars 578 forks source link

XMLParseError: No namespace defined for java (java:java.lang.String) #1296

Open Jeremy-Deh opened 2 years ago

Jeremy-Deh commented 2 years ago

Hi, I cannnot go past what seems to be a bug, the variable "Namespace" in utils.py is empty with the error "XMLParseError: No namespace defined for java (java:java.lang.String)" I have another SOAP command which is not the one here (client.service.validateMetadata(**requestData)) which is working great i just changed the name of the SOAP thing called in client.service, and adapted the dictionary according the the variabels i need to pass for this one

Please find below the details, Thanks

  1. The version of zeep (or if you are running master the commit hash/date) Zeep 4.1.0 Python 3.9.7

  2. The WSDL you are using https://docs.informatica.com/master-data-management/multidomain-mdm/10-3/services-integration-framework-guide/introduction-to-services-integration-framework/access-protocols/web-services/wsdl.html

  3. an example script which exposes the problem. (sorry the example is not runnable, as i use a wsdl on my company's server, i think the error log might be of help)

import zeep from zeep import Client from zeep.transports import Transport from requests import Session from requests.auth import HTTPBasicAuth

wsdl="http://:/cmx/request/wsdl?" session = Session() session.auth = HTTPBasicAuth('', '') client = Client(wsdl,transport=Transport(session=session))

requestData={ "username":"", "password":{"password":"","encrypted":"false"}, "orsId":"", "asynchronousOptions":{"isAsynchronous":"false"} } response= client.service.validateMetadata(**requestData)


XMLParseError Traceback (most recent call last)

in C:\ProgramData\Anaconda3\lib\site-packages\zeep\proxy.py in __call__(self, *args, **kwargs) 44 kwargs["_soapheaders"] = soap_headers 45 ---> 46 return self._proxy._binding.send( 47 self._proxy._client, 48 self._proxy._binding_options, C:\ProgramData\Anaconda3\lib\site-packages\zeep\wsdl\bindings\soap.py in send(self, client, options, operation, args, kwargs) 133 return response 134 --> 135 return self.process_reply(client, operation_obj, response) 136 137 async def send_async(self, client, options, operation, args, kwargs): C:\ProgramData\Anaconda3\lib\site-packages\zeep\wsdl\bindings\soap.py in process_reply(self, client, operation, response) 229 return self.process_error(doc, operation) 230 --> 231 result = operation.process_reply(doc) 232 233 if message_pack: C:\ProgramData\Anaconda3\lib\site-packages\zeep\wsdl\bindings\soap.py in process_reply(self, envelope) 428 429 if self.output: --> 430 return self.output.deserialize(envelope) 431 432 @classmethod C:\ProgramData\Anaconda3\lib\site-packages\zeep\wsdl\messages\soap.py in deserialize(self, envelope) 99 100 body = envelope.find("soap-env:Body", namespaces=self.nsmap) --> 101 body_result = self._deserialize_body(body) 102 103 header = envelope.find("soap-env:Header", namespaces=self.nsmap) C:\ProgramData\Anaconda3\lib\site-packages\zeep\wsdl\messages\soap.py in _deserialize_body(self, xmlelement) 440 441 context = XmlParserContext(settings=self.wsdl.settings) --> 442 result = self.body.parse(xmlelement, self.wsdl.types, context=context) 443 return {"body": result} 444 C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\element.py in parse(self, xmlelement, schema, allow_none, context) 124 xsd_type = schema.get_type(instance_type, fail_silently=True) 125 xsd_type = xsd_type or self.type --> 126 return xsd_type.parse_xmlelement( 127 xmlelement, 128 schema, C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\types\complex.py in parse_xmlelement(self, xmlelement, schema, allow_none, context, schema_type) 204 for name, element in self.elements_nested: 205 try: --> 206 result = element.parse_xmlelements( 207 elements, schema, name, context=context 208 ) C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\indicators.py in parse_xmlelements(self, xmlelements, schema, name, context) 615 for elm_name, element in self.elements: 616 try: --> 617 item_subresult = element.parse_xmlelements( 618 xmlelements, schema, name, context=context 619 ) C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\element.py in parse_xmlelements(self, xmlelements, schema, name, context) 175 xmlelement = xmlelements.popleft() 176 num_matches += 1 --> 177 item = self.parse(xmlelement, schema, allow_none=True, context=context) 178 result.append(item) 179 elif ( C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\element.py in parse(self, xmlelement, schema, allow_none, context) 124 xsd_type = schema.get_type(instance_type, fail_silently=True) 125 xsd_type = xsd_type or self.type --> 126 return xsd_type.parse_xmlelement( 127 xmlelement, 128 schema, C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\types\complex.py in parse_xmlelement(self, xmlelement, schema, allow_none, context, schema_type) 204 for name, element in self.elements_nested: 205 try: --> 206 result = element.parse_xmlelements( 207 elements, schema, name, context=context 208 ) C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\indicators.py in parse_xmlelements(self, xmlelements, schema, name, context) 615 for elm_name, element in self.elements: 616 try: --> 617 item_subresult = element.parse_xmlelements( 618 xmlelements, schema, name, context=context 619 ) C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\element.py in parse_xmlelements(self, xmlelements, schema, name, context) 175 xmlelement = xmlelements.popleft() 176 num_matches += 1 --> 177 item = self.parse(xmlelement, schema, allow_none=True, context=context) 178 result.append(item) 179 elif ( C:\ProgramData\Anaconda3\lib\site-packages\zeep\xsd\elements\element.py in parse(self, xmlelement, schema, allow_none, context) 119 """ 120 context = context or XmlParserContext() --> 121 instance_type = qname_attr(xmlelement, xsi_ns("type")) 122 xsd_type = None 123 if instance_type: C:\ProgramData\Anaconda3\lib\site-packages\zeep\utils.py in qname_attr(node, attr_name, target_namespace) 16 value = node.get(attr_name) 17 if value is not None: ---> 18 return as_qname(value, node.nsmap, target_namespace) 19 return None 20 C:\ProgramData\Anaconda3\lib\site-packages\zeep\utils.py in as_qname(value, nsmap, target_namespace) 35 36 if not namespace: ---> 37 raise XMLParseError(f"No namespace defined for {prefix} ({value})") 38 39 # Workaround for https://github.com/mvantellingen/python-zeep/issues/349 XMLParseError: No namespace defined for java (java:java.lang.String)