У нас есть веб-приложение, которое можно развернуть на многих серверах приложений, включая Oracle 10g. Однако на этой платформе у нас возникают проблемы с путями к классам. Веб-приложение использует JAXB 2, но Oracle 10g поставляется с JAXB 1, и это вызывало ошибки. Чтобы обойти их, мы настроили Oracle на предпочтение классов в нашем веб-приложении, но теперь мы получаем указанную выше ошибку при попытке создать экземпляр контекста JAXB.
Поиск исключения «ограничения загрузчика нарушены» - оно, кажется, выдается, когда класс, который был загружен одним загрузчиком классов, пытается получить доступ к чему-то, что является частным пакетом в том же пакете, но загружается другим загрузчиком классов. Я попытался удалить в нашем веб-приложении все банки, которые включают javax.xml.namespace.QName, и убедился, что это экземпляр, включенный в Oracle, который выбирается, но ошибка все еще возникает. Есть идеи?
(Это продолжение предыдущий вопрос относительно 10g и JAXB 2.)




Какую версию Java вы используете? Последние версии поставляются с этим классом в rt.jar.
1.5.0_06 Это вроде бы включает. Однако я не знаю, как это обойти. Очевидно, что удалить его как из веб-приложения, так и из самого oracle невозможно.
Может быть, это совершенно не связано, но я помню проблему, которая была у Weblogic с тем же классом. Причиной проблемы стал измененный серийный идентификатор класса (Sun изменил его случайно). Обходной путь заключался в предоставлении JVM -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID = 1.0.
Может быть, это та же проблема, только неверно заявленная? Попробуй это.
Смотрите здесь: http://forums.bea.com/thread.jspa?threadID=600014563
Этот класс находится в половине существующих Java-библиотек WS. Его действительно легко загрузить из нескольких загрузчиков классов, а затем сравнить их, что вызовет ошибку LinkageError.
Один из эффективных (но кувалдных) способов отслеживания этого - изменить загрузчик классов из источника Java, чтобы выгрузить, из какой банки загружается этот конкретный класс во время загрузки, а затем добавить в свой путь к загрузочному классу измененную версию:
-Xbootclasspath / p: / путь / к / hackedBin
Можете ли вы просто обновить jar-файл JAXB в папке lib сервера приложений?
Я знаю, что это возвращается, но нашли ли вы работоспособное решение?