LinkageError JAXB 2.0 -> 2.1 (Tomcat) - PullRequest
8 голосов
/ 07 апреля 2009

Я получаю эту ошибку при попытке получить доступ к моему веб-сервису, запущенному внутри tomcat.

Причина: java.lang.LinkageError: API JAXB 2.0 загружается из загрузчика классов начальной загрузки, но этот RI (из файла jar: / C: / software / tomcat6 / webapps / messaging / WEB-INF / lib / jaxb-impl-2.1.5.jar! /com/sun/xml/bind/v2/model/impl/ModelBuilder.class) требуется API 2.1. Используйте одобренный механизм каталогов, чтобы поместить jaxb-api.jar в загрузчик классов начальной загрузки. (См. http://java.sun.com/j2se/1.5.0/docs/guide/standards/)

Я погуглил ошибку и сделал то, что должно ее исправить (я поместил jaxb-api.jar, версия 2.1 в JDK / lib / endorsed и JDK / jre / lib / endorsed), но это, похоже, не имеет никакого эффекта .

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

Ответы [ 3 ]

8 голосов
/ 14 апреля 2009

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

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

2 голосов
/ 14 апреля 2009

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

-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS

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

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

1 голос
/ 07 апреля 2009

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

Bootstrap - этот загрузчик классов содержит основные классы времени выполнения, предоставляемые виртуальная машина Java, плюс любой классы из файлов JAR, присутствующих в Каталог системных расширений ($ JAVA_HOME / JRE / Библиотека / внутр). ПРИМЕЧАНИЕ. - Некоторые JVM могут реализовать это как более один класс загрузчик, или это не может быть видимый (как загрузчик классов) вообще.

(полученная форма здесь )

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

...