2016-07-19 10 views
0

私はPython(2.6.6)およびsudsでSOAPクライアントを実装しています。サーバーは認証のためにクライアントからの証明書を必要とします。これをPythonとsudsで実装するには、this answer from Andre Mirasを使用してください。これは、サーバーからWSDLにアクセスして取得することができるため、これも機能するようです。しかし私には別の問題があります。 WSDLの解析中にxml.sax._exceptions.SAXParseException: <unknown>:1:1: not well-formed (invalid token)エラーが発生しました。私は本当に私が持っているWSDLが「オープン」のメソッドを操作得ることができますかどうかを確認するにはpython、sudsおよびクライアント証明書:SAXParseException:整形式でない(無効なトークン)

(「印刷」のを注意してください)

def open(self, request): 
    """ 
    Fetches the WSDL using cert. 
    """ 
    print "11 " 
#  self.addcredentials(request) 
    resp = requests.get(request.url, data=request.message, 
         headers=request.headers, cert=self.cert) 
    result = io.StringIO(resp.content.decode('utf-8')) 
    print str(result.getvalue()) 
    print "<<WSDL END>>" 
    return result 

私はスクリプトを実行した場合、私は出力を得る:

11 
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://webService.net.app.my.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="CStatisticService" targetNamespace="http://webService.net.app.my.com/"> 
    <wsdl:types> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://webService.net.app.my.com/" elementFormDefault="unqualified" targetNamespace="http://webService.net.app.my.com/" version="1.0"> 

    <xs:element name="getFileActionsNmbr" type="tns:getFileActionsNmbr"/> 
... 
... 
... 
    </wsdl:service> 
</wsdl:definitions> 
<<WSDL END>> 
Traceback (most recent call last): 
    File "./c-App_jvmThreads", line 63, in <module> 
    client = suds.client.Client(wsdl_url, headers=headers, transport=t) 
    File "/usr/lib/python2.6/site-packages/suds/client.py", line 112, in __init__ 
    self.wsdl = reader.open(url) 
    File "/usr/lib/python2.6/site-packages/suds/reader.py", line 152, in open 
    d = self.fn(url, self.options) 
    File "/usr/lib/python2.6/site-packages/suds/wsdl.py", line 136, in __init__ 
    d = reader.open(url) 
    File "/usr/lib/python2.6/site-packages/suds/reader.py", line 79, in open 
    d = self.download(url) 
    File "/usr/lib/python2.6/site-packages/suds/reader.py", line 101, in download 
    return sax.parse(string=content) 
    File "/usr/lib/python2.6/site-packages/suds/sax/parser.py", line 136, in parse 
    sax.parse(source) 
    File "/usr/lib64/python2.6/xml/sax/expatreader.py", line 107, in parse 
    xmlreader.IncrementalParser.parse(self, source) 
    File "/usr/lib64/python2.6/xml/sax/xmlreader.py", line 123, in parse 
    self.feed(buffer) 
    File "/usr/lib64/python2.6/xml/sax/expatreader.py", line 211, in feed 
    self._err_handler.fatalError(exc) 
    File "/usr/lib64/python2.6/xml/sax/handler.py", line 38, in fatalError 
    raise exception 
    xml.sax._exceptions.SAXParseException: <unknown>:1:1: not well-formed (invalid token) 

私はWSDLを明確にするためにカットしました。しかし、SOAPサービスを使用するJavaクライアントもあり、WSDLを正常に読み取って解析できます。

何が間違っている可能性がありますか?

答えて

0

私は次の行を置き換える必要があります。コメントアウトコードは古いコード、非コメント行新しい新しいコードです:なぜ

#import io 
import StringIO 

... 
#  result = io.StringIO(resp.content.decode('utf-8')) 
    result = StringIO.StringIO(resp.content) 

わからないが、これは(動作しないだけでio.StringIO(resp.content)を変更)私のために動作します。

関連する問題