2009-04-07 7 views
8

Ricevo questo errore quando provo ad accedere al mio webservice in esecuzione all'interno di tomcat.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/)

Ho cercato su google per l'errore e ha fatto quello che dovrebbe risolverlo (ho messo JAXB-api.jar, versione 2.1 in JDK/lib/approvato e JDK/JRE/lib/approvato), ma non appare avere qualche effetto

Non ce l'avevo prima e non sono sicuro di cosa sia stato modificato. Io uso JDK 6u10.

+0

Dai un'occhiata anche a [la mia risposta a una domanda simile] (http://stackoverflow.com/a/8832530/505893). – bluish

risposta

7

Java 6u10 include JAXB 2.1, quindi non è necessario includerlo (è stato incluso dal 6u4).

In questo momento sembra che ci sia un conflitto tra JAXB incluso con una webapp e il JAXB in dotazione con JRE. Potresti provare a rimuovere il jar JAXB dalla tua webapp (C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar) e fare affidamento sulla versione integrata.

1

È possibile che i jaxb siano nella directory $ JAVA_HOME/jre/lib/ext? Ecco la definizione del bootstrap loader:

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.

(forma assunta here)

si prega di ricerca per tutti i luoghi in cui si hanno i vasi JAXB nel sistema (almeno JAXB-api e JAXB-impl) e assicurarsi che siano nella directory WEB-INF/lib della tua applicazione web o nella directory lib del tomcat.

2

Il metodo consigliato è definire la variabile ambientale JAVA_ENDORSED_DIRS. Quindi Tomcat utilizzerà questa proprietà Java:

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

per caricare i vasi approvati. Quindi, crea una cartella, metti jaxb-api.jar v2.1 lì e definisci la variabile ambientale da puntare a quella cartella.

Questo è meglio dell'utilizzo della directory globale approvata, poiché non influisce sull'intera JVM e non è necessario ripetere la procedura, quando JRE viene aggiornato.

Problemi correlati