私はMavenで小規模なマルチモジュールプロジェクトに取り組んでいます。Web サービスを使用して UI をデータベース層から分離しました。jaxws-maven-plugin のおかげで、WSDL と WS クライアントの作成は多かれ少なかれ処理されます。(プラグインは、本質的に wsgen と wsimport のラッパーです。) 今のところ、とても良いです。
問題が発生するのは、WSIT セキュリティを図の中に重ねようとしたときです。NetBeans ではセキュリティ メタデータを簡単に生成できますが、wsimport では基本認証レベルのセキュリティを超えるものを処理することはまったくできないようです。
以下は、Maven ビルド中に wsimport を呼び出す現在の安全でない方法です。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl>
</wsdlUrls>
<packageName>com.yourcompany.appname.ws.client</packageName>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
<destDir>${basedir}/target/jaxws</destDir>
</configuration>
</execution>
</executions>
</plugin>
xauthFile、xadditionalHeaders をいじってみました。引数を介して javax.xml.ws.security.auth.username とパスワードを渡します。また、コマンド ラインから wsimport を使用して、追加のセキュリティ情報を持つ Tomcat 生成の WSDL を指定しようとしました。ただし、wsimport によって生成されたファイルの構成はまったく変更されないようです。
ここでの私の質問は、WSIT 準拠のクライアントを取得するために、Maven と jaxws プラグインを完全に放棄して立ち往生しているのでしょうか? WSIT クライアントを自動生成する方法はありますか? または、手動でクライアントを生成する必要がありますか?
ここに書いたこと以外に追加情報が必要な場合はお知らせください。私はTomcatにデプロイしていますが、それは問題ではないようですが、MavenはMetroをデプロイされたWARファイルに喜んで取り込んでいるようです。
前もって感謝します!
編集: WSIT をいろいろ試した結果、うまくいったのは次のとおりです。
手始めに、Netbeans を使用して WSIT クライアントを生成します。テストして動作することを確認してから、WSIT 構成ファイル (wsit-client.xml および [Web サービス名].xml) を WS クライアント プロジェクトの META-INF ディレクトリに移動します。
セキュリティの観点から、プロジェクトへの関連する追加は、Web サービス xml のタグです。
<wsp:Policy wsu:Id="WebPortBindingPolicy">
<wsp:ExactlyOne>
<wsp:All>
<sc:CallbackHandlerConfiguration wspp:visibility="private">
<sc:CallbackHandler default="wsitUser" name="usernameHandler"/>
<sc:CallbackHandler default="changeit" name="passwordHandler"/>
</sc:CallbackHandlerConfiguration>
<sc:TrustStore wspp:visibility="private" location="C:\Apps\apache-tomcat-6.0.24\certs\client-truststore.jks" type="JKS" storepass="changeit" peeralias="xws-security-server"/>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
明らかに、ビルド中に管理する必要があるハードコードされた依存関係がいくつかあります。ユーザー、パスワード、トラストストアの場所、およびピアエイリアスはすべて開発時のデフォルトであり、システムが開発からテストおよび本番に移行するにつれて変更されます。これを管理するためのいくつかの異なる戦略をいじっていますが、おそらく各環境への構築のために Hudson で環境変数を設定することになるでしょう。
Maven の jaxws プラグインの設定を少しいじります。WSDL はビルドの一部として生成されるため、ローカルで参照する必要はありません。以下は、WS クライアント ターゲットの wsimport コマンドのプラグイン タグです。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl>
</wsdlUrls>
<staleFile>${project.build.directory}/jaxws/stale/WebService.stale</staleFile>
<packageName>com.yourcompany.appname.ws.client</packageName>
<sourceDestDir>${basedir}/src/main/java</sourceDestDir>
<destDir>${basedir}/target/jaxws</destDir>
</configuration>
<id>wsimport-generate-WebService</id>
<phase>generate-sources</phase>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>webservices-api</artifactId>
<version>2.0-b30</version>
</dependency>
</dependencies>
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir>
<xnocompile>true</xnocompile>
<verbose>true</verbose>
<extension>true</extension>
</configuration>
</plugin>
最後に、もちろん、Web サービスを呼び出す必要があるすべてのプロジェクトで、Metro 依存関係が適切に設定されていることを確認してください。