2010-09-21 19 views
2

Type introuvable: '(ArrayOfint, http://schemas.microsoft.com/2003/10/Serialization/Arrays,)' est ce que le résolveur de mousse augmente. In ... 2003/10/Sérialisation/Arrays ArrayOfInt est défini, donc je suppose que la sensibilité à la casse de Linux est le problème. Une idée comment je peux contourner cela?Problème L'accès au service WSDL avec python suds déclenche TypeNotFound: ArrayOfint

from suds.client import Client 
c = Client("https://developer-api.affili.net/V2.0/Logon.svc?wsdl") 

utilisé pour retourner

Type not found: '(ArrayOfint, http://schemas.microsoft.com/2003/10/Serialization/Arrays,)' 

maintenant depuis quelques jours, je n'y arrivent même pas plus mais je reçois un

TypeNotFound: Type not found: '(Logon, http://affilinet.framework.webservices/types,)' 
+0

Un exemple de code reproduisant le problème peut être utile. –

Répondre

6

On dirait que vous avez un WSDL cassé. C'est ici que vous devrez utiliser le ImportDoctor fourni par SUDS. Vous devez l'utiliser pour aider le constructeur Client à utiliser le type ArrayOfint trouvé à http://schemas.microsoft.com/2003/10/Serialization/Arrays.

Je l'ai fait dans le passé avec d'autres services, mais sans voir votre WSDL ou votre code, ce n'est que ma meilleure estimation que la façon dont vous pouvez le corriger parce que je ne peux pas tester moi-même:

from suds.client import Client 
from suds.xsd.doctor import Import, ImportDoctor 

# Obviously I made this up  
wsdl_url = 'http://whatever/path/to/wsdl' 

# Fix missing types with ImportDoctor 
schema_url = 'http://schemas.microsoft.com/2003/10/Serialization/Arrays' 
schema_import = Import(schema_url) 
schema_doctor = ImportDoctor(schema_import) 

# Pass doctor to Client 
client = Client(url=wsdl_url, doctor=schema_doctor) 

Une chose à noter est que l'URL http://schemas.microsoft.com/2003/10/Serialization/Arrays n'est même pas valide (elle renvoie un 404), donc je ne suis vraiment pas sûr que ce soit la bonne URL. Bien que je sois confiant, je vous dirige au moins dans la bonne direction.

Modifier en réponse à votre commentaire récent (2010-10-05):

En utilisant l'URL que vous avez fourni des https://developer-api.affili.net/V2.0/Logon.svc?wsdl j'ai pu créer avec succès un client. Je devais utiliser un ImportDoctor parce qu'il a soulevé l'erreur suivante:

TypeNotFound: Type not found: '(Logon, http://affilinet.framework.webservices/types,)' 

J'utilisé le code suivant et a été en mesure d'obtenir un objet client réussie:

from suds.client import Client 
from suds.xsd.doctor import Import, ImportDoctor 

wsdl_url = 'https://developer-api.affili.net/V2.0/Logon.svc?wsdl' 

schema_url = 'http://affilinet.framework.webservices/types' 
schema_import = Import(schema_url) 
schema_doctor = ImportDoctor(schema_import) 

client = Client(url=wsdl_url, doctor=schema_doctor) 

impression de l'objet client affiche ceci:

Suds (https://fedorahosted.org/suds/) Version: 0.3.9 build GA: R659-20100219

Service (Authentication) tns="http://affilinet.framework.webservices/Svc" 
    Prefixes (5) 
     ns0 = "http://affilinet.framework.webservices/types" 
     ns1 = "http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF" 
     ns2 = "http://schemas.microsoft.com/2003/10/Serialization/" 
     ns3 = "http://schemas.microsoft.com/2003/10/Serialization/Arrays" 
     ns4 = "http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" 
    Ports (1): 
     (DefaultEndpointLogon) 
     Methods (2): 
      GetIdentifierExpiration(xs:string CredentialToken,) 
      Logon(xs:string Username, xs:string Password, ns0:WebServiceTypes WebServiceType, ns0:TokenDeveloperDetails DeveloperSettings, ns0:TokenApplicationDetails ApplicationSettings,) 
     Types (12): 
      ns3:ArrayOfKeyValueOfstringstring 
      ns1:ArrayOfValidationDetail 
      ns0:Logon 
      ns0:TokenApplicationDetails 
      ns0:TokenDeveloperDetails 
      ns1:ValidationDetail 
      ns4:ValidationFault 
      ns0:WebServiceTypes 
      ns0:affilinetWebserviceFault 
      ns2:char 
      ns2:duration 
      ns2:guid 

Avant de pouvoir utiliser client.service.Logon(), vous devrez satisfaire à la signature de type requise par cette méthode. Vous devrez créer divers objets de type en utilisant client.factory.create() (par exemple client.factory.create('ns0:WebServiceTypes')) et transmettre ces objets avec votre nom d'utilisateur/mot de passe.

+0

wsdl_url = "https://developer-api.affili.net/V2.0/Logon.svc?wsdl » je reçois: ERREUR: Une erreur inattendue est survenue lors de l'entrée tokenizing Le retraçage suivant peut être corrompu ou invalide Le message d'erreur est le suivant: (EOF dans l'instruction sur plusieurs lignes», (9, 0)) eRREUR: Une erreur inattendue est survenue lors de l'entrée tokenizing Le retraçage suivant peut être corrompu ou invalide Le message d'erreur est le suivant: (EOF dans l'état multi-ligne ', (119, 0)) eRREUR: Une erreur inattendue est survenue lors de entrée de segmentation La trace suivante peut être endommagée ou non valide Le message d'erreur est: ('EOF dans l'instruction multiligne', (141, 0)) – dirkbo