У меня есть веб-приложение, использующее JAXB 2. При развертывании на сервере приложений Oracle 10g я получаю ошибки, как только пытаюсь маршалировать XML-файл. Оказывается, Oracle включает JAXB 1 в банку, тайно переименованную в «xml.jar». Кто-нибудь знает, как я могу заставить мой webapp использовать версию jaxb jars, которую я развернул в web-inf/lib, по сравнению с тем, что Oracle запустило в путь к классам, в идеале - через конфигурацию, а не в том, чтобы путаться с загрузчиками классов в моем коде ,JAXB 2 в Oracle 10g Webapp
ответ
Используйте другую 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 ад, потому что это «все или ничего». Кажется, что есть другой, более условный способ, описанный here. Не пробовал это сам, хотя ...
Хороший ответ, который, вероятно, решит мою проблему в любом здравомыслящем мире. Оказывается, мы использовали эту настройку (я не понимал, что 10g основано на Weblogic), но одна из моих команд говорит мне, что она была вывезена из-за того, что она сломала что-то еще. DLL ад снова и снова. Вздох. Спасибо, в любом случае. – alexmcchessers
Хорошо, чтобы противоречить самому себе, я попытался настроить 10g, чтобы предпочесть мои классы webapp, а теперь получить другую ошибку - см. Этот вопрос: http://stackoverflow.com/questions/133993/loader-constraints-violated-when-linking -javaxxmlnamespaceqname-класса из-Weba – alexmcchessers
Если вы все еще используете OC4J от Oracle, включите их 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>
... с пакетом, который вы хотите пропустить.
Не думайте, что это действительно вариант - webapp развертывается в контейнере приложений Oracle 10g и поэтому привязан к этой JVM. – alexmcchessers