我们有一个 Web 应用程序,曾经在 Jboss AS 7 中部署为 war。此 Web 应用程序使用 easteasy 和 jackson( 2.0 ) 对 mongodb 数据库中的数据进行序列化和反序列化。前段时间我们不得不将 webapp 分成 2 个不同的 Maven 模块、API (jar) 和 WAR。我们所有的 POJO 都在 jar 模块上。问题是所有的 Jackson 注释都变得毫无用处。他们只是被完全忽视了。 更多信息 jboss-部署-结构.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>
我读到,resteasy 模块和 jackson 模块可能会发生某种冲突,因为resteasy 可能使用一些旧的 jackson 版本。我怎样才能检查这个?或者这是 jboss 类加载器的问题? (Jackson 2 annotations ignored in EJB Jar with JBoss (6.2.0 GA))
最佳答案
@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 捆绑在一起。
所以基本上你有以下选择:
- 迁移到较新的服务器(例如 WildFly)。
- 升级 JBoss 上的 RESTEasy 库。
- 将代码降级为使用 Jackson 1.x
JEE 世界中常见的不便之处在于,声明为依赖项的库由应用程序服务器提供(并且可能与您认为正在使用的库不同)。
<小时/>编辑
另外这个答案可能有用:How to make Resteasy 2.3.6 use Jackson 2.+
关于java - 忽略依赖 jar 中的 Jackson 2.0 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140179/