I have a simple Python script that uses Suds to pull data from a SOAP web service. It works perfectly on one machine, but when I move it to another that has an older version of Python (2.4.3), I get the following stack trace:
>>> 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 pars开发者_开发知识库e
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
I've looked at various related errors involving the cache, but that doesn't seem to be the issue. I've disabled the cache and /tmp/suds only contained a version file in any case.
Is this likely related to the Python version or is there something else obvious that I should try?
I had the same problem. The server has answering HTML instead of SOAP.
The endpoint has responding with an HTML message of error, not an SOAP XML. For some reason, SUDS says "I cannot parse this. Halp!" instead of "I cannot parse this answer: < answer here >", even with DEBUG log level.
Found that poking into suds.reader, using a debugger:
/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):
Look at content
and see if its an SOAP XML.
Good luck.
精彩评论