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

Jakarta ee 如何在JAX-RS应用程序(WebSphere Liberty)中更改Jackson版本,jakarta-ee,jackson,jax-rs,websphere,websphere-liberty,Jakarta Ee,Jackson,Jax Rs,Websphere,Websphere Liberty,我正在将JAX-RS应用程序从WebSphere8.0迁移到WebSphereLiberty 8.5.5 在WebSphere8.0中,Jackson由WebSphere提供。我可以在AppServer\plugins\目录中找到jackson-core-asl-1.9.12.jar,jackson-jaxrs-1.9.12.jar和jackson-xc-1.9.12.jar文件 在新的应用服务器(WebSphere Liberty)中,我得到以下异常:org.codehaus.jackson.

我正在将JAX-RS应用程序从WebSphere8.0迁移到WebSphereLiberty 8.5.5

在WebSphere8.0中,Jackson由WebSphere提供。我可以在
AppServer\plugins\
目录中找到
jackson-core-asl-1.9.12.jar
jackson-jaxrs-1.9.12.jar
jackson-xc-1.9.12.jar
文件

在新的应用服务器(WebSphere Liberty)中,我得到以下异常:
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:unrecogned字段“myPropertyName”
。我认为发生这种异常是因为序列化类上的注释
@JsonIgnoreProperties(ignoreUnknown=true)
不起作用。我猜这是因为WebSphereLiberty 8.5.5提供了旧版本的Jackson

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

Alexey,您是否尝试过使用parentLast加载程序方法来加载Liberty上部署的应用程序,以便应用程序类可以优先使用。你可以参考这篇文章来获得更多的见解。IBM也有相关文档

是的,WebSphereLiberty使用了比传统WAS更旧的Jackson版本。我们需要把它修好

同时,您还可以使用jaxrs-2.0特性,然后在应用程序或共享库中包含更新版本的Jackson

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


希望这有所帮助,Andy将使用您在JAX-RS 2.0中指定的Jackson版本,并附带一些注意事项(我们正在关注)

A) 您仍然必须显式指定JSON提供程序

B) 您可能会看到16.0.0.2版本的NPE,如下所述:。我们已经解决了上述问题。最近的测试版没有显示这种行为,这表明下一次运行时更新也不会

示例:

我们的gradle构建带来了对jackson的依赖:

我们的server.xml使用jaxrs-2.0,但没有任何类加载器的魔力:


HTH

谢谢!我来看看这个问题。基本上,在您的应用程序EAR打包中,您必须提到您希望parent last(表示将考虑您的打包库,而不是类加载器加载的默认库)谢谢,在我明确指定JAX-RS JSON provider之后,一切都能正常工作,并将
objectMapper.configure(UNKNOWN属性上的反序列化config.Feature.FAIL,false)
放入其中。我删除了
@JsonIgnoreProperties(ignoreUnknown=true)
注释。我不必更改库的版本。太好了!很高兴知道这也适用于您。我正在使用server.xml中的jaxrs-2.0特性。看起来我在运行时将Jackson 1.6.2放在类路径上(由Liberty提供!)。我找到了解决问题的另一个解决方案,但是,如果我切换到Jackson 2.x,它可能会解决问题。您好,我知道公认的答案是正确的,并且有效。但你们可以更新问题的步骤,提到我必须在共享库中包含哪些JAR才能使用JACKSON2.2吗。