2009-08-25 17 views
10

Mam następujący skrypt testowy proste Pythona, który używa Suds wywołać usługę SOAP Web (usługa jest napisane w ASP.NET):Python/Mydliny: nie Rodzaj znaleziono: 'xs: complexType'

from suds.client import Client 

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

client = Client(url) 

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

print result 

Kiedy uruchomić ten skrypt testowy otrzymuję następujący błąd (kod stosowany markup gdyż nie zawijać):

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' 

Patrząc na źródło nagłówka pliku WSDL za (przekształconego w celu dopasowania):

<?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/"> 

jestem zgadywać na podstawie ostatniego wiersza wyjścia:

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

że muszę użyć Sud doctor class naprawić schematu ale będąc nowicjuszem SOAP nie wiem co dokładnie potrzeby ustalone w moim przypadku. Czy ktoś tutaj ma jakiekolwiek doświadczenie z użyciem Suds do naprawienia/poprawienia schematu?

+1

Po prostu wypróbowałem prostą aplikację testową w języku C#, która może połączyć się z tą usługą (ale usługa jest oparta na ASP.net). Czy to może być coś specyficznego dla Microsoftu, że Suds nie obsługuje domyślnie? – Danielb

+0

Wygląda na to, że usługa próbuje zwrócić zestaw danych. Widzę następujące w rejestratorze: OSTRZEŻENIE: suds.bindings.unmarshaller: typ atrybutu (IsDataSet), niezaznaczony OSTRZEŻENIE: suds.bindings.unmarshaller: atrybut (nazwa) typ, nie znaleziono BŁĄD: mydliny .bindings.unmarshaller: Schemat: 0x7fce048c – Danielb

+0

Wygląda na to, że SUDS nie importuje ze znacznika , który określa strukturę zestawu danych. Czy szukałeś WSDL na import? Jeśli to jest odpowiedź, wówczas narzędzie ImportDoctor firmy SUDS powinno pomóc. Przykłady na https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs – ewall

Odpowiedz

15

Zasób Ewallera jest dobry. Jeśli spróbujesz wyszukać w biletów suds trac, możesz zauważyć, że inni ludzie mają problemy similar to yours, ale z różnymi typami obiektów. Może to być dobry sposób uczenia się na podstawie przykładów i sposobu importowania ich przestrzeni nazw.

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:

(wszystkie akcenty były moje).

Można wypróbować wiersze, które te dokumentacje zawierają, dodając przestrzenie nazw przedstawione w pliku WSDL. Może to być metoda prób i błędów.

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) 

Nie dostarczyć WSDL pracujesz z, jak sądzę masz powodów, aby nie pokazano nam ... więc myślę, że trzeba spróbować tych możliwości przez siebie. Powodzenia!

+0

Nie mogę przyjąć, że jest to odpowiedź z jakiegoś powodu :( – Danielb

+0

Wiem, że to nie rozwiązuje całkowicie problemu ... ale ponieważ nie możesz podać swojego wsdl, nie mogę spróbować znaleźć dokładnego problemu w tej sytuacji, więc starałem się pomóc ci w ogólnych ogólnych "poradach na temat debugowania", aby sprawdzić, czy możesz samemu dokonać postępu w problemie. skoro napisałeś ten komentarz, przypuszczam, że nie znalazłeś rozwiązania swojego problemu ... czy próbowałeś oficjalnego wsparcia dla Suds? – GmonC