本节介绍已知的 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 任务之前,确保在类路径而不是 j2ee.jar 中指定 javaee.jar。