Liberty 18.0.0.2: jaxrs-2.0 не работает с ldapRegistry-3.0

Я пытаюсь обновить свои приложения с Liberty 18.0.0.1 до 18.0.0.2, но теперь все они терпят неудачу:

 java.lang.NoClassDefFoundError: javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
 ...

трассировка стека

проблема, кажется, связана с ldapRegistry-3.0 - как только эта функция включена, все запросы jax-rs терпят неудачу. Как только я удаляю ldapRegistry, код работает нормально, но мне нужна эта функция для моих приложений...

Я даже создал небольшой пример, чтобы продемонстрировать это, с одной RestEndpoint /v1/api/employee : project">Пример проекта конфигурация сервера

Это баг, можно куда-нибудь сообщить? или я что-то не так здесь делаю?

Вот дамп сервера

Спасибо


person Vladimir Tkac    schedule 31.07.2018    source источник
comment
вы можете сообщить об этой ошибке в репозитории OpenLiberty github: github.com/OpenLiberty/open-liberty   -  person Andy Guibert    schedule 31.07.2018
comment
Я полагаю, что кто-то еще сообщил о той же проблеме, которую вы наблюдаете, над устранением которой я работаю здесь: github.com/OpenLiberty/open-liberty/issues/4404   -  person Andy Guibert    schedule 01.08.2018
comment
О, круто. Я добавлю комментарий к этой ошибке. Спасибо @AndyGuibert   -  person Vladimir Tkac    schedule 01.08.2018


Ответы (1)


Похоже, это вызвано тонким конфликтом загрузки классов разделенных пакетов. Мне удалось воспроизвести эту проблему с помощью Liberty 18.0.0.2, и основное исключение выглядит примерно так:

java.lang.NoSuchMethodException: javax.xml.bind.annotation.W3CDomHandler.createUnmarshaller(javax.xml.bind.ValidationEventHandler)

В этом случае кажется, что javax.xml.bind.annotation.W3CDomHandler был загружен из загрузчика классов A, а javax.xml.bind.ValidationEventHandler был загружен дважды - один раз из загрузчика классов A и один раз из загрузчика классов B. Ошибка, которую мы здесь получаем, вызвана тем, что JVM ищет javax.xml.bind.annotation.W3CDomHandler.createUnmarshaller(javax.xml.bind.ValidationEventHandler), где оба класса взяты из загрузчика классов A. , но вместо этого он ищет метод createUnmarshaller(ValidationEventHandler), где ValidationEventHandler исходит от загрузчика классов B.

Эта ошибка будет устранена в следующей версии Liberty (18.0.0.3).

person Andy Guibert    schedule 03.08.2018