«Нарушены ограничения загрузчика при связывании класса javax / xml / namespace / QName» из веб-приложения на Oracle 10g - PullRequest
5 голосов
/ 25 сентября 2008

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

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

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

Ответы [ 4 ]

3 голосов
/ 25 сентября 2008

Этот класс входит в половину библиотек WS Java. Это действительно легко загрузить из нескольких загрузчиков классов, а затем сравнить их, вызывая LinkageError.

Один эффективный (но кувалдой) метод, позволяющий отследить это, состоит в том, чтобы модифицировать Classloader из исходного кода Java, чтобы получить дамп, из которого jar-файл, загружаемый этим конкретным классом, загружается во время загрузки, а затем добавьте к начальной загрузочной дорожке измененную версию:

-Xbootclasspath / р: / путь / к / hackedBin

1 голос
/ 25 сентября 2008

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

0 голосов
/ 22 октября 2008

Вы можете просто обновить JAR JAXB в папке сервера приложений lib?

0 голосов
/ 25 сентября 2008

Может быть, это совершенно не связано, но я помню проблему, с которой у Weblogic был тот же класс. Причиной проблемы был измененный серийный идентификатор класса (Sun изменил его случайно). Обходной путь должен был предоставить -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID = 1.0 JVM.

Может ли это быть той же проблемой, только неправильно сообщенной? Попробуй.

Смотрите здесь: http://forums.bea.com/thread.jspa?threadID=600014563

...