【问题标题】:SAXParseException using Python and suds 0.4?SAXParseException 使用 Python 和 suds 0.4?
【发布时间】:2011-03-01 18:52:19
【问题描述】:

我有一个简单的 Python 脚本,它使用 Suds 从 SOAP Web 服务中提取数据。它可以在一台机器上完美运行,但是当我将它移动到另一台具有旧版本 Python (2.4.3) 的机器上时,我得到以下堆栈跟踪:

>>> client = suds.client.Client(url, username='xxx', password='xxx', location=service_location, cache=None)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/home/etlsmart/lib/python2.4/site-packages/suds/client.py", line 112, in __init__
    self.wsdl = reader.open(url)
File "build/bdist.linux-i686/egg/suds/reader.py", line 152, in open
File "build/bdist.linux-i686/egg/suds/wsdl.py", line 136, in __init__
File "build/bdist.linux-i686/egg/suds/reader.py", line 79, in open
File "build/bdist.linux-i686/egg/suds/reader.py", line 101, in download
File "/home/etlsmart/lib/python2.4/site-packages/suds/sax/parser.py", line 136, in parse
    sax.parse(source)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/expatreader.py", line 109, in parse
    xmlreader.IncrementalParser.parse(self, source)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/expatreader.py", line 220, in feed
    self._err_handler.fatalError(exc)
File "/usr/lib/python2.4/site-packages/_xmlplus/sax/handler.py", line 38, in fatalError
    raise exception
xml.sax._exceptions.SAXParseException: <unknown>:18:2: mismatched tag

我查看了涉及缓存的各种相关错误,但这似乎不是问题所在。我已经禁用了缓存,并且 /tmp/suds 无论如何都只包含一个版本文件。

这可能与 Python 版本有关,还是我应该尝试其他明显的东西?

【问题讨论】:

  • 好吧,我已经将 python 升级到 2.7.1 并得到了同样的错误,所以它是环境中的其他东西。任何建议在哪里寻找将不胜感激。
  • 好的,所以我找到了问题所在,这是我的愚蠢和错误假设的结合(如果两者之间确实存在差异)。当我移动到第二个盒子时,它位于不同的网段上。因此,我没有与 Web 服务器对话,而是与要求我进行身份验证的防火墙对话。我通过在调试器中逐步检查发现了这一点,但对于任何有类似问题的人,您可以在 xml/sax/xmlreader.py 中的第 121 行之后执行类似“打印缓冲区”之类的操作,以确保它是格式正确的 xml。

标签: python soap suds


【解决方案1】:

我遇到了同样的问题。服务器有应答 HTML 而不是 SOAP。

端点已响应 HTML 错误消息,而不是 SOAP XML。出于某种原因,SUDS 说“我无法解析这个。Halp!”而不是“我无法解析这个答案:”,即使是 DEBUG 日志级别。

发现使用调试器插入 suds.reader:

/usr/lib/python2.6/site-packages/suds/reader.py in download(self, url)
    100         content = ctx.document
    101         sax = Parser()
--> 102         return sax.parse(string=content)
    103 
    104     def cache(self):

查看content,看看它是否是 SOAP XML。

祝你好运。

【讨论】:

  • 这里有同样的问题。具体来说,我忘记将“?WSDL”附加到 SOAP 端点 URL 的末尾,这导致它返回 HTML 而不是 SOAP XML,就像你说的那样。
  • 我时常遇到这个问题。在我将 WSDL 文件保存在本地并使用 file: URI 引用它后,问题终于消失了。诚然,这违背了 WSDL 的全部意义,并且可能不是每个人的选择,但对于我的用例来说,这是一个可以接受的解决方案。
  • 如果用户没有被授权,也会发生这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多