2009-08-29 3 views
9

나는 SABER 여행 웹 서비스를 Python Suds와 함께 사용하려하지만, 하나의 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,)' 

그것은 논리의 :에 "없음"네임 스페이스에 파이썬 배트로드 OTA_AirPriceRQ을. 내가 파이썬 배트 문서 (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 티켓에 대한 해결 방법을 게시했습니다. 당신은 그것을 체크 아웃 할 수 있습니다 :

from suds.client import Client 
import sys 
sys.setrecursionlimit(10000) 
c = Client('http://url.to/endpoint?wsdl', cache=None) 
: https://fedorahosted.org/suds/ticket/239#comment:19

잠시, 여기에 해결 코드입니다

관련 문제