2013-03-04 12 views
5

私はApache CXFを使ってクライアントスタブを生成する方法を知っています。しかし、生成されたクラスを実行しようとすると、JAXWSが使用されます。また、生成されたクラスのインポートクラスはjavaxパッケージからのものであることに気付きました。生成されたクラスをJAXWSライブラリの代わりにApache CXFライブラリを使用するように設定するにはどうすればよいですか?以下はApache CXFをクライアントとして使用するには?

は、私がクライアントスタブを生成するために使用するコードです:

wsdl2java -frontend jaxws21 -wsdlLocation "META-INF/wsdl/WSCustom.wsdl" -client -d C:\Workspace\WSClient\META-INF\wsdl\ "C:\Workspace\WSClient\META-INF\wsdl\WSCustom.wsdl" 

答えて

4

スタブが正しいCXFは、必要なすべての情報を用いて表すことができるので、それらのいずれかのCXF特有の輸入品があってはなりませんJAX-WS標準アノテーション。実行時に、クラスパス上にある場合はCXFクライアントライブラリが使用され、CXFが使用できない場合はJDKに組み込まれているRIライブラリが使用されます。生成されたスタブはどちらかで動作します。

クライアントを実行している場合はどのくらいのCXF JARが必要かについてのコメントに、私が知っている限り、ちょうどcxf-rt-frontend-jaxwscxf-rt-transports-httpに推移的な依存関係があります。あなたのプロジェクトがMavenのように構築されていればApache Ivy main JARをダウンロードして、これが推移依存関係を解決し、Mavenのから関連JARファイルをダウンロードする必要があり

java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-frontend-jaxws 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar" 
java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-transports-http 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar" 

を実行し、その後、単にこれら二つの依存関係を宣言し、他のすべてが自動的に入って来なければならない、そうでない場合は現在のディレクトリの中心。

+0

こんにちは、@イアン。お返事をありがとうございます。 CXFとビルドインJDKの両方がクラスパス上で使用可能な場合、どちらが優先されますか?また、クラスパスに配置しないでアプリケーションのlibフォルダにだけインクルードする方法はありますか?すでにCXFライブラリを使用している場合、どうすれば確認できますか? – Arci

+1

@Arci私が "クラスパス上で"と言うとき、必ずしも環境変数を設定しなければならないわけではありません、私はちょうどあなたが必要とする方法でアプリケーションに利用できることを意味します(WEB-INF/lib、アプリケーション、コマンドラインアプリケーションの場合は 'java -cp'など)。最初に見つかったものが使用されます - CXFとMetro jarの両方がクラスパス上にある場合は、CXFがアプリケーションに含まれていて、その組み込みのコピーに頼っている場合は、最初にリストされます。 rt.jarのメトロでCXFが勝つはずです。 –

+1

特定の時点でどのファイルが使用されているかを確認するには、[ログレベル](http://cxf.apache.org/docs/debugging-and-logging.html#DebuggingandLogging-Configurelogginglevels)を参照してください。(CXF docsは、インターセプタについての一番上のビットを無視します。これは、送信および受信された生のSOAPメッセージを記録する場合のみです)。 –