Axis2 Webサービスクライアントの生成-クライアントを変更しないタイプ

StackOverflow https://stackoverflow.com/questions/205240

質問

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.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on-the-Client-Side.htm

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コードジェネレーターに、スタブ内の内部クラスではなく、個別のクラスとしてデータクラスを作成するように指示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top