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: пример конфигурации сервера проекта
Это ошибка, могу ли я сообщить об этом где-нибудь? или я тут что то не так делаю?
Вот дамп сервера
Спасибо
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)