Axis2 Webサービスクライアントの生成-クライアントを変更しないタイプ
-
03-07-2019 - |
質問
Axis2とEclipseを使用してWebサービスクライアントを生成し、独自のタイプを作成するのではなく、パッケージにすでにあるJavaタイプを使用することができます。もちろん、タイプAがすでに作成されていて、それが独自のタイプAを作成している場合、タイプAの変数をタイプBの変数に割り当てることはできません。
wsdlは、アプリケーションサーバーにデプロイされたWebサービスから生成されています。 それから生成できない場合は、既存のJavaファイルからクライアントを生成できます。
解決
既存のクラスを本当に再利用したい場合は、wsdl2javaを使用してクライアントを生成せずにAxis2 APIを直接呼び出すことができます。以下は、Webサービスを呼び出す比較的単純なコードです。 Webサービスエンドポイント、メソッドQName、期待される戻りクラス、およびサービスへの引数を入力するだけです。既存のクラスを戻り値または引数として再利用できます。
Webサービスが非常に複雑な場合、このアプローチを機能させるにはAPIをさらに深く調べなければならないことに気付くかもしれません。
serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference("http://myservice");
options.setTo(targetEPR);
QName methodName = new QName("ns","methodName");
Class<?>[] returnTypes = new Class[] { String.class };
Object[] args = new Object[] { "parameter" };
Object[] response = serviceClient.invokeBlocking(methodName, args,
returnTypes);
他のヒント
wsdlからWebサービスクライアントを生成していますか?
wsdl2javaツールが知っているのはwsdl内の情報のみであるため、既に作成したタイプについては知りません。
タイプ情報をwsdlに取得できる場合、動作する可能性がありますが、試したことはありません。
タイプAからタイプBにコピーする簡単な方法が必要な場合は、 BeanUtils.copyProperties 、タイプAとタイプBのセッターとゲッターが一致する限り。
ほとんどのjava webservicesプロジェクトはこれを通過します。 .NET / C#の世界にもっとエレガントなソリューションがあるかどうかはわかりません。
Mikeが述べたように、BeanUtils.copyPropertiesを使用することは理にかなっています。
BR、
〜A
EclipseをIDEとして使用する場合、必要なのは http://www.eclipseです。 org / webtools / 。まさにあなたが望むものを他のことを超えて行います。
ServiceClientクラスを直接使用してWebサービスを呼び出すことができます。Webサービスは、XMLのみを使用して呼び出しを提供し、XML応答を返します。 Webサービスのさまざまなメソッドについては、XML応答をJava POJOに変換して使用する必要があります。応答処理のみを最後に行う必要があります。 XMLからMapなどにあなたができること...
したがって、Webサービスを呼び出すために他のスタブクラスは必要なく、応答XMLを処理するだけで済みます。 CastorまたはJAXBライブラリを使用してXMLをPOJOに変換できます。
これは、diffのたびにクライアントを変更する必要がない方法です。ウェブサービス。外部でクライアントに応答ハンドラーを提供するように開発できます。そのため、異なるWebサービスごとにdiffがあります。インターフェースの実装である応答ハンドラクラス。
//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
public Object getMeResp(Object respData);
}
//pass particular handler to client when you call some WS
public class WebServiceClient {
public Object getResp(WSRespHandler respHandler) {
..
return repHandler.getMeResp(xmlData);
}
}
参照:
http:// www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/
ありがとう。
www.techlads.com
この投稿がまだ役に立つ場合は、axis2生成クライアントガイドを読んでください: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html 。
Axis2 Eclipseプラグインは、統合モードでADBコード生成を呼び出すように構成されているようです( http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html )、Webサービススタブに内部クラスを作成します。生成モードを拡張モードに変更(スタブクラスからデータクラスを生成)することが可能かどうかはわかりませんが、Wsdl2Javaを使用してコマンドラインで実行できます:
%AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u
-uオプションは、ADBコードジェネレーターに、スタブ内の内部クラスではなく、個別のクラスとしてデータクラスを作成するように指示します。