2011-08-24 65 views
1

我正在使用SOAP Web服务,它使用的是suds (0.4)。我使用的WSDL抛出suds抛出错误'type not found'正在使用SOAP服务

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

我真的被困在这里。我把这个错误用了两天,老实说我不知道​​该怎么办!也许对WSDL和泡沫更深入了解的人可以提供帮助。

所以我的问题:

  • 这是WSDL,这我消耗正确定义?如果WSDL不正确的定义(如果是正确的定义,我将其报告给皂液 维护者)

  • ,有一种解决方法(例如 泡架构医生),以将其固定到泡沫的网站?

  • 是否有另一个Python库,我应该使用?

回答

1

Suds是目前在Python中使用WSDL的最佳选择。不幸的是,WSDL本身就是一个如此复杂的混乱,以至于很难做到这一点。

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

How can I output what SUDs is generating/receiving?

然而,给人的错误类型将需要看到大量的日志记录输出和/或源代码的一个完整的答案,所以我建议你以某种方式设法缩小问题。为了使问题最终可以解决,示例(非工作)模式和Python代码将会很好。

(误差可能暗示有定义的一些子模式/外部模式/缺失,其泡沫不能理性X加载)

+0

我已将完整的日志文件发布到http://pastebin.com/ZJJFXZaG,因为它包含在这里大。所以我的理解是,我得到了服务的回应,但是通过泡沫本身对已知数据结构的阅读和应用似乎失败了。 – jazz

+0

放入pdb并逐行扫描从违规行到失败的每行代码......您应该看到何时类型跟踪机器不再跟踪该轨迹 –

+0

我已经接受了您的答案,但它会很棒,如果您已经提出了更多的WSDL ;-) – jazz

0

起初: 它没有意义的,叫无产品列表邓氏编码。该交易向给定的DUNS提供所有可用产品。如果DUNS号码为空,则只会显示所述产品的字段列表(假设您将有效的产品名称放入您的呼叫中,而不是“产品名称”)。

但是: 即使通过放入所有参数,我遇到了同样的问题,也无法解决它。

检查关于DNB,让他们纠正WSDL - 他们的WSDL是相当马车:请注意,他们只是忘了在WSDL实现整体交易(prodOrderRequest_3对于从工具包归档检索数据)

我的解决方案使用工具包的XML版本进行这个和其他提到的事务。不幸。

相关问题