2009-08-25 3 views
10

을 내가 가지고 (서비스가 ASP.net로 작성)를 SOAP 웹 서비스 호출 Suds을 사용하여 다음과 같은 간단한 파이썬 테스트 스크립트 :파이썬/배트는 : 찾을 수없는 유형 : 'XS : complexType에'

from suds.client import Client 

url = 'http://someURL.asmx?WSDL' 

client = Client(url) 

result = client.service.GetPackageDetails("MyPackage" ) 

print result 
을 나는 다음과 같은 오류가 발생하고이 테스트 스크립트를 실행하면

(사용 코드 마크 업 그것은 포장하지 않는 한) :

No handlers could be found for logger "suds.bindings.unmarshaller" 
Traceback (most recent call last): 
    File "sudsTest.py", line 9, in <module> 
    result = client.service.GetPackageDetails("t3db" ) 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 240, in __call__ 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 379, in call 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 240, in __call__ 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 422, in call 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 480, in invoke 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 505, in send 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/client.py", line 537, in succeeded 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/binding.py", line 149, in get_reply 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 303, in process 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 88, in process 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 104, in append 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 181, in append_children 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 102, in append 
    File "build/bdist.cygwin-1.5.25-i686/egg/suds/bindings/unmarshaller.py", line 324, in start 
suds.TypeNotFound: Type not found: 'xs:complexType' 

는 WSDL 파일의 헤더의 소스를 보면 (맞게 포맷) :

<?xml version="1.0" encoding="utf-8" ?> 
<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:s="http://www.w3.org/2001/XMLSchema" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:tns="http://http://someInternalURL/webservices.asmx" 
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
targetNamespace="http://someURL.asmx" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> 

I 오전 출력의 마지막 줄을 기반으로 추측 : 나는 수드의 doctor class를 사용할 필요가

suds.TypeNotFound: Type not found: 'xs:complexType' 

스키마를 수정하지만 SOAP 초보자 내가 내 경우에는 고정 정확히 요구를 모르는 것. 여기 누군가는 Suds를 사용하여 스키마를 수정/수정 한 경험이 있습니까?

+1

난 그냥 간단한 C# 테스트 응용 프로그램을 시도하고이 서비스에 연결할 수 있습니다 (하지만 다음 ASP.net 기반 서비스입니다). Suds가 기본적으로 지원하지 않는 Microsoft 특정 서비스 일 수 있습니까? – Danielb

+0

서비스가 DataSet을 반환하려고 시도하는 것 같습니다. 로거에 다음과 같은 메시지가 표시됩니다. 경고 : suds.bindings.unmarshaller : 속성 (IsDataSet) 유형, 찾을 수 없음 경고 : suds.bindings.unmarshaller : 속성 (이름) 유형이 발견되지 않음 오류 : suds .bindings.unmarshaller : Schema : 0x7fce048c – Danielb

+0

SUDS처럼 들리는데 데이터 세트의 구조를 지정하는 태그에서 가져 오지 못합니다. WSDL에서 수입품을 검색 했습니까? 이것이 답이면 SUDS의 ImportDoctor가 도움이 될 것입니다. https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs – ewall

답변

15

Ewall의 자료는 좋은 것입니다. suds trac 티켓을 검색하려고하면 다른 사람들이 다른 객체 유형과 함께 문제가 있음을 알 수 있습니다 (similar to yours). 예제를 통해 배우고 이름 공간을 가져 오는 방법은 좋은 방법 일 수 있습니다.

The problem is that your wsdl contains a schema definition that references the (...) but fails to import the " http://schemas.xmlsoap.org/soap/encoding/ " namespace (and associated schema) properly. The schema can be patched at runtime using the schema ImportDoctor as discussed here: https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs .

This is a fairly common problem.

A commonly referenced schema (that is not imported) is the SOAP section 5 encoding schema. This can now be fixed as follows:

(모두 중점을두고 있음).

이 문서에서 WSDL에 표시된 네임 스페이스를 추가하는 줄을 시도해 볼 수 있습니다. 이것은 try-and-error aproach가 될 수 있습니다.

imp = Import('http://schemas.xmlsoap.org/soap/encoding/') 
# Below is your targetNamespace presented in WSDL. Remember 
# that you can add more namespaces by appending more imp.filter.add 
imp.filter.add('http://someURL.asmx') 
doctor = ImportDoctor(imp) 
client = Client(url, doctor=doctor) 

당신은 당신이 작업하고있는 WSDL을 제공하지 않았다, 그래서 난 당신이 스스로 이러한 가능성을 시도해야 생각 ... 당신이 우리에게 표시되지에 이유가 있다고 가정합니다. 행운을 빕니다!

+0

에서의 예제 나는 이것을 어떤 이유로 든 대답으로 받아들이지 못하는 것 같습니다 : ( – Danielb

+0

나는 그것이 당신의 문제를 완전히 해결하지 못한다는 것을 알고 있습니다. 그러나 그 이후로 당신은 wsdl을 제공 할 수 없습니다.이 상황에서 정확히 문제를 파악하려고 할 수는 없으므로 문제 해결을 위해 "블라인드 디버깅 조언"과 관련하여 도움을 받으려고 노력했습니다. 그러나 이 코멘트를 썼기 때문에, 당신은 당신의 문제에 대한 해결책을 찾지 못했을 것입니다 ... 공식적인 서드 지원을 시도 했습니까? – GmonC