2009-08-29 12 views
9

私はSABER travel WebサービスをPython Sudsで使用しようとしていますが、1つのXSDが正しく構成されていないようです(このスキーマには名前空間がない可能性があります)。Python Suds(バージョン0.3.6)でXSDスキーマをインポートする方法SOAPライブラリ:TypeNotFound例外?


from suds.client import Client 
wsdl = 'http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl' 
client = Client(wsdl, cache=None) 

デバッグトレースを返す:


.DEBUG:suds.wsdl:reading wsdl at: http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl ... 
DEBUG:suds.transport.http:opening (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl) 
DEBUG:suds.metrics:sax (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl) duration: 406 (ms) 
DEBUG:suds.xsd.sxbasic:Import:0x7f90196fd5f0, importing ns="http://webservices.sabre.com/sabreXML/2003/07", location="OTA_AirPriceLLSRQRS.xsd" 
DEBUG:suds.transport.http:opening (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQRS.xsd) 
DEBUG:suds.metrics:sax (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQRS.xsd) duration: 504 (ms) 
DEBUG:suds.xsd.sxbasic:Include:0x7f90196fdf80, importing ns="None", location="OTA_AirPriceLLSRQ.xsd" 
DEBUG:suds.transport.http:opening (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd) 
DEBUG:suds.metrics:sax (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd) duration: 1.363 (seconds) 
DEBUG:suds.xsd.schema:built: 
Schema:0x7f9019708e60 
(...) 
DEBUG:suds.xsd.query:(u'MessageHeader', http://www.ebxml.org/namespaces/messageHeader), found as: 
DEBUG:suds.xsd.query:(u'Security', http://schemas.xmlsoap.org/ws/2002/12/secext), found as: 
DEBUG:suds.xsd.query:(u'OTA_AirPriceRQ', http://webservices.sabre.com/sabreXML/2003/07), not-found 
. 
---------------------------------------------------------------------- 
Ran 2 tests in 11.669s 

Type not found: '(OTA_AirPriceRQ, http://webservices.sabre.com/sabreXML/2003/07,)' 

それはロジックです:Pythonの泡は、 "なし" 名前空間にOTA_AirPriceRQをロードします。 私はPythonの泡のドキュメント(https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs) "壊れたスキーマ修正" 読み:


from suds.client import Client 
from suds.xsd.doctor import ImportDoctor, Import 
wsdl = 'http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl' 
imp = Import('http://webservices.sabre.com/sabreXML/2003/07/OTA_AirPriceLLSRQ', 'http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd') 
d = ImportDoctor(imp) 
client = Client(wsdl, cache=None, doctor=d) 

をしかし、スクリプトが別の例外を返します。


.DEBUG:suds.wsdl:reading wsdl at: http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl ... 
DEBUG:suds.transport.http:opening (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl) 
DEBUG:suds.metrics:sax (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.wsdl) duration: 617 (ms) 
DEBUG:suds.xsd.doctor:inserting: 
DEBUG:suds.xsd.sxbasic:Import:0xe6cf80, importing ns="http://webservices.sabre.com/sabreXML/2003/07/OTA_AirPriceLLSRQ", location="http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd" 
DEBUG:suds.transport.http:opening (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd) 
DEBUG:suds.metrics:sax (http://webservices.sabre.com/wsdl/sabreXML1.0.00/tpf/OTA_AirPriceLLSRQ.xsd) duration: 1.375 (seconds) 
DEBUG:suds.xsd.doctor:inserting: 
(...) 
Error maximum recursion depth exceeded while calling a Python object 

私は "医者" 機能を使用する方法を理解していません。誰かが私を助けることができますか? ありがとうございます。

答えて

3

ただ、そのSudsチケットに回避策を掲載しました。あなたはそれをチェックアウトすることもできます。https://fedorahosted.org/suds/ticket/239#comment:19

簡単に言えば、ここでの回避策のコードがあります:

from suds.client import Client 
import sys 
sys.setrecursionlimit(10000) 
c = Client('http://url.to/endpoint?wsdl', cache=None) 
関連する問題