2011-01-07 8 views
1

Python Sudsを使用してSOAP呼び出しを作成しようとしています。 WSDLを正常にインポートすると、生成されたクライアントは整形式に見えますが、メソッドにアクセスすることはできません。Python/Sudsを使用して名前にドットを含むSOAPメソッドを呼び出す

Suds documentationは、方法は次のように呼び出しを説明します。

client.service.Company.GetQueue()

しかし、私はこれのすべてのバリエーションを得るすべては次のとおりです。

suds.MethodNotFound:メソッドなし が見つかりました: 'OmnitureWebService.OmnitureWebServicePort.Company'

私が作成したクライアントの変数ダンプです。そこにメソッドがあるのがわかりますが、どうすればアクセスできますか?プレフィックスを指定してポートを指定しようとしましたが、何も動作していないようです。これに助けてくれてありがとう。

> 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,) 

答えて

0

アハ。まるで "。"ネームスペースでは、XMLでは適切ですが、Sudsには問題があります。私は削除しようとしましたが、SudsはWSDLもキャッシュします。ここで脱出する方法は次のとおりです。

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

とページの下に下には、キャッシュをオフにする方法です。

4

kfedが正しいです、それはそれを行うドットです。私はWSDLを変更したくありません。

しかし、私はこの回避策が見つかりました:メソッドへのハンドルを取得し、文字列でメソッド名を参照する
使用GETATTRを、それを呼び出す:

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

https://fedorahosted.org/suds/ticket/253
ミー:泡バージョン0.4 GAビルド:R699-20100913

+0

wowowow。私はこれを数日間やろうとしています。投稿していただきありがとうございます。 – JiminyCricket

+0

@JiminyCricketありがとうございます。私はkfedがこれを答えとして受け入れることを望んでいます。私は、WSDLを編集せずにそれを行うより良い方法があるかどうかはわかりません。 – FlipMcF

関連する問題