2016-09-08 1 views
2

Я переношу приложение JAX-RS из WebSphere 8.0 в WebSphere Liberty 8.5.5.Как изменить версию Джексона в приложении JAX-RS (WebSphere Liberty)

В WebSphere 8.0 Джексон был предоставлен WebSphere. Я могу найти jackson-core-asl-1.9.12.jar, jackson-jaxrs-1.9.12.jar, jackson-mapper-asl-1.9.12.jar и jackson-xc-1.9.12.jar файлов в каталоге AppServer\plugins\.

На новом сервере приложений (WebSphere Liberty) я получаю следующее исключение: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "myPropertyName". Я думаю, что это исключение происходит потому, что аннотация @JsonIgnoreProperties(ignoreUnknown = true) на сериализованных классах не работает. Я предполагаю, что это происходит потому, что WebSphere Liberty 8.5.5 предоставляет более старую версию Jackson.

Я попытался развернуть версию Джексона, которая мне нужна с моим приложением, , но это не помогло (у меня все еще есть исключения). Как я могу заставить WebSphere Liberty использовать версию Джексона, которая мне нужна?

ответ

4

WebSphere Liberty будет использовать версию Джексона, указанную с помощью JAX-RS 2.0, с некоторыми оговорками (которые мы чеканка).

A) Вам все равно необходимо указать поставщиков JSON явно.

B) Вы можете увидеть NPE с 16.0.0.2, как описано здесь: Regiser JacksonJsonProvider in Websphere liberty profile. Мы работали над этим, как описано. Последняя бета-версия не демонстрирует такого поведения, что говорит о том, что следующее обновление во время выполнения также не будет.

Примеры: https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-app/src/main/java/org/gameontext/mediator/JaxbJsonProvider.java

и

https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-app/src/main/java/org/gameontext/mediator/JsonProvider.java

Наша Gradle сборка приносит в зависимости ДЖЕКСОН: https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-app/build.gradle

И наша server.xml использует jaxrs-2.0, но не делать любую магию-загрузчик классов: https://github.com/gameontext/gameon-mediator/blob/6b469d18965673af35129abf3ff987b61af54c88/mediator-wlpcfg/servers/gameon-mediator/server.xml

HTH

+0

Спасибо, все работает после того, как я указал провайдера JAX-RS JSON явно и поместил в него 'objectMapper.configure (DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)'. Я удалил '@JsonIgnoreProperties (ignoreUnknown = true)' аннотации. Мне не нужно было менять версию библиотеки. – Alexey

+0

Отлично! Очень рад, что это работает для вас. – ebullient

1

Alexey, вы пробовали подход parentLast loader к приложению, развернутому на свободе, чтобы классы приложений могли иметь приоритет. Вы можете обратиться к этому question, чтобы получить больше информации. Существует документация по этому вопросу от IBM, а также here

+0

Спасибо! Я посмотрю на этот вопрос. – Alexey

+0

По существу в вашем приложении EAR-упаковке вам нужно будет указать, что вы хотите, чтобы родительский последний (указать, что ваши упакованные библиотеки должны рассматриваться, а не по умолчанию, загруженные загрузчиком классов) –

+0

По какой-то причине это не работает. – Alexey

2

Да, WebSphere Liberty использует более старую версию Jackson, чем традиционный WAS. Нам нужно это исправлять!

Между прочим, еще одна возможность для вас - использовать функцию jaxrs-2.0, а затем включить более новую версию Jackson в приложение или в общую библиотеку.

Одно из отличий между функциями Jaxrs-1.1 и jaxrs-2.0 от Liberty заключается в том, что jaxrs-2.0 не раскрывает пакеты Jackson API. Таким образом, загрузчик классов приложений не сможет загрузить классы Jackson, которые поставляются с Liberty. Это означает, что он будет загружать классы из вашего приложения, не требуя делегирования parentLast или других трюков загрузчика классов.

Надеется, что это помогает, Энди

+0

Я использую функцию jaxrs-2.0 в файле server.xml. И похоже, что у меня есть Jackson 1.6.2 на пути к классам во время выполнения (предоставляется Liberty!). – Alexey

+0

Я нашел другое решение моей проблемы, но, возможно, если бы я переключился на Jackson 2.x, это решило бы проблему. – Alexey

Смежные вопросы