質問

Java webservicesスタブをクライアントとして生成するための優れたライブラリを誰かが推奨できるかどうか知りたいのですが。

現在、WSDLのみを必要とし、必要なクラスとメソッドを作成するジェネレーターを組み込んだ製品を使用しています。

私の問題は、警告をスローし、使用しようとしているいくつかのWebサービスのメソッドを作成しないことです。

実際の問題は、問題が何であるかを説明していない(したがって、Webサービスの所有者と一緒に行って変更することができる)か、出力を変更して、問題を自分で修正できるようにすることです。

まだ、Webサービスの所有者(これはいくつかの異なるWSで発生するため)は、WSが正常に実行され、実際に soapUI は実際に動作します!!!

soapUI itで使用されるライブラリを簡単に調べたところ、将来性がありそうです。

作業を行うべき Axis があることは知っていますが、懸念は失敗したジェネレーターがそのライブラリーを既に使用していること(これにより、再び失敗することになります)

そして最近、これら2つのライブラリがJavaソーススタブを生成するのか、それとも

のようなメソッドしか持たないのかわかりません
Object [] args = ...;
service.inkvoke("updateCustomer", args );

私が持ちたいものが次のような場合:

CustomerWs cws = ....
cws.updateCustomer(custId, custName, custAddress /*etc*/ );

では、だれかが推奨できる GOOD WSスタブジェネレータを持っていますか?

自分でハンドコーディングしようとしていますが、間違いなく受け入れられるまでに数日かかります

役に立ちましたか?

解決

現在何を使用していますか? Axis Wsdl2JavaをAntタスクとして使用します。必要な種類のスタブを生成します。ビルドは正常に動作しますが、ビルドを実行するためのクラスパスのセットアップは、Eclipseで少し苦痛でした(追跡してインクルードするのに必要ないくつかのjarファイルがありました)。私のantビルドファイルでは次のようになります:

<taskdef name="axis-wsdl2java" classname="org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask" />
<target name="foo">
<axis-wsdl2java
              output="${build.dir}"
              testcase="false"
              verbose="true"
              typemappingversion="1.2"
              url="http://ws.domain.com/url/of/WebService?wsdl" />
<!-- Compile, etc... -->
</target>

他のヒント

&quot; Axis&quot;を参照するときは、十分に注意してください: Apache Axis 1 は放棄されましたデッドロックとCPUスピンにつながるスレッドセーフティバグが2006年初めに発生しました(どちらも経験しました)。あなたはそれを深く後悔するでしょう。 Apache Axis 2 は完全に書き直されており、一見の価値があります。しかし、まず Apache CXF および Glassfish Metro

更新:以下は、デッドロックおよび 100%CPUスピン。 3年前のCyrille Le Clercの提案されたパッチは、コミットされていません。

クライアントをストレートJavaで再コーディングすることにより、デッドロックとスピンを排除しました。そして、Axisサーバーは私たちとの会話を拒否し、HTTP 500エラーを送り返しました。適切な応答を得るには、Axisクライアントであると誤って主張する必要がありました。 SOAPの相互運用性は、Axis 1チームの優先事項ではありませんでした。

Apache CXFが好きです-プラグインを介してMavenとうまく統合され、動作します。私はしばらくの間、クライアントスタブコードの生成に使用していましたが、最後の会社では、WSのサーバー部分にも使用していました。

CXF + Maven + Subversionで作業した最後のプロジェクトでは、生成されたクラスをSubversionに含めず、WSDLファイルのコピーのみを含めました。スタブクラスは&quot; generate&quot;で生成されました。 Mavenの目標。

Apache Axis 2を使用する方法です。ただし、正しく動作させるには少し遊んでみる必要があるかもしれません。これはおそらく最も一般的な方法です。おそらく、使用しているツールはAxis 1に基づいていますか?

標準ベースのAPIに基づいたものを使用することをお勧めします。つまり、JAX-WS APIを意味します。 JBossにも実装がありますが、Apache CXFとMetroは2つの主要なJAX-WS実装です。 Axis2には認証されていない実装がありますが、コード生成はサポートされていません。

標準ベースのAPIを使用する最も良い点は、製品で問題が発生した場合、もう1つ試してみることです。私が見た多くの場合、他の製品も動作しませんが、それが実際に私たちのコードまたはwsdlの問題であるという事実を診断するのに役立つ別のエラーメッセージなどを吐き出します。

また、JAX-WSはJava6に直接組み込まれています。 Java6での実行を計画している場合は、Java6を使用でき、余分なjarなどを処理する必要はありません。

metroの一部としての最新のJAX-WS( http://metro.dev.java.net )は非常に優れた抽象化レイヤーです。少し調整が必要ですが、他のいくつかのオプションよりもずっと直感的でした。

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