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