本节介绍已知的 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 文件由 Application 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; }; |