2009-08-25 13 views
10

Ho il seguente script di test semplice che utilizza python Suds per chiamare un servizio SOAP Web (il servizio è scritto in ASP.net):Python/Suds: Non tipo trovato: 'xs: complexType'

from suds.client import Client 

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

client = Client(url) 

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

print result 

Quando eseguo questo script di test sto ottenendo il seguente errore (codice di markup utilizzato in quanto non va a capo):

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' 

Guardando alla fonte per l'intestazione del file WSDL (riformattato per misura):

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

sto indovinando sulla base dell'ultima riga di output:

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

che ho bisogno di usare Sud di doctor class per fissare lo schema ma essendo un principiante SOAP non so cosa esattamente le esigenze fissate nel mio caso. Qualcuno qui ha esperienza usando Suds per correggere/correggere lo schema?

+1

Ho appena provato una semplice applicazione di test C# e può connettersi a questo servizio (ma il servizio è basato su ASP.net). Potrebbe essere qualcosa di specifico di Microsoft che Suds non supporta di default? – Danielb

+0

Sembra che il servizio stia tentando di restituire un DataSet. Sto vedendo quanto segue nella logger: ATTENZIONE: suds.bindings.unmarshaller: attributo (IsDataSet) tipo, non-trovato AVVERTENZA: suds.bindings.unmarshaller: attributo (nome) tipo, non ritrovata ERRORE: schiuma .bindings.unmarshaller: Schema: 0x7fce048c – Danielb

+0

Mi sembra che SUDS non stia importando da un tag che specifica la struttura del set di dati. Hai cercato il tuo WSDL per le importazioni? Se questa è la risposta, l'ImportDoctor di SUDS dovrebbe essere in grado di aiutare. Esempi su https://fedorahosted.org/suds/wiki/Documentation#FIXINGBROKENSCHEMAs – ewall

risposta

15

La risorsa di Ewall è buona. Se provi a cercare nei ticket di suds trac, potresti vedere che altre persone hanno problemi similar to yours, ma con diversi tipi di oggetti. Può essere un buon modo per imparare dai suoi esempi e come importano i loro spazi dei nomi.

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:

(tutti enfasi fosse mio).

È possibile provare le linee fornite da queste documentazioni aggiungendo gli spazi dei nomi presentati nel proprio WSDL. Questo può essere un errore di tentativi ed errori.

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) 

Non hai fornito il WSDL si sta lavorando, mi si supponga di avere motivi per non mostrare a noi ... così io penso che si debba provare queste possibilità da soli. In bocca al lupo!

+0

Non riesco a accettarlo come risposta per qualche motivo :( – Danielb

+0

So che non risolve il problema interamente ... ma dal non puoi fornire la tua wsdl, non posso provare a capire esattamente il problema in questa situazione, quindi ho cercato di aiutarti con qualche generico "consiglio di debug alla cieca" per vedere se potresti avanzare da solo nel problema. da quando hai scritto questo commento, suppongo tu non abbia trovato una soluzione al tuo problema ... hai provato il supporto ufficiale di Suds? – GmonC