gpt4 book ai didi

python - SOAP suds 和可怕的模式未找到类型错误

转载 作者:IT老高 更新时间:2023-10-28 21:17:20 25 4
gpt4 key购买 nike

我是第一次使用最新版本的 suds (https://fedorahosted.org/suds/),但我在第一步就停滞不前了。

suds.TypeNotFound: Type not found: '(schema, http://www.w3.org/2001/XMLSchema, )'

现在,我知道这在 suds 世界( https://fedorahosted.org/suds/wiki/TipsAndTricks#Schema-TypeNotFoundPython/Suds: Type not found: 'xs:complexType' )中覆盖得很好,但这似乎略有不同,因为 (a) 架构应该在版本 0.3.4 和 (b) 之后自动绑定(bind)) 即使明确使用解决方法,它仍然不起作用。

from suds.client import Client
from suds.xsd.sxbasic import Import

url = 'file:wsdl.wsdl'
Import.bind('http://schemas.xmlsoap.org/soap/encoding/')
client = Client(url, cache = None)

使用 wsdl:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://ws.client.com/Members.asmx"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://ws.client.com/Members.asmx"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="http://ws.client.com/Members.asmx">

<s:element name="GetCategoriesResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetCategoriesResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>

</s:schema>
</wsdl:types>
</wsdl:definitions>

产生上述异常。

最佳答案

我在这个问题上撞了一会儿。我终于通过使用以下语法解决了这个问题:

from suds.xsd.doctor import ImportDoctor, Import

url = 'http://somedomain.com/filename.php?wsdl'
imp = Import('http://schemas.xmlsoap.org/soap/encoding/')
imp.filter.add('http://some/namespace/A')
doctor = ImportDoctor(imp)

client = Client(url, doctor=doctor)

重要的是,从 url 开始。在浏览器中打开该文件,它将为您提供 wsdl 定义。确保您在此处输入了正确的 url,并且确实打开了一个 XML 文件。还要注意网址末尾的 ?wsdl。

第二,imp = Import('http://schemas.xmlsoap.org/soap/encoding/')将导入标准 SOAP 模式。

第三,imp.filter.add('http:somedomain.com/A')将添加您的特定命名空间。您可以通过打开上面在 url= 中定义的 url 找到此命名空间位置。并寻找 <wsdl:import namespace="http://somedomain.com/A" 部分.

还要注意网址中的 http 与 https。

关于python - SOAP suds 和可怕的模式未找到类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com