我有以下简单的python测试脚本,它使用Suds来调用SOAP Web服务(该服务是用ASP.net编写的):
from suds.client import Client
url = 'http://someURL.asmx?WSDL'
client = Client( url )
result = client.service.GetPackageDetails( "MyPackage" )
print result
Run Code Online (Sandbox Code Playgroud)
当我运行此测试脚本时,我收到以下错误(使用代码标记,因为它不包装):
No handlers could be found for logger "suds.bindings.unmarshaller"
Traceback (most recent call last):
File "sudsTest.py", line 9, in <module>
result = client.service.GetPackageDetails( "t3db" )
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 240, in __call__
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 379, in call
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 240, in __call__
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 422, in call
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 480, in invoke
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 505, in send
File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 537, in succeeded
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/binding.py", line 149, in get_reply
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 303, in process
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 88, in process
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 102, in append
File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 324, in start
suds.TypeNotFound: Type not found: 'xs:complexType'
Run Code Online (Sandbox Code Playgroud)
查看WSDL文件头的源代码(重新格式化为适合):
<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="http://http://someInternalURL/webservices.asmx"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
targetNamespace="http://someURL.asmx"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Run Code Online (Sandbox Code Playgroud)
我猜测基于最后一行输出:
suds.TypeNotFound: Type not found: 'xs:complexType'
Run Code Online (Sandbox Code Playgroud)
我需要使用Sud的医生类来修复模式,但作为一个SOAP新手,我不知道在我的情况下究竟需要修复什么.有没有人有使用Suds修复/更正架构的经验?
Gmo*_*onC 14
Ewall的资源很好.如果您尝试搜索suds trac票证,您可能会看到其他人遇到与您类似的问题,但具有不同的对象类型.它可以是学习它的示例以及它们如何导入命名空间的好方法.
问题是您的wsdl包含引用(...)的模式定义,但无法正确导入" http://schemas.xmlsoap.org/soap/encoding/ "名称空间(和关联的模式).可以使用如下所述的模式ImportDoctor在运行时修补模式:https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs .
这是一个相当普遍的问题.
通常引用的模式(未导入)是SOAP部分5编码模式.现在可以修复如下:
(所有重点都是我的).
您可以尝试这些文档提供的行添加WSDL中显示的命名空间.这可能是一个尝试错误的方法.
imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
# Below is your targetNamespace presented in WSDL. Remember
# that you can add more namespaces by appending more imp.filter.add
imp.filter.add('http://someURL.asmx')
doctor = ImportDoctor(imp)
client = Client(url, doctor=doctor)
Run Code Online (Sandbox Code Playgroud)
你没有提供你正在使用的WSDL,我想你有理由不向我们展示......所以我认为你必须自己尝试这些可能性.祝好运!