2009-04-07 9 views
8

Ich erhalte diesen Fehler, wenn ich versuche, auf meinen Webservice innerhalb von Tomcat zuzugreifen.LinkageError JAXB 2.0 -> 2.1 (Tomcat)

Caused by: java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from 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) needs 2.1 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.5.0/docs/guide/standards/)

gegoogelt ich für den Fehler und tat, was sie lösen sollte (Ich habe jaxb-api.jar, Version 2.1 in JDK/lib/endorsed und JDK/jre/lib/endorsed), aber es wird nicht angezeigt irgendeinen Effekt haben.

Ich hatte es vorher nicht, und ich bin mir nicht sicher, was geändert wurde. Ich benutze JDK 6u10.

+0

Werfen Sie auch einen Blick auf [meine Antwort auf eine ähnliche Frage] (http://stackoverflow.com/a/8832530/505893). – bluish

Antwort

7

Java 6u10 enthält JAXB 2.1, es ist also nicht notwendig, es einzuschließen (es wurde seit 6u4 aufgenommen).

Momentan sieht es so aus, als hätten Sie einen Konflikt zwischen JAXB, der in einer Webapp enthalten ist, und dem gebündelten JAXB, der mit JRE geliefert wird. Sie könnten versuchen, das JAXB-Glas aus Ihrer Webanwendung zu entfernen (C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar) und sich auf die integrierte Version verlassen.

1

Ist es möglich, dass Sie die jaxb jars im Verzeichnis $ JAVA_HOME/jre/lib/ext haben? Hier ist die Definition des Bootstraploader:

Bootstrap - This class loader contains the basic runtime classes provided by the Java Virtual Machine, plus any classes from JAR files present in the System Extensions directory ($JAVA_HOME/jre/lib/ext). NOTE - Some JVMs may implement this as more than one class loader, or it may not be visible (as a class loader) at all.

(Taken Form here)

Bitte suchen Sie für alle Orte, wo man die jaxb Gläser im System haben (zumindest jaxb-api und jaxb-impl) und stellen Sie sicher, dass sie sich entweder im Verzeichnis WEB-INF/lib Ihrer Webanwendung oder im Verzeichnis lib des Tomcat befinden.

2

Die empfohlene Methode besteht darin, die Umgebungsvariable JAVA_ENDORSED_DIRS zu definieren. Dann wird Tomcat diese Java-Eigenschaft verwenden:

, um die indossierten Gläser zu laden. Erstellen Sie also einen Ordner, legen Sie dort jaxb-api.jar v2.1 ab und definieren Sie die Umgebungsvariable so, dass sie auf diesen Ordner zeigt.

Dies ist besser als die Verwendung des globalen indossierten Verzeichnisses, da es sich nicht auf die gesamte JVM auswirkt und Sie den Prozess nicht wiederholen müssen, wenn die JRE aktualisiert wird.