【问题标题】:SOAP suds and the dreaded schema Type Not Found errorSOAP suds 和可怕的模式未找到类型错误
【发布时间】:2011-01-18 02:06:39
【问题描述】:

我是第一次使用最新版本的 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 ) 即使明确使用解决方法,它仍然不起作用。

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>

产生上述异常。

【问题讨论】:

    标签: python soap suds


    【解决方案1】:

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

    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 并查找 &lt;wsdl:import namespace="http://somedomain.com/A" 部分来找到此命名空间位置。

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

    【讨论】:

    • +1 用于引用 namespace-url,这实际上非常重要,因为您可以轻松地在那里重用 wsdl-url,这将无济于事
    • 这适用于我面临的问题stackoverflow.com/questions/44586989/… 吗?
    • 如果您的 XML 没有 &lt;wsdl:import namespace="http://something/"&gt;,您会使用什么?因为我没有。
    【解决方案2】:

    我们让它工作了,我希望你也能做到,尽管它有点古怪。也许明确的位置或过滤器会有所帮助。例如:

    imp = Import(
        'http://schemas.xmlsoap.org/soap/encoding/',
        location='http://schemas.xmlsoap.org/soap/encoding/'
    )
    imp.filter.add('http://ws.client.com/Members.asmx')
    client = Client(url, plugins=[ImportDoctor(imp)])
    

    【讨论】:

    • 感谢您的回答,我相信它会帮助未来遇到此问题的人。唉,我决定只用 XML 来处理丑陋但令人惊讶的不难做到的界面。
    • @dpjanes:确实如此。只花了两天时间就让这个该死的东西工作了。
    • 这似乎对我没有任何影响。在进行导入之前和之后,我得到了与上述完全相同的错误。我正在使用最新的 suds 0.4
    • 这是否适用于我的问题stackoverflow.com/questions/44586989/…
    【解决方案3】:

    对于那些仍然被这个问题困扰的人。此链接https://bitbucket.org/jurko/suds/issue/20/typenotfound-schema 可能会提供有用的信息。解决方案是这样的:

    from suds.client import Client
    from suds.xsd.doctor import Import, ImportDoctor
    
    url = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl'
    imp = Import('http://www.w3.org/2001/XMLSchema',
        location='http://www.w3.org/2001/XMLSchema.xsd')
    imp.filter.add('http://WebXml.com.cn/')
    client = Client(url, doctor=ImportDoctor(imp))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多