8

尝试访问在 tomcat 中运行的 Web 服务时出现此错误。

引起:java.lang.LinkageError: JAXB 2.0 API 正在从引导类加载器加载,但是这个 RI(来自 jar:file:/C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl -2.1.5.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.1 API。使用认可的目录机制将 jaxb-api.jar 放置在引导类加载器中。(见http://java.sun.com/j2se/1.5.0/docs/guide/standards/

我搜索了错误并做了应该解决的问题(我将 jaxb-api.jar,版本 2.1 放在 JDK/lib/endorsed 和 JDK/jre/lib/endorsed 中)但它似乎没有任何效果。

我以前没有它,我不确定发生了什么变化。我使用JDK 6u10。

4

3 回答 3

8

Java 6u10 包含 JAXB 2.1,因此根本不需要包含它(从 6u4 开始就包含它)。

现在看起来您在 webapp 中包含的 JAXB 和 JRE 附带的捆绑 JAXB 之间存在冲突。您可以尝试从您的 webapp ( C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar) 中删除 JAXB jar 并依赖内置版本。

于 2009-04-14T13:32:42.937 回答
2

推荐的方法是定义 JAVA_ENDORSED_DIRS 环境变量。然后 Tomcat 将使用这个 Java 属性:

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS

为了加载认可的罐子。因此,创建一个文件夹,将 jaxb-api.jar v2.1 放在那里并定义环境变量以指向该文件夹。

这比使用全局认可的目录要好,因为它不会影响整个 JVM,并且您不必在更新 JRE 时重复该过程。

于 2009-04-14T13:21:37.427 回答
1

您是否有可能在 $JAVA_HOME/jre/lib/ext 目录中有 jaxb jar?下面是引导加载程序的定义:

Bootstrap - 这个类加载器包含 Java 虚拟机提供的基本运行时类,以及系统扩展目录 ($JAVA_HOME/jre/lib/ext) 中存在的 JAR 文件中的任何类。注意 - 一些 JVM 可能将其实现为多个类加载器,或者它可能根本不可见(作为类加载器)。

(取自这里

请搜索系统中所有包含 jaxb jar 的位置(至少 jaxb-api 和 jaxb-impl),并确保它们位于 Web 应用程序的 WEB-INF/lib 目录或 lib 目录中的雄猫。

于 2009-04-07T14:45:44.500 回答