2009-04-07 12 views
8

Recibo este error al intentar acceder a mi servicio web ejecutando dentro de 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/)

Busqué en Google para el error, y lo que debería resolverlo (pongo jaxb-api.jar, la versión 2.1 de JDK/lib/respaldada y JDK/JRE/lib/aprobación) pero no aparece para tener algún efecto

No lo tenía antes, y no estoy seguro de lo que ha cambiado. Yo uso JDK 6u10.

+0

Eche un vistazo también a [mi respuesta a una pregunta similar] (http://stackoverflow.com/a/8832530/505893). – bluish

Respuesta

7

Java 6u10 incluye JAXB 2.1, por lo que no es necesario incluirlo en absoluto (se ha incluido desde 6u4).

En este momento parece que tienes un conflicto entre JAXB incluido con una aplicación web y el paquete JAXB que viene con JRE. Puede intentar eliminar el jar JAXB de su aplicación web (C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar) y confiar en la versión incorporada.

1

¿Es posible que tenga los archivos jaxb en el directorio $ JAVA_HOME/jre/lib/ext? Aquí está la definición del cargador de arranque:

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 here Tomado)

favor de la búsqueda de todos los lugares donde tienes los frascos JAXB en el sistema (al menos jaxb-api y jaxb-impl) y asegúrese de que estén en el directorio WEB-INF/lib de su aplicación web o en el directorio lib del tomcat.

2

La forma recomendada es definir la variable de entorno JAVA_ENDORSED_DIRS. Entonces Tomcat usará esta propiedad de Java:

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

para cargar los frascos endosados. Entonces, cree una carpeta, coloque jaxb-api.jar v2.1 allí y defina la variable de entorno para apuntar a esa carpeta.

Esto es mejor que usar el directorio respaldado global, porque no afecta a toda la JVM y no tiene que repetir el proceso cuando se actualiza el JRE.

Cuestiones relacionadas