2010-12-10 26 views
3

TDDでSOAP Webサービスを開発したいと考えています。 WebサービスはApache CXF上に構築され、基本認証で保護されています。私の考えは、プロキシの作成プロセスを避けるために、動的クライアントの助けを借りて単体テストを設定することです。 [OK]を、それは有望に見えるApache CXFを使用して基本認証を使用して動的Webサービスクライアントを作成する方法は?

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); 
Client client = dcf.createClient("http://localhost:8080/OrderProcess?wsdl"); 
Object order = Thread.currentThread().getContextClassLoader() 
    .loadClass("demo.order.Order").newInstance(); 
Method m1 = order.getClass().getMethod("setCustomerID", String.class); 
m1.invoke(order, "C001"); 
Object[] response = client.invoke("processOrder", order); 

ドキュメントは、動的クライアント1を作成する方法を示しています。しかし、どのように私は基本認証のユーザー名とパスワードを指定できますか? WSDLとサービス自体は基本認証で保護されています。

さようなら、
オラフ

答えて

2

私は、Apache CXFのソースコードを見てきました。私は現在のバージョンのCXF(2.3.1)は基本認証で保護されているURLからWSDLを取得できないと思います。

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); 
Client client = dcf.createClient(
    "http://localhost:8080/ws-auth/EchoService?wsdl"); 

は、残念ながら、あなたは見返りにServiceConstructionExceptionを取得します:通常はこの方法でダイナミッククライアントを作成

org.apache.cxf.service.factory.ServiceConstructionException: 
Could not resolve URL "http://localhost:8080/ws-auth/EchoService?wsdl". 
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.composeUrl(DynamicClientFactory.java:6) 
... 

私は、基本認証の資格情報を設定するための任意の場所を見つけることができませんでした。回避策として、2番目のツール(多分httpclient)の助けを借りてWSDLをダウンロードし、それを一時的なフォルダに格納することができます。 CXFはこのファイルを消費する可能性があり、クライアントの作成とともに1つになります。私はこの方法を試みたが、私は運がなかった。もう一つの例外が浮かび上がった。私は動的に作成されたクライアントに資格証明を引き渡す方法を見つけることができなかったので、これは驚きではありませんでした。 Apache CXFのドキュメントは、より広範囲に及ぶ可能性があります。

私はもうApache CXFがこのタスクの最適なオプションかどうかはわかりません。 SOAP Webサービスのテストを容易にサポートするツールやフレームワークを誰かが知っていますか?前述のとおり、WSDLを解析することによってサービスプロキシを動的に作成する必要があります。たぶん、Javaの世界の外で働いている解決策があります。 RubyやPythonの人たちはどのようにこの問題に対処していますか?おそらく私は単体テストでJRubyやJythonを使ってアプローチをとることができます。

関連する問題