使用 Python WSDL 库调用 SOAP Web 服务时发生的错误

94 阅读1分钟

在使用 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 文件不正确或不完整,则可能会导致上述错误。