У меня есть веб-приложение, использующее JAXB 2. При развертывании на Сервер приложений Oracle 10g я получаю ошибки, как только пытаюсь маршалировать файл XML. Оказывается, Oracle включает JAXB 1 в банку, скрытно переименованную в «xml.jar».
Как я могу заставить мое веб-приложение использовать версию jaxb jar-файлов, которые я развернул в WEB-INF/lib, вместо той, которую Oracle ввел в путь к классам, в идеале через конфигурацию, а не возиться с загрузчиками классов в моем коде?




Используйте JVM, отличную от вашего экземпляра Oracle, и убедитесь, что их библиотеки не находятся в вашем пути к классам.
Я полагаю, вы используете бывший сервер BEA Weblogic Server?
Вы можете добавить файл weblogic.xml в свой WEB-INF, который выглядит следующим образом:
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
(в ответ на комментарий, репутации мне пока не хватает :-))
Действительно, DLL ад, потому что это «все или ничего». Кажется, есть другой, более условный способ, описанный здесь. Хотя сам не пробовал ...
Хороший ответ, который, вероятно, решил бы мою проблему в любом нормальном мире. Оказывается, раньше у нас была такая настройка (я не понимал, что 10g был основан на Weblogic), но один из моей команды сказал мне, что он был отключен, потому что он что-то сломал. DLL ад сначала. Вздох. Спасибо, в любом случае.
Хорошо, чтобы противоречить себе, я попытался настроить 10g, чтобы предпочитать мои классы webapp, и теперь получаю другую ошибку - см. Этот вопрос: stackoverflow.com/questions/133993/…
Если вы все еще используете Oracle OC4J, включите его orion-application.xml в файл META-INF вашего EAR. Это должно выглядеть примерно так ...
<?xml version = "1.0" encoding = "UTF-8"?>
<orion-application>
<imported-shared-libraries>
<remove-inherited name = "skip.this.package"/>
</imported-shared-libraries>
</orion-application>
... с пакетом, который нужно пропустить.
Не думайте, что это действительно вариант - веб-приложение развертывается в контейнере приложений Oracle 10g и поэтому привязано к этой JVM.