2

我正在开发简单的 JAX-WS 网络服务。我正在使用 ANT 构建脚本创建 WAR 文件。该文件在部署到 Tomcat 7 服务器时,抛出以下异常,并出现如下部署错误。

JAXB 2.1 API 是从引导类加载器加载的,但是这个 RI(来自 jar:file:/D:/DreamSoln/Server/apache-tomcat-7.0.29/webapps/WebserviceDemo/WEB-INF/lib/jaxb-impl. jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。使用认可的目录机制将 jaxb-api.jar 放置在引导类加载器中。

我安装了 JDK 1.6,我尝试了认可机制,即​​我创建了 lib/endorsed 目录并在其中复制了 jaxb-api.jar 和 jaxws-api.jar。但它仍然不起作用。

我需要从我的网络应用程序的 WEB-INF/lib 中删除 jaxb-api.jar 和 jaxws-api.jar 吗?

还需要做什么?

4

3 回答 3

2

我认为您没有正确认可tomcat lib。该文件夹lib/endorsed在以前版本的 tomcat 中使用过(如果我没记错的话,就像 Tomcat 5.5),但在新版本(Tomcat 6 及更高版本)中,认可的库通常位于<TOMCAT_HOME>/endorsed(如果不存在,则必须创建它)。

实际上,tomcat 使用系统属性java.endorsed.dirs来定义背书的文件夹位置。所以请在你的tomcat安装中检查这个值。

如何检查这个?在应用程序中的任何 servlet/listener 中打印此属性。

使用上下文侦听器的示例(受此博客启发)

public class WebappLoadListener implements ServletContextListener {

    public void contextDestroyed(ServletContextEvent arg0) {
    }

    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("\n\n\n ENDORSED DIR: " +System.getProperty("java.endorsed.dirs"));      
    }
}

希望有帮助,

于 2012-07-24T08:04:36.333 回答
0

是的,一旦它们位于认可的目录中,您就应该从 webapp 中删除它们。

如果您尝试使用 Tomcat 的 Java EE 版本,TomEE Plus已经集成了 JAX-WS 支持,并且 JAXB 2.2 在认可的目录中。

于 2012-07-24T18:16:31.707 回答
0

Tomcat 7 不支持开箱即用的 JAX-WS。要在 Tomcat 上启用 JAX-WS,您需要

  1. 在Tomcat的库中至少包含“catalina-ws.jar”(不一定在“认可”下!)。

“catalina-ws.jar”应该作为“Tomcat extras”下载,它不包含在 TC7 的默认下载存档中。

  1. 在您的 Web 应用程序库中包含“JAX-WS RI”库。

只需尝试谷歌“下一个里程碑:Tomcat 和 JBoss 上的 JAX-WS Web 服务”,您将找到有关此主题的更多信息。

(但是对于像 JBoss 7 这样的 Java EE 容器,所有的库都已经存在了。)

于 2013-02-15T12:48:00.393 回答