Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SAXParseException using Python and suds 0.4?

Tags:

python

soap

suds

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 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

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?

like image 727
zenzic Avatar asked Mar 01 '11 18:03

zenzic


1 Answers

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 contentand see if its an SOAP XML.

Good luck.

like image 109
alanjds Avatar answered Sep 18 '22 22:09

alanjds