2

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

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

私の問題は、警告がスローされ、使用しようとしている一部のWebサービスのメソッドが作成されないことです。

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

それでも、Webサービスの所有者は(これはいくつかの異なるwsで発生するため)、wsは正常に実行され、実際にsoapUIを使用すると実際に機能すると言います。

私はsoapUI自体が使用するライブラリをざっと見てみましたが、有望に見えます。

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

そして最近、これら2つのライブラリがJavaソーススタブを生成するのか、それとも次のようなメソッドしかないのかわかりません。

Object [] args = ...;
service.inkvoke("updateCustomer", args );

私が欲しいものが次のようなものである場合:

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

だから、誰もがお勧めできる良いwsスタブジェネレータを持っていますか?

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

4

6 に答える 6

3

「Axis」について言及するときは、細心の注意を払ってください。ApacheAxis 1は、デッドロックとCPUスピン(どちらも経験した)につながるスレッドセーフのバグにより、2006年の初めに放棄されました。使用したことを深く後悔します。 Apache Axis 2は完全に書き直されたものであり、一見の価値があるかもしれません。ただし、最初にApacheCXFGlassfishMetroを確認することをお勧めします。

更新:デッドロック100%CPUスピンに関するバグレポートは次のとおりです。これは、3年前にCyrille Le Clercが提案したパッチであり、コミットされたことはありません。

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

于 2009-06-18T02:50:28.213 に答える
2

現在何を使用していますか?AntタスクとしてAxisWsdl2Javaを使用しています。必要なタイプのスタブを生成します。ビルドを実行するためのクラスパスを設定することは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>
于 2009-06-18T02:03:14.207 に答える
2

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

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

于 2009-06-18T04:23:34.440 に答える
1

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

于 2009-06-18T01:53:54.273 に答える
1

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

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

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

于 2009-06-18T14:40:39.720 に答える
0

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

于 2009-06-18T01:54:51.417 に答える