barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

четверг, 1 сентября 2011 г.

JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI needs 2.1 API

Проблема: 
при попытке деплоя веб-сервиса на tomcat вываливается исключение типа:
JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/C:/++tomcat/webapps/testWS/WEB-INF/lib/jaxb-impl.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, используемая tomcat`ом, отличается от той, с которой собран war-ник (в данном случае, томкат использует 2.0, а веб-сервис использует 2.1).

Решение:
Вариант 1: Обновить JDK, используемый сервером, до версии, которая использует более новую JAXB.
Вариант 2: использовать endorsed-механизм:
  1. В какую-то диреторию положить необходимую для веб-сервиса версию библиотеки jaxb-api.jar
  2. Далее либо установить переменную окружения JAVA_ENDORSED_DIRS с путем к этой директории, либо залезть в catalina.bat (или sh), запускающий tomcat, и поменять в нём 
-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%"
 на 
-Djava.endorsed.dirs="/path/to/my/endorsed/dir"

Jar-ники из этой директории будут переопределять те, которые используются jdk`ем по-умолчанию.

Комментариев нет:

Отправить комментарий