Regiser JacksonJson提供者在Websphere自由档案中

时间:2016-07-18 22:00:15

标签: jackson jax-rs websphere-liberty

我试图从EJB调用REST服务,希望利用Jackson的

@JsonIgnoreProperties(ignoreUnknown = true)

以下是wlp v8.5.5.9

中的技巧
Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);

相同的代码在wlp v16.0.0.2中生成NullPointerException

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

我在v8.5.5.9中发现了discussions引发的相同问题,但我不确定它对我有什么帮助。正如我所说,我对v8.5.5.9中的代码没有任何麻烦

另一个discussion与Jackson v2.x有关。最初我使用了Jackson v1.9.13,但我试图切换到最新的Jeckson 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);

然而,如果它是一个错误或一个功能,那将是很好的。

0 个答案:

没有答案