suds抛出错误'未找到类型'消费SOAP服务

时间:2011-08-24 17:42:47

标签: python soap wsdl client suds

我正在使用suds (0.4)的SOAP Web服务。我使用的WSDL会抛出错误

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

我正在使用的服务需要一个参数productListRequest,这是一个复杂类型,您可以放置​​UserIdPassword和复杂类型的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'

我真的被困在这里了。我用Google搜索了这个错误2天,说实话,我不知道该怎么办!也许对WSDL和suds有更深入理解的人可以提供帮助。

所以我的问题:

  • 这个WSDL是我正在消费的吗? (如果定义合适,我会向肥皂水报告 维护者)

  • 如果没有正确定义此WSDL,是否有解决方法(例如 suds schema doctor)将其固定在肥皂水网站上?

  • 是否有其他Python库,我应该使用它?

2 个答案:

答案 0 :(得分:1)

Suds目前是Python中WSDL消费的最佳选择。不幸的是,WSDL本身就是一个如此复杂的混乱,很难从中获利。

幸运的是,Suds具有广泛的日志记录功能,您可以使用它来调试问题,这是解决问题的第一步。之前的问题回答了如何启用它:

How can I output what SUDs is generating/receiving?

但是,给出类型错误的完整答案需要查看大量的日志记录输出和/或源代码,因此我建议您以某种方式尝试缩小问题范围。为了使问题最终可以解决,样本(非工作)模式和Python代码会很好。

(该错误可能暗示存在某些子模式/外部模式已定义/缺失,因为X而无法加载Suds)

答案 1 :(得分:0)

起初: 没有DUNS-Number就调用产品列表没有意义。该交易将所有可用产品提供给给定的DUNS。如果DUNS号码留空,您将只获得您所述产品的字段列表(假设您在呼叫中输入了有效的产品名称,而不是“产品名称”)。

<强> BUT: 即使把所有参数都放进去,我也遇到了同样的问题而且无法解决它。

检查DnB并使它们更正WSDL - 它们的WSDL非常错误:注意它们只是忘记了WSDL实现中的整个事务(prodOrderRequest_3用于从工具包存档中检索数据)

我的解决方案是使用Toolkit的XML版本和其他提到的事务。不幸的是

相关问题