5 votes

Qu'est-ce que suds entend par "<faultcode/> not mapped to message part" ?

J'utilise suds pour la première fois et j'essaie de communiquer avec un serveur hébergé par une société externe. Lorsque j'appelle une méthode sur le serveur, je reçois ce XML en retour.

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>

      <faultstring>Can't use string ("") as an ARRAY ref while "strict refs" in use at /vindicia/site_perl/Vindicia/Soap/DocLitUtils.pm line 130.
</faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

L'exception déclenchée est la suivante :

  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\client.py", line 538, in \_\_call\_\_
    return client.invoke(args, kwargs)
  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\client.py", line 602, in invoke
    result = self.send(msg)
  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\client.py", line 634, in send
    result = self.succeeded(binding, reply.message)
  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\client.py", line 669, in succeeded
    r, p = binding.get\_reply(self.method, reply)
  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\bindings\\binding.py", line 157, in get\_reply
    result = self.replycomposite(rtypes, nodes)
  File "C:\\Python26\\lib\\site-packages\\suds-0.4-py2.6.egg\\suds\\bindings\\binding.py", line 227, in replycomposite
    raise Exception(' not mapped to message part' % tag)
Exception: 'faultcode' not mapped to message part

Une idée de la raison pour laquelle Suds lance l'exception ? Une idée sur la façon de la corriger ?

3voto

JiminyCricket Points 1622

J'ai eu un problème similaire : l'appel a réussi, mais Suds s'est planté lors de l'analyse de la réponse du client. La solution de contournement que j'ai utilisée consistait à utiliser la fonction option suds pour retourner le XML brut et ensuite utiliser BelleSoupe pour analyser la réponse.

Exemple :

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

1voto

dasumin Points 11

Déjà répondu ici : Qu'est-ce que suds entend par "<faultcode/> not mapped to message part" ?

Cette exception signifie en fait que la réponse du service SOAP contient une balise <faultcode> qui n'existe pas dans le schéma WSDL du service.

N'oubliez pas que la bibliothèque Suds met en cache le schéma WSDL, c'est pourquoi le problème peut survenir si le schéma WSDL a été modifié récemment. Les réponses correspondent alors au nouveau schéma, mais sont vérifiées par le suds-client avec l'ancien schéma. Dans ce cas rm /tmp/suds/* vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X