ここでは、Web コンテナに関する既知の問題とその解決方法を示します。
Java EE SDK b33d に含まれる JDK 1.6 を使用して JAX—WS テストを実行するときに、問題が発生する場合があります。テストはただちに停止し、次のメッセージが表示されます。
[wsimport] Exception in thread "main" java.lang.NoClassDefFoundError: \ com/sun/tools/ws/WsImport |
webservices-tools.jar に com/sun/tools/ws/WsImport.class、com/sun/tools/ws/ant/WsImport.class、および com/sun/tools/ws/ant/WsImport2.class が含まれていても、このエラーは起きます。さらに、1.5.0-10 JDK を使用すると、同じテスト作業空間が問題なく機能します。
JAX-WS テストを実行する前に、webservices-api.jar を $JAVA_HOME/jre/lib/endorsed にコピーします。
JAXR は SAAJ を使用して SOAP メッセージをレジストリに送信します。IFR 以外では、SAAJ impl クラスは lib/webservices-rt.jar の下にあります。IFR の場合、SAAJ クラスは引き続き lib/webservices-rt.jar の下にあります。また、saaj-impl.jar は /usr/share/lib ディレクトリにあります。この jar ファイルは Communications Server で格上げされ、webservices-rt.jar のクラスよりも優先されています。この jar ファイルには、SOAP メッセージを Web サービスレジストリに送信するために必要なセキュリティー権限がありません。/usr/share/lib ディレクトリ内の jar に権限を付与するか、/usr/share/lib の jar に依存しないように、パッケージを変更する必要があります。
server.policy ファイルに次の内容を追加します。
grant codeBase "file:/usr/share/lib/saaj-impl.jar" { permission java.security.AllPermission; }; |
wscompile Ant タスクは、JDK 6 Update 4 では失敗します。JAX-RPC API クラスごとに、次のエラーメッセージが表示されます。
package package-name does not exist |
wscompile Ant タスクを実行する前にj2ee.jar ではなく javaee.jar がクラスパスに指定されていることを確認します。