ошибка выдачи suds «тип не найден», использующий сервис SOAP - PullRequest
2 голосов
/ 24 августа 2011

Я использую веб-сервис SOAP с suds (0.4) . WSDL , который я использую, выдает ошибку

>>> import uuid
>>> from suds.client import Client
>>> wsdl = 'https://toolkit.dnb.com/locked/resource/docs/TransactionAndMessageDefinition/ProductList.wsdl'
>>> client = Client(wsdl) 

Сервис, который я использую, ожидает один параметр productListRequest, который является сложным типом, в который вы помещаете UserId, Passwordи сложный тип ProductListInput.

Я заполняю их:

>>> productListRequest = client.factory.create('productListRequest')
>>> productListRequest.UserId = 'myusername'
>>> productListRequest.Password = 'mypassword'
>>> productListRequest.TRNUID = uuid.uuid4()
>>> ProductListInput = client.factory.create('ProductListInput')
>>> ProductListInput.DnB_DUNS_Number = ''
>>> ProductListInput.Product = 'Product Name'
>>> ProductListInput.CountryCode = 'IT'
>>> ProductListInput.TradeUp = ''
>>> ProductListInput.Reason = ''
>>> productListRequest.ProductListInput = ProductListInput

Но всякий раз, когда я звоню в службу:

>>> print client.service.ws_ProductList(productListRequest)

Я получаю Type not found: 'ArrayOfUPD_FLDSItem'

Ядействительно застрял здесь.Я погуглил эту ошибку в течение 2 дней и, честно говоря, я не знаю, что делать!Может быть, кто-то с более глубоким пониманием WSDL и suds может помочь.

Итак, мои вопросы:

  • Является ли этот WSDL, который я потребляю, правильно определенным?(Если он определен правильно, я сообщу об этом сопровождающим suds)

  • Если этот WSDL не определен должным образом, существует ли обходной путь (например, врач схемы suds) для его исправлениясайт?

  • Есть ли альтернативная библиотека Python, которую я должен использовать?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Suds в настоящее время является лучшим выбором для потребления WSDL в Python.К сожалению, WSDL сам по себе настолько сложный беспорядок, что извлечь из него пользу сложно.

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

Как вывести то, что SUD генерирует / получает?

Однако для полного ответа на ошибку типа потребуетсявидя обширные выходные данные журналов и / или исходный код, поэтому я предлагаю вам как-то попытаться сузить проблему.Было бы неплохо разрешить проблему в конечном итоге на примере (нерабочей) схемы и кода Python.

(Ошибка может указывать на то, что определена / отсутствует некоторая подсхема / внешняя схема, которую Suds не может загрузить по причине X)

0 голосов
/ 19 января 2013

Сначала: Не имеет смысла называть список продуктов без номера DUNS. Транзакция предоставляет все доступные продукты для данного DUNS. Если номер DUNS оставить пустым, вы получите только список полей продукта, который вы указали (при условии, что вы указали правильное название продукта в своем вызове, а не «название продукта»).

НО: Даже введя все параметры, я столкнулся с той же проблемой и не смог ее решить.

Проверьте с помощью DnB и заставьте их исправить WSDL - их WSDL довольно глючные: обратите внимание, что они просто забыли целую транзакцию в реализации WSDL (prodOrderRequest_3 для получения данных из архива инструментария)

Мое решение - использовать XML-версию инструментария для этой и другой упомянутой транзакции. К сожалению.

...