在Tomcat中,java.lang.LinkageError:从引导类加载器加载JAXB 2.1 API

我正在尝试将我的webapp加载到Tomcat中。 它似乎抱怨它有一个比我的应用程序更旧版本的JAR。 我应该删除那个旧的JAR,使用更新版本的Java,编辑bootstrap类加载器(如何?)或者什么?

消息:正在从引导类加载器加载JAXB 2.1 API,但是这个RI(来自jar:file:/ C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%205.5/webapps/SkillsDB/WEB-INF/lib/ jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class)需要2.2 API。 使用endorsed目录机制将jaxb-api.jar放在bootstrap类加载器中。 (见http://java.sun.com/j2se/1.6.0/docs/guide/standards/ )

引发者:执行控制器[FormattedDocumentController]的动作[getDocx]导致exception: java.lang.LinkageError :正在从引导类加载器加载JAXB 2.1 API,但这个RI(来自jar:file:/ C:/ Program%20Files / Apache%20Software%20Foundation / Tomcat%205.5 / webapps / SkillsDB / WEB-INF / lib / jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class)需要2.2 API。 使用endorsed目录机制将jaxb-api.jar放在bootstrap类加载器中。 (见http://java.sun.com/j2se/1.6.0/docs/guide/standards/ )

把你的JAXB 2.2 JAR放入

 %JAVA_HOME%\lib\endorsed 

它应该工作。

如果安装了Java

 C:\Program Files\Java 

然后你应该把JAXB 2.2 JAR放入:

 C:\Program Files\Java\lib\endorsed 

目录。

我不确切知道为什么,但我按照以下方式解决了它。

我意识到Tomcat使用的是一个不是默认JVM (jre1.6.0_03)(jre1.6.0_26,在文件夹C:\ Program Files \ Java \ jre6中 )。

于是我停止了Tomcat,启动了程序“Configure Tomcat”,在“Java”选项卡中选择了“Use default”然后再次启动Tomcat。

将您的JAXB 2.2 JAR放在文件夹中,首先需要找到此文件夹使用的位置:

的System.out.println(System.getProperty( “java.endorsed.dirs”));

我是d:\ Tomcat 7.0 \背书