2010-07-12 67 views
2

我们试图使用Jackson 1.5来利用它提供的一些多态处理,但是看起来泽西带来了它自己的过时版本的Jackson(1.1.1)。在测试Jersey序列化的JSON时,我们得到的结果与单元测试中手动序列化的结果不同。有什么方法可以覆盖或更新泽西的杰克逊版本?

{"id":"40","ticketProps":[{"id":"28","field":{"id":"28","name":"WXYZ","strict":"false","valueType":"STRING"},"value":"W"},{"id":"29","field":{"id":"29","name":"SEAT","strict":"false","valueType":"STRING"},"value":"4A"}]} 

{"id":"40","ticketProps":[{"id":"28","field":{}},{"id":"29","field":{}}],"name":null} 

不幸的是,使用杰克逊1.1.1不是一个选项。有没有办法让泽西使用杰克逊1.5?正在考虑设置它在泽西配置类或什么...

+0

这是使用maven吗?在我看来,如果你不使用maven,Jersey会分发给单独的jackson JAR。 – skaffman 2010-07-12 19:36:48

+0

是的,这是Maven项目的一部分。您建议我自己下拉泽西岛并指向那个工件,而不是java.net Maven回购站上的工件? – gmoore 2010-07-12 19:45:16

+0

你应该只需要添加对Jackson 1.5的依赖关系并定义冲突解决策略,就可以选择1.5超过1.1。 – StaxMan 2010-07-13 20:32:08

回答

1

如果泽西的maven POM不允许您将杰克逊依赖项从Jersey依赖项中分离出来,那么您可以获得个别JARs手动更换为1.1.x版的Jackson 1.5.x JAR。

请注意,并不能保证泽西岛将与更新的杰克逊版本一起工作。杰克逊的API在1.1版本中发生了很大变化。

+1

理论上1.x次要版本应该向后兼容,它仍然有效。但确实存在导致意外不相容的情况。泽西还使用一些较低级别的访问权限,这与风险兼容性相关。 – StaxMan 2010-07-13 20:33:50

0

你没有给出太多的细节(特别是关于你的运行时环境),所以我只讨论问题的主题部分:在dependencyManagement部分声明Jackson的版本1.5,以强制其他依赖项具有杰克逊作为依赖。

Wheter这将在运行时的工作就留给读者做练习:)

为了记录在案,这里是我们可以在V3.1JerseyOnePager阅读:

新泽西州目前正在使用1.1杰克逊在GlassFish 3.0中。该版本将在3.1版本升级到最新的稳定版本(目前为1.5.2)。

+0

Maven2,Netbeans,泽西岛,JPA,用于测试的Glassfish 因此,这让我相信杰克逊的依赖包裹在Glassfish中,而不是Jersey。哦,也许这是Glassfish的一些限制。这听起来正确吗? – gmoore 2010-07-13 02:22:54

+0

@gmoore:限制?您可能只是期待太多(AFAIK,GlassFish符合规范)。但是也许你可以在战争中捆绑Jersey和Jackson,并告诉GlassFish首先使用你的战争库(在sun-web.xml中)而不是由GlassFish提供的库。 – 2010-07-13 10:28:48

+0

我的意思是Glassfish/Jersey与Jackson 1.1.1合作的限制,并且突然升级到New Awesome Version时不会很好。 – gmoore 2010-07-13 13:31:11