【问题标题】:SUDS Exception Imported Schema FailedSUDS 异常导入架构失败
【发布时间】:2014-07-29 15:59:52
【问题描述】:

我收到了错误:

例外:导入的架构 (http://www.w3.org/2001/XMLSchema) 位于 (http://www.w3.org/2001/XMLSchema.xsd),失败

将 Doctor(使用 ImportDoctor 构造)传递给 suds Client 构造函数时。

我在两台 Windows 机器上工作,它们都安装了相同版本的 suds,但只有其中一台出现上述错误。

有人可以在这里指导我了解为什么会出现此错误吗?这样我就可以弄清楚发生错误的机器上缺少什么?

提前致谢!!!。

更新:我真的不知道这是否重要,但值得注意的是,我的 Windows 出现错误的机器是一个 Amazon Web服务 实例。在我的本地机器上一切正常!

更新:这是我在我提到的机器的 python 解释器上运行的一些代码。在这里您可以详细说明错误是如何上升的......

>>> from suds.client import Client
>>> from suds.xsd.doctor import ImportDoctor, Import
>>> missing_import = Import("http://www.w3.org/2001/XMLSchema")
>>> missing_import.filter.add("http://tempuri.org/")
>>> doctor = ImportDoctor(missing_import)
>>> client = Client("http://etcfulfill.ebooks.com/Fulfillment.asmx?wsdl")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "suds\client.py", line 112, in __init__
    self.wsdl = reader.open(url)
  File "suds\reader.py", line 152, in open
    d = self.fn(url, self.options)
  File "suds\wsdl.py", line 159, in __init__
    self.build_schema()
  File "suds\wsdl.py", line 220, in build_schema
    self.schema = container.load(self.options)
  File "suds\xsd\schema.py", line 95, in load
    child.dereference()
  File "suds\xsd\schema.py", line 323, in dereference
    midx, deps = x.dependencies()
  File "suds\xsd\sxbasic.py", line 422, in dependencies
    raise TypeNotFound(self.ref)
suds.TypeNotFound: Type not found: '(schema, http://www.w3.org/2001/XMLSchema, )'
>>> client = Client("http://etcfulfill.ebooks.com/Fulfillment.asmx?wsdl", doctor=doctor)
No handlers could be found for logger "suds.xsd.sxbasic"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "suds\client.py", line 112, in __init__
    self.wsdl = reader.open(url)
  File "suds\reader.py", line 152, in open
    d = self.fn(url, self.options)
  File "suds\wsdl.py", line 159, in __init__
    self.build_schema()
  File "suds\wsdl.py", line 220, in build_schema
    self.schema = container.load(self.options)
  File "suds\xsd\schema.py", line 93, in load
    child.open_imports(options)
  File "suds\xsd\schema.py", line 305, in open_imports
    imported = imp.open(options)
  File "suds\xsd\sxbasic.py", line 542, in open
    result = self.download(options)
  File "suds\xsd\sxbasic.py", line 567, in download
    raise Exception(msg)
Exception: imported schema (http://www.w3.org/2001/XMLSchema) at (http://www.w3.org/2001/XMLSchema.xsd), failed

更新

我意识到 suds 连接总是在 TCP 增加的端口中打开,如果它达到最大 TCP 端口 (65535) 然后它开始从可用的最小 TCP 端口再次打开,所以这没有问题。

使用 suds ImportDoctor 时会出现此问题,因为它必须打开与应检索导入的位置的先前连接,并且由于某种原因,如果系统达到最大 TCP 端口数,然后 suds 以某种方式假定没有可用于打开连接以获取导入的 TCP 端口,并且连续抛出异常:

例外:在 (http://www.w3.org/2001/XMLSchema.xsd) 导入架构 (http://www.w3.org/2001/XMLSchema),失败

我再说一遍,这只有在 suds 必须打开之前的连接以获取导入时才会发生。如果不使用 ImportDoctor,那么如果 TCP 端口数达到最大值,suds 没有问题,它只是在可用的最小端口处重新启动。

有没有人知道如何解决这个问题???。非常感谢您的帮助!!!。

【问题讨论】:

  • 使用 suds-jurko:pypi.python.org/pypi/suds-jurko/0.6 时是否也会出现这种情况? suds 不再维护。
  • 我实际上使用的是原始的 suds 库。更改为 suds-jurko 目前不在我的范围内,但是 suds 一直运行良好,我只遇到了这个奇怪的问题!!!。还是谢谢!!!
  • 我必须使用Import('http://schemas.xmlsoap.org/soap/encoding/', location='http://schemas.xmlsoap.org/soap/encoding/'); doctor = ImportDoctor(imp) 才能使其工作。
  • 你说的我已经试过了。还没为我工作!!!。我猜这可能与我在问题中描述的网络原因有关,它在 AWS 机器中失败,它有时可以工作,但随后又失败了!!!。混乱!!!感谢您的帮助。
  • 也可能是您使用的服务有问题。如果他们有一个配置错误的网站,有时会提供不正确(或没有)的 WSDL 文件,那么您可以得到这个。或者这可能是您的网络问题。

标签: python soap tcp suds


【解决方案1】:

我已经找出问题所在。我尝试与 suds 一起使用的 WSDL 中缺少的架构是:

http://www.w3.org/2001/XMLSchema

此架构的 XSD 文件位于:

http://www.w3.org/2001/XMLSchema.xsd

所以当我使用 suds ImportDoctor 添加此架构导入时,有时 w3.org 域会拒绝我的访问(不要真的知道为什么),这就是为什么这个错误上升的原因:

例外:在 (http://www.w3.org/2001/XMLSchema.xsd) 导入架构 (http://www.w3.org/2001/XMLSchema),失败

我做了什么来解决这个问题?我刚刚将此架构下载到我的机器并使用 suds ImportDoctor 在本地检索此导入。

就是这样!!!。令人困惑的错误!!!!但是已解决

【讨论】:

  • 您能告诉我们您是如何在本地加载架构的吗?谢谢
  • 我无法再访问此代码。但这应该只是使用 ImportDoctor 从本地 URL 导入的问题。使用 missing_import = Import("w3.org/2001/XMLSchema") 时,尝试下载 XSD 文件的本地 URL,而不是通过 w3.org 通过 HTTP 访问托管文件。希望这会有所帮助!
  • @john 你能导入本地网址吗?我试过 imp = Import('w3.org/2001/XMLSchema', location='file://XMLSchema.xsd') imp = Import('w3.org/2001/XMLSchema', location='XMLSchema.xsd') 但没有人工作。
猜你喜欢
  • 1970-01-01
  • 2022-06-14
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多