私は現在、Maven の jaxws-maven-plugin を使用して Web サービス クライアントの生成を自動化するプロジェクトに取り組んでいます。現在、Web サービス クライアントは、Web サービス クライアント生成用の IBM RAD 8.0 内部ツールを使用して生成されます。
これは問題なく機能しますが、Web サービスの数が増えると、プロセスが非常に遅くなります。Maven プラグインを取得してクライアント プロジェクトで Java クラスを生成し、それらをローカル サーバーでのローカル開発に使用することはできますが、デプロイしようとすると Web サービスの検証に失敗します。これは、各サーバーでテストが正常に実行されたときに、プロジェクトがテスト サーバー、ステージング サーバー、および運用サーバーをさらに展開する必要があるサーバー インフラストラクチャによるものです。
デプロイ時に、Websphere Portal Server は、生成された Web サービス クライアントを、パッケージで生成されたバインディング Java ファイルで指定された WSDL 定義に対して検証しようとします。Maven プラグインを実行すると、次のバインドが生成されます。
MyProjectHttpService
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("http://localhost:9080/MyProjectWeb/sca/MyProjectExportWS?wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
生成された Web プロジェクトは、まったく同じ EAR ファイルから各サーバーで実行する必要があるため、サーバー間で WSDL ファイルの URL を変更することはできません。
RAD のインポート ツールは、クラスローダーを使用してファイルを取得するバインディング ファイルを生成します。
MyProjectHttpService
static {
URL url = null;
try {
url = com.my.package.portal.MyProjectHttpService.class.getResource("/WEB-INF/wsdl/project/interfaces/MyProjectExport1.wsdl");
if (url == null) throw new MalformedURLException("/WEB-INF/wsdl/project/interfaces/MyProjectExport1.wsdl does not exist in the module.");
} catch (MalformedURLException e) {
...
}
解決策を見つけるために、XSD ファイルと WSDL ファイルをダウンロードしてビルド パッケージに入れる独自の Maven プラグインを作成するところまで行きました。それ以外の 。ただし、バインディング ファイルが絶対パスで生成されるため、これも成功しませんでした。
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL("file:/D:/mavenworkspace/testproject/target/META-INF/wsdl/com/my/package/portal/ws/interfaces/MyProjectExport1.wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
}
問題を解決する方法についてのヘルプは大歓迎です。すべての XSD ファイルと WSDL ファイルを jar 内に格納し、相対的に参照するという結果をどのように達成できるかはあまり気にしません。そのため、Web サーバーが Web サービス クライアントを検証しようとするときに環境は問題になりません。
PS: 残念ながら、異なる環境に複数のプロファイルを使用することもできません。