如何在JAX-RS应用程序(WebSphere Liberty)中更改Jackson版本

问题描述 投票:3回答:3

我正在将JAX-RS应用程序从WebSphere 8.0迁移到WebSphere Liberty 8.5.5。

在WebSphere 8.0中,Jackson由WebSphere提供。 我能找到jackson-core-asl-1.9.12.jarjackson-jaxrs-1.9.12.jarjackson-mapper-asl-1.9.12.jarjackson-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。

我尝试使用我的应用程序部署我需要的Jackson版本,但它没有帮助(我仍然有例外)。 如何让WebSphere Liberty使用我需要的Jackson版本?

java-ee jackson jax-rs websphere websphere-liberty
3个回答
4
投票

WebSphere Liberty将使用您使用JAX-RS 2.0指定的Jackson版本,并提供一些警告(我们正在追逐)。

A)您仍然必须明确指定JSON提供程序。

B)您可能会看到如此处所述的16.0.0的NPE: Regiser JacksonJsonProvider在Websphere自由配置文件中 。 如上所述,我们已经解决了这个问题。 最新的测试版没有出现此行为,这表明下一次运行时更新也不会。

示例: 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构建引入了jackson依赖: 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


2
投票

是的,WebSphere Liberty使用旧版本的Jackson而不是传统的WAS。 我们需要解决这个问题!

与此同时,另一种可能性是使用jaxrs-2.0功能,然后在应用程序或共享库中包含较新版本的Jackson。

Liberty的jaxrs-1.1和jaxrs-2.0功能之间的区别之一是jaxrs-2.0不公开Jackson API包。 因此,应用程序的类加载器将无法加载Liberty附带的Jackson类。 这意味着它将从您的应用程序加载类,而无需执行parentLast委托或其他类加载器技巧。

希望这会有所帮助,安迪


1
投票

Alexey,您是否尝试过对部署在自由上的应用程序的parentLast加载器方法,以便应用程序类可以优先使用。 您可以参考此问题以获得更多见解。 IBM也提供这方面的文档

© www.soinside.com 2019 - 2024. All rights reserved.