2009-04-07 4 views
8

Я получаю эту ошибку при попытке получить доступ к моему веб-сервису, запущенному внутри 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/)

Я гугле за ошибки и сделал то, что должен решить (я ставлю JAXB-api.jar, версия 2.1 в JDK/Библиотека/одобрено и JDK/JRE/Библиотека/одобрено), но он не появляется чтобы иметь какой-либо эффект.

У меня его раньше не было, и я не уверен, что изменилось. Я использую JDK 6u10.

+0

Посмотрите также на [мой ответ на аналогичный вопрос] (http://stackoverflow.com/a/8832530/505893). – bluish

ответ

7

Java 6u10 включает JAXB 2.1, поэтому нет необходимости включать его вообще (он был включен с 6u4).

Прямо сейчас, похоже, что у вас есть конфликт между JAXB, включенным в webapp, и связанным JAXB, который поставляется с JRE. Вы можете попробовать удалить банку JAXB из вашего webapp (C:/software/tomcat6/webapps/messaging/WEB-INF/lib/jaxb-impl-2.1.5.jar) и полагаться на встроенную версию.

1

Возможно ли, что у вас есть jaxb jars в каталоге $ JAVA_HOME/jre/lib/ext? Вот определение начального загрузчика:

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.

(Взятая форма here)

Пожалуйста, поиск по всем местам, где у вас есть JAXB банка в системе (по крайней мере, JAXB-апи и JAXB-осущий) и убедитесь, что они находятся в каталоге WEB-INF/lib вашего веб-приложения или в каталоге lib tomcat.

2

Рекомендуемый способ - определить переменную окружения JAVA_ENDORSED_DIRS. Затем Tomcat будет использовать это свойство Java:

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS 

для загрузки одобренных банок. Итак, создайте папку, поставьте jaxb-api.jar v2.1 и определите переменную окружения, указывающую на эту папку.

Это лучше, чем использование глобального одобренного каталога, поскольку оно не влияет на всю JVM, и вам не нужно повторять этот процесс, когда JRE обновляется.

 Смежные вопросы

  • Нет связанных вопросов^_^