Using the WSDL service from Python, is this my client code or server?

I am trying to write a Python client for a WSDL service. I use the Suds library to handle SOAP messages.

When I try to call a service, I get a Suds: exception that <rval />does not appear in the message part. If I set the retxmlSuds parameter , I get XML that looks good to me.

Is there a problem with the client code? Am I missing some flag that allows Suds to parse XML correctly? Alternatively, the problem may be related to the server. Is XML structured correctly?

My code is as follows (method names changed):

c = Client(url)  
p = c.factory.create('MyParam')  
p.value = 100  
c.service.run(p)  

This results in a Suds exception:

File "/home/.../test.py", line 38, in test  
res = self.client.service.run(p)
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-py2.6.egg/suds/client.py", line 539, in __call__
return client.invoke(args, kwargs)
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-py2.6.egg/suds/client.py", line 598, in invoke
result = self.send(msg)
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-py2.6.egg/suds/client.py", line 627, in send  
result = self.succeeded(binding, reply.message)  
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-py2.6.egg/suds/client.py", line   659, in succeeded  
r, p = binding.get_reply(self.method, reply)  
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-py2.6.egg/suds/bindings/binding.py", line 151, in get_reply  
result = self.replycomposite(rtypes, nodes)  
File "/usr/local/lib/python2.6/dist-packages/suds-0.3.9-  py2.6.egg/suds/bindings/binding.py", line 204, in replycomposite  
raise Exception('<%s/> not mapped to message part' % tag)  
Exception: <rval/> not mapped to message part  

XML returned (modified to remove client identifiers)

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:getResponse xmlns:ns2="http://api.xxx.xxx.com/api/">
      <rval xmlns="http://xxx.xxx.xxx.com/api/">
        <ns2:totalNumEntries>
          2
        </ns2:totalNumEntries>
        <ns2:entries>
          <ns2:id>
            1
          </ns2:id>
        </ns2:entries>
        <ns2:entries>
          <ns2:id>
            2
          </ns2:id>
        </ns2:entries>
      </rval>
    </ns2:getResponse>
  </S:Body>
</S:Envelope>
+3
2

" < faultcode/ > "?

:

, , Suds . , , Suds XML, BeautifulSoup, .

:

client = Client(url)
client.set_options(retxml=True)
soapresp_raw_xml = client.service.submit_func(data)
soup = BeautifulStoneSoup(soapresp_raw_xml)
value_i_want = soup.find('ns:NewSRId')
+2

, SOAP- <rval>, WSDL- .

, Suds WSDL-, , WSDL. , suds-client . rm /tmp/suds/* .

+1

Source: https://habr.com/ru/post/1759691/


All Articles