2011-01-07 10 views
1

Versuchen, einen SOAP-Aufruf mit Python Suds zu machen. Es importiert die WSDL-Strafe, und der Client, den es erzeugt, sieht gut aus, aber ich kann nicht auf die Methoden zugreifen.Aufrufen von SOAP-Methoden mit Punkten im Namen mit Python/Suds

Die Suds documentation beschreibt die Methode wie folgt bezeichnet:

client.service.Company.GetQueue()

Aber alles, was ich mit jeder Variation dieses erhalten ist:

suds.MethodNotFound: Methode nicht gefunden: 'OmnitureWebService.OmnitureWebServicePort.Company'

Hier ist die Variable Dump des Clients, den ich erstellt habe. Sie können sehen, dass die Methoden vorhanden sind, aber wie kann ich darauf zugreifen? Ich habe versucht, den Port zu spezifizieren, Präfixe zu spezifizieren, nichts scheint zu arbeiten. Danke für jede Hilfe mit diesem.

> obj._ServiceSelector__client = Suds (
> https://fedorahosted.org/suds/) 
> version: 0.4 GA build: R699-20100913 
> 
> Service (OmnitureWebService) 
> tns="http://www.omniture.com/" 
> Prefixes (2) 
>  ns0 = "http://schemas.xmlsoap.org/soap/encoding/" 
>  ns1 = "http://www.omniture.com/" Ports (1): 
>  (OmnitureWebServicePort) 
>   Methods (173): 
>    CodeManager.DeleteCodeArchive(xs:int 
> archive_id,) 
>    CodeManager.GenerateCode(xs:string 
> char_set, xs:string code_type, xs:int 
> cookie_domain_periods, xs:string 
> currency_code, xs:string rsid, xs:int 
> secure,) 
>    CodeManager.GetCodeArchives(int_array 
> archive_id_list, xs:string 
> binary_encoding, xs:int 
> populate_code_items,) 
>    CodeManager.SaveCodeArchive(xs:string 
> archive_description, xs:int 
> archive_id, xs:string archive_name, 
> code_items code,) 
>    Company.CancelQueueItem(xs:int qid,) 
>    Company.DownloadProduct(productType 
> productType,) 
>    Company.GetEndpoint(xs:string company, 
>) 
>    Company.GetQueue() 
>    Company.GetReportSuites(string_array 
> rs_types, xs:string sp,) 
>    Company.GetTokenCount() 
>    Company.GetTokenUsage() 
>    Company.GetTrackingServer(xs:string 
> rsid,) 
>    Company.ResetTokenCount(xs:string 
> auth_key,) 

Antwort

0

Aha. Es sieht so aus als ob das "." im Namespace, der in XML korrekt ist, aber Probleme mit Suds hat. Ich hatte versucht zu entfernen, aber Suds speichert auch die WSDL. Hier ist, wie zu entkommen:

https://fedorahosted.org/suds/wiki/TipsAndTricks

Und weiter unten auf der Seite ist, wie das Caching auszuschalten.

4

kfed ist richtig, es sind die Punkte, die es tun. aber ich möchte meine WSDL nicht ändern.

Allerdings habe ich diese Abhilfe gefunden:
Verwenden getattr den Namen der Methode mit einem String, erhalten einen Griff auf das Verfahren zu verweisen, dann rufen:

Company_GetTokenCount = getattr(client.service, 'Company.GetTokenCount') 
Company_GetTokenCount() 

https://fedorahosted.org/suds/ticket/253
Me: Suds Version 0.4 GA bauen: R699-20100913

+0

wowowow. Ich habe das seit Tagen versucht. netter Fund und danke für den Beitrag – JiminyCricket

+0

@JiminyCricket Danke. Ich hoffe, dass kfed das als Antwort akzeptiert. Ich bin mir nicht sicher, ob es einen besseren Weg gibt, dies zu tun, ohne die WSDL zu bearbeiten. – FlipMcF

Verwandte Themen