2011-04-02 20 views
4

私は仕事のためにWebサービスにアクセスするためのクライアントを作成しようとしています。私はSUDSとZSIをPythonで使ってクライアントを書いています。 NetBeans 6.9を使用して、いくつかのJavaクライアントの作成を支援しました。成功したクライアントは、私がインターネット上で見つけた無料のWebサービスにすべてアクセスしています。Webサービスへのアクセス

仕事のために私が接続する必要があるクライアントは、とても親切であることが証明されていません。私は私が見るこのWebサービスのWSDL記述をつかむ6つのメソッドがある場合は

http://www.cmicdataservices.com/datacenter/service.asmx

:それは認証を必要としません。

Methods (6): 
    CheckIfAuthorized() 
    DataProcessed() 
    GetCurrentDataVer1() 
    GetID() 
    LogDSCStatus(xs:string _clientname, xs:string _status, xs:string _errormsg) 
    ResetNewDataReferences() 

返されるタイプは70種類あります。それらの1つは認証タイプです。

私のPythonとJavaクライアントでは、これらの認証オブジェクトを作成できましたが、これ以上何もできませんでした。

WSDLからは、これらの認証オブジェクトを利用できるもので作成する方法がないことは私にはわかりません。 Webサービスのサプライヤは、Adobe Airを使用して構築されたクライアントを提供しており、Webサービスを認証してそれを消費できることを保証するために、それをテストすることができます。

私はWebサービスとのインターフェイスが初めてで、ここに不足しているものがあるかどうかはわかりません。このサービスで認証する方法について私がここで紛失していることが明らかであるかどうか誰にでも教えてください。

ここに私が書いたPythonクライアントとそれが出力されます。印刷クライアントの行のコメントを外すと、WSDL情報の素晴らしい出力を見ることができます。

#!/usr/bin/python 

from suds.client import Client 

url='http://www.cmicdataservices.com/datacenter/service.asmx?wsdl' 
client = Client(url) 


#print client 
print client.service.CheckIfAuthorized() 

出力:

Traceback (most recent call last): 
    File "CMICTest.py", line 23, in <module> 
    print client.service.CheckIfAuthorized() 
    File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg /suds/client.py",  line 542, in __call__ 
return client.invoke(args, kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 602, in invoke 
    result = self.send(soapenv) 
    File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 649, in send 
    result = self.failed(binding, e) 
    File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/client.py", line 702, in failed 
    r, p = binding.get_fault(reply) 
File "/usr/local/lib/python2.6/dist-packages/suds-0.4-py2.6.egg/suds/bindings /binding.py", line 265, in get_fault 
raise WebFault(p, faultroot) 
suds.WebFault: Server raised fault: 'Server was unable to process request. ---> Object reference not set to an instance of an object.' 

答えて

0

は作業Adobe AIRのクライアントのための完全な要求と応答をキャプチャするのwireshark(または単にデバッグ)を使用してみてください。次に、生成したクライアントの要求/応答を取得します。 2つの要求を比較し、どのオブジェクトを作成してクライアントに追加していないかを判断します。

+0

私が遣わす要求があり、実際の認証PARAMATERSなどが欠落しています。リクエストに必要なヘッダ要素を追加泡で作成したサンプルSOAPクライアントが含まれているあなたの他の質問に私の答えを見てみましょうこれらを生成する方法はありません。私はXMLリクエストを手作業で書くことを避けようとしており、単純なhttpリクエストを送信しています。 – grantk

+0

この例を検討してみてください。 http://svn.fedorahosted.org/svn/suds/trunk/tests/rhq.pyこの例でオブジェクトを作成し、それをpersonオブジェクトに配置してから、その人とのサービスを呼び出す方法に注目してください。 – sankyo

+0

もう一度、私は人のオブジェクトがどのように使われているかを見ています。私は私のサービスにもリストされているオブジェクトを作成することができます。問題は、サーバー側でこれらのオブジェクトを作成する実際の方法や、引数として受け入れるメソッドがないことです。私は手作業でリクエストを作成して送信しましたが、今では応答を受け取ることができました(私はJavaを使用しました) – grantk

0

WSDLに従って必要とされるCheckIfAuthorized呼び出しの認証ヘッダーがコードで生成されないという問題があります。

soap ui generated code

関連する問題