我们有一个Web应用程序曾经在Jboss AS 7中作为战争部署。这个webapp使用reasteasy和jackson(2.0)来序列化和去除来自mongodb数据库的数据。前段时间我们不得不将webapp分成2个不同的maven模块,以及API(jar)和WAR。我们所有的POJO都在jar模块上。问题是所有杰克逊注释都变得毫无用处。他们完全被忽略了。 更多信息 jboss-deployment-structure.xml:
<exclusions>
<module name="org.codehaus.jackson.jackson-core-asl"/>
<module name="org.codehaus.jackson.jackson-mapper-asl"/>
</exclusions>
POM(API)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
POM(WAR)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
我读到reasteasy模块和jackson模块可能会有某种冲突,因为resteasy可能会使用一些旧的jackson版本。我怎么检查这个?或者这是jboss类加载器的问题? (Jackson 2 annotations ignored in EJB Jar with JBoss (6.2.0 GA))
答案 0 :(得分:1)
@NokusFerreira,基本上你是对的。我知道这是一个老问题,但我希望这个答案会对某人有所帮助。
由于您没有告知何时出现问题(在JAR中进行序列化期间或在WAR中进行反序列化期间)。我猜测在WAR模块中进行反序列化时。
如果是,那么你的WAR可能正在使用resteasy-client
和resteasy-jackson-provider
,这里存在问题 - 因为要与Jackson 2.x合作,RESTEasy需要一个不同的模块:resteasy-jackson2-provider
(请请注意“ 2 ”后缀)而不是旧的resteasy-jackson-provider
。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.0.11.Final</version>
</dependency>
但不幸的是,resteasy-jackson2-provider
未与JBoss 7.1捆绑在一起。
所以基本上你有以下选择:
在JEE世界中常见的不便之处在于,声明为依赖项的库是由应用程序服务器提供的(可能与您认为正在使用的库不同)。
EDIT
此答案也许有用:How to make Resteasy 2.3.6 use Jackson 2.+