在使用 Python WSDL 库调用 SOAP web 服务时,遇到如下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pymodules/python2.7/SOAPpy/WSDL.py", line 62, in __init__
self.wsdl = reader.loadFromStream(stream, wsdlsource)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/WSDLTools.py", line 34, in loadFromStream
wsdl.load(document)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/WSDLTools.py", line 260, in load
schema = reader.loadFromNode(WSDLToolsAdapter(self), item)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 80, in loadFromNode
schema.load(reader)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 1088, in load
self.addImportSchema(tp.getSchema())
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 1205, in getSchema
self._schema = reader.loadFromURL(url)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 114, in loadFromURL
schema.load(reader)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 1120, in load
tp.fromDom(node)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 1764, in fromDom
self.setAttributes(node)
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 627, in setAttributes
self.__checkAttributes()
File "/usr/lib/pymodules/python2.7/SOAPpy/wstools/XMLSchema.py", line 681, in __checkAttributes
%(self.getItemTrace(), a, self.attributes[a])
SOAPpy.wstools.XMLSchema.SchemaError: <schema targetNamespace="http://tempuri.org/DataSetGW4.xsd"><element name="DataSetGW4">, unknown attribute(urn:schemas-microsoft-com:xml-msdata,{u'IsDataSet': u'true', u'UseCurrentLocale': u'true'})
2. 解决方案
1) 使用 Suds 库
由于 SOAPpy 库可能存在一些兼容性问题,因此建议使用 Suds 库来解析 WSDL 文件。Suds 库是一个更完备且更宽容的 SOAP 库。
import suds.client as client
# 创建一个 Suds 客户端对象
session = client.Client('file:///absolute/path/to/yourwsdl')
2) 更新依赖库
如果使用的是 Python 2.7,则需要确保已安装最新版本的 SOAPpy 库。您可以使用以下命令来更新依赖库:
pip install --upgrade SOAPpy
3) 使用正确的 WSDL 文件
确保您使用的 WSDL 文件是正确的。如果 WSDL 文件不正确或不完整,则可能会导致上述错误。