Python では、Web サービスを簡単に使用できます。
from suds.client import Client
client = Client('http://www.example.org/MyService/wsdl/myservice.wsdl') #create client
result = client.service.myWSMethod("Bubi", 15) #invoke method
print result #print the result returned by the WS method
そんなシンプルな使い方をJavaで実現したいです。
Axis または CXF では、Web サービス クライアント、つまりすべての Web サービス メソッドを再現するパッケージを作成して、通常のメソッドがあるかのように呼び出すことができるようにする必要があります。これをプロキシ クラスと呼びましょう。通常、これらは wsdl2java ツールによって生成されます。
便利で使いやすい。しかし、Web サービス メソッドを追加/変更し、それをクライアント プログラムで使用したいときはいつでも、プロキシ クラスを再生成する必要があります。
CXFDynamicClientFactory
を見つけたので、この手法はプロキシクラスの使用を回避します:
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
//...
//create client
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient("http://www.example.org/MyService/wsdl/myservice.wsdl");
//invoke method
Object[] res = client.invoke("myWSMethod", "Bubi");
//print the result
System.out.println("Response:\n" + res[0]);
ただし、残念ながら、プロキシ クラスのランタイムを作成してコンパイルするため、本番マシンに JDK が必要です。私はこれを避けなければなりません、または少なくとも私はそれに頼ることができません。
私の質問:
実行時にJDKを使用せず、「静的」プロキシクラスを生成せずに、JavaでWebサービスのメソッドを動的に呼び出す別の方法はありますか? 多分別のライブラリで?ありがとう!