依赖jar中的Jackson 2.0注释被忽略了

时间:2014-10-01 11:20:43

标签: java json maven jboss jackson

我们有一个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)

1 个答案:

答案 0 :(得分:1)

@NokusFerreira,基本上你是对的。我知道这是一个老问题,但我希望这个答案会对某人有所帮助。

由于您没有告知何时出现问题(在JAR中进行序列化期间或在WAR中进行反序列化期间)。我猜测在WAR模块中进行反序列化时。

如果是,那么你的WAR可能正在使用resteasy-clientresteasy-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捆绑在一起。

所以基本上你有以下选择:

  • 迁移到较新的服务器(如WildFly)。
  • 在JBoss上升级RESTEasy库。
  • 将您的代码降级为使用Jackson 1.x

在JEE世界中常见的不便之处在于,声明为依赖项的库是由应用程序服务器提供的(可能与您认为正在使用的库不同)。

EDIT
此答案也许有用:How to make Resteasy 2.3.6 use Jackson 2.+