Webサービスを含むMavenプロジェクトであるOSGiバンドルを構築しようとしています。@WebService
使用しているWebサービスを指定するために、すべてのアノテーションを含むJAX-WSを使用しています。これらのWebサービスを通常使用しているクライアントの場所にロードし、wsgen
WSDLwsimport
ファイルをエクスポート/インポートします。jaxws-maven-pluginを使用してこれを行う予定ですが、ここに問題があります。
バンドルは、サーバーとクライアントとして同時に機能できます。同じバンドルの親ノード(別のJVM /ホストで実行)にクライアントとして登録できます。したがって、このMavenプロジェクト/バンドルは、Webサービスのインターフェースを定義し、このインターフェースを実装する実装クラスを定義します。インターフェイスとクラスの両方@WebService
が通常どおりアノテーションを使用します。
@WebService
public interface Example {
public void callMe();
}
@WebService
public class ExampleImpl implements Example {
public void callMe() {};
}
そして、私のコードのどこかに:
Endpoint p = Endpoint.publish(
"http://localhost:8080/example",
new ExampleImpl());
jaxws :wsgenゴールは注釈を読み取り、出力ファイル(.classファイル、.javaファイル、WSDLファイル、構成に応じて...)を作成します。しかし、同じ実行のjaxws:wsimportゴール中にこれらのファイルを使用するにはどうすればよいですか?mvn package
同じMavenプロジェクトで、このWebサービスを使用したいので、次のように記述する必要があります。
ExampleImplService service = new ExampleImplService();
Example port = service.getExampleImplPort();
port.callMe();
jaxws:gen
目標は、process-classes
コンパイルされたクラスを読み取る必要があるため、フェーズで実行されますが、コンパイルのためにすべてを準備するjaxws:import
には、フェーズで実行する必要があります。generate-sources
そして今、私は鶏が先か卵が先かという問題に直面しています。を介して出力ファイルを生成するには、コンパイルされたクラスが必要ですが、Mavenのフェーズでのforwsgen
の出力ファイルが必要です。私の最初の試みは、目標をフェーズにも割り当てることでしたが、クラスが欠落しているか、まだコンパイルされていないため、もちろん機能しません。wsgen
wsimport
generate-sources
jaxws:wsgen
generate-sources
この問題を解決するための私のオプションは何ですか?フェーズの前にいくつかのクラス(つまり、アノテーション付きのクラスのみ)antrun
をコンパイルして、それを(そのフェーズで)使用できるようにするという目標を実行し、フェーズで使用される出力ファイルを作成する必要がありますか?この鶏が先か卵が先かという問題を解決する他の方法はありますか?同じMavenプロジェクトでWebサービスのサーバーとクライアントの部分をコンパイルするための他の「Mavenの方法」はありますか?ところで、それはすべきです。クリーンビルドから実行するので、「 2回実行して最初にWebサービスファイルを生成し、次に他のすべてをコンパイルする」などのソリューションは必要ありません。言い換えると、mavenプロジェクト/osgiバンドル全体をコンパイルする必要があります。@WebService
generate-sources
jaxws:wsgen
jaxws:wsimport
generate-sources
mvn clean
mvn package
mvn clean package