"ограничения загрузчика нарушены при связывании класса javax / xml / namespace / QName" из веб-приложения в Oracle 10g

У нас есть веб-приложение, которое можно развернуть на многих серверах приложений, включая Oracle 10g. Однако на этой платформе у нас возникают проблемы с путями к классам. Веб-приложение использует JAXB 2, но Oracle 10g поставляется с JAXB 1, и это вызывало ошибки. Чтобы обойти их, мы настроили Oracle на предпочтение классов в нашем веб-приложении, но теперь мы получаем указанную выше ошибку при попытке создать экземпляр контекста JAXB.

Поиск исключения «ограничения загрузчика нарушены» - оно, кажется, выдается, когда класс, который был загружен одним загрузчиком классов, пытается получить доступ к чему-то, что является частным пакетом в том же пакете, но загружается другим загрузчиком классов. Я попытался удалить в нашем веб-приложении все банки, которые включают javax.xml.namespace.QName, и убедился, что это экземпляр, включенный в Oracle, который выбирается, но ошибка все еще возникает. Есть идеи?

(Это продолжение предыдущий вопрос относительно 10g и JAXB 2.)

Я знаю, что это возвращается, но нашли ли вы работоспособное решение?

jlpp 01.02.2011 02:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
1
8 365
4

Ответы 4

Какую версию Java вы используете? Последние версии поставляются с этим классом в rt.jar.

1.5.0_06 Это вроде бы включает. Однако я не знаю, как это обойти. Очевидно, что удалить его как из веб-приложения, так и из самого oracle невозможно.

alexmcchessers 25.09.2008 19:34

Может быть, это совершенно не связано, но я помню проблему, которая была у 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 сервера приложений?

Другие вопросы по теме