J'essaye d'écrire un client Python pour un service WSDL. J'utilise la bibliothèque Suds pour gérer les messages SOAP.En utilisant le service WSDL de Python, c'est mon code client ou le serveur?
Lorsque j'essaie d'appeler le service, j'obtiens une exception Suds: <rval />
non mappé à la partie message. Si je définis l'option retxml
Suds, j'obtiens du XML qui me semble correct.
Le problème est-il lié au code client? Ai-je manqué un drapeau qui permettra à Suds d'analyser correctement le XML? Alternativement, le problème pourrait être avec le serveur. Le XML n'est-il pas structuré correctement?
Mon code est suit (noms de méthode modifiée):
c = Client(url)
p = c.factory.create('MyParam')
p.value = 100
c.service.run(p)
Il en résulte une exception Suds:
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
Le code XML retourné (modifié pour supprimer les identificateurs client)
<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>