本節說明已知的 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 檔案由 Enterprise 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; }; |
對於 JDK 6 Update 4,wscompile ant 作業會失敗。針對每個 JAX-RPC API 類別,會顯示下列錯誤訊息:
package package-name does not exist |
在執行 wscompile ant 作業之前,請確認在類別路徑中已指定 javaee.jar,而非 j2ee.jar。