Что suds означает «<код ошибки /> не сопоставлен с частью сообщения»? - PullRequest
5 голосов
/ 03 июня 2010

Я впервые использую suds и пытаюсь связаться с сервером, размещенным во внешней компании. Когда я вызываю метод на сервере, я получаю этот XML обратно.

<?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>

Исключение:


  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

Есть идеи, почему suds создает исключение? Есть мысли о том, как это можно исправить?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2013

У меня была похожая проблема, когда вызов был успешным, и 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')
0 голосов
/ 01 августа 2014

Уже здесь ответили: Что означает пение под "<код ошибки /> не сопоставлен с частью сообщения"?

Это исключение фактически означает, что ответ от SOAP-сервиса содержит тег <faultcode>, которого нет в WSDL-схеме сервиса.

Имейте в виду, что библиотека suds кэширует WSDL-схему, поэтому проблема может возникнуть, если WSDL-схема была недавно изменена. Затем ответы соответствуют новой схеме, но проверяются suds-клиентом со старой. В этом случае rm /tmp/suds/* поможет вам.

...