Python SOAP WSDL在SOAPpy中工作,但不是ZSI或zeep
我需要一个可以处理多部分附件的python SOAP库。我的理解是,这不被SOAPpy或泡沫支持,但它是由ZSI和zeep支持的。然而,虽然SOAPpy对我需要使用的WSDL文件工作得很好,但ZSI和zeep给了我错误。这里是WSDL文件:http://nva1wss.webex.com/nbr/services/NBRStorageService?wsdl。我在SoapUI中打开文件,并使用“检查WSI合规性”选项,并通过了所有检查。Python SOAP WSDL在SOAPpy中工作,但不是ZSI或zeep
这里是我的错误:
zeep.exceptions.NamespaceError:无法解析类型{} NBRStorageService的DataHandler。名称空间u'NBRStorageService'没有可用的模式。
ZSI.generate.WsdlGeneratorError:无法为架构“NBRStorageService”找到可能缺少@schemaLocation属性的导入。
----更新的信息----
基于从ZEEP输出的详细我相信,随着WSDL的问题是,它使用一个数据类型ZEEP无法模式文档中解决在http://schemas.xmlsoap.org/soap/encoding/。以下是WSDL中的数据类型定义:
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService">
<import namespace="NBRStorageService"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ArrayOf_tns1_DataHandler">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="tns1:DataHandler[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</wsdl:types>
此WSDL似乎是使用Apache Axis 1.4生成的。
有关如何解决此问题的任何想法?或者如果任何人有任何关于服务器端更改的具体建议,我无法制作它们,但是我当然可以将它们传达给处理服务器的开发人员。
谢谢!
好的。我修好了它!
因此,我做了一些挖掘,发现这是Axis生成的WSDL的常见问题。 DataHandler类型不应该在tns1名称空间中。它应该在apachesoap命名空间中。所以,我更改了WSDL中的名称空间,但它仍然无效。因此,我做了一些更深入的挖掘,并且发现“DataHandler是一种特定于平台的类型,除Axis以外没有其他平台能够理解”,并且解决方法是将其更改为一种字节类型。
所以,这里是我在本地修改,现在正在工作的WSDL的部分:
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService">
<import namespace="NBRStorageService"/>
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ArrayOf_tns1_DataHandler">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType"
wsdl:arrayType="soapenc:byte[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</wsdl:types>
而且,BOOM!有用!我现在可以下载和处理附件,如下所述:http://docs.python-zeep.org/en/master/attachments.html