Зарегистрируйтесь JacksonJsonProvider в профиле свободы Websphere

Я пытаюсь вызвать службу REST из EJB, надеясь использовать

@JsonIgnoreProperties(ignoreUnknown = true)

Следующее делает трюк в wlp v8.5.5.9

Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);

Тот же код создает NullPointerException в wlp v16.0.0.2.

Caused by: java.lang.NullPointerException
    at org.apache.cxf.jaxrs.impl.tl.ThreadLocalProviders.getContextResolver(ThreadLocalProviders.java:50)
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.locateMapper(JacksonJsonProvider.java:634)
    at org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:413)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1356)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:438)
    ... 98 more

Я нашел обсуждения, вызванные теми же проблемами в версии 8.5.5.9, но я не знаю, как это может мне помочь. Как я заметил, у меня нет проблем с кодом в версии 8.5.5.9.

Другой обсуждение было связано с версией Jackson v2.x. Изначально я использовал Jackson v1.9.13, но попытался перейти на новейшую версию Jackson 2.8.0 и применить предложенное решение. Тот же результат: приложение работает в wlp 8.5.5.9 и выдает ту же ошибку в v16.0.0.2.

Любые идеи?

Обновление: этой проблемы можно было бы избежать, расширив класс JacksonJsonProvider и явно предоставив сопоставитель объектов.

public class MyJacksonJsonProvider extends JacksonJsonProvider {

        public MyJacksonJsonProvider() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setVisibilityChecker(objectMapper.getVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.ANY));
            objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            setMapper(objectMapper);
       }

}

а затем зарегистрировать его в клиенте

Client client = ClientBuilder.newClient().register(MyJacksonJsonProvider.class);

Однако было бы неплохо понять, баг это или фича.


person jjd    schedule 18.07.2016    source источник
comment
Я подозреваю, что это ошибка. Последняя бета-драйвер такого поведения не проявляет (поднял и гоняем). FWIW, мы только что сделали это с одним из наших приложений.   -  person ebullient    schedule 09.09.2016
comment
Самая последняя бета-версия драйвера, по-видимому, не имеет этой проблемы для нашего приложения. Верно и вам?   -  person ebullient    schedule 13.09.2016
comment
@ebullient, спасибо за замечание. Я попробую и дам вам знать. Однако не могли бы вы сказать, какой драйвер вы имели в виду?   -  person jjd    schedule 15.09.2016