java - 忽略依赖 jar 中的 Jackson 2.0 注释

标签 java json maven jboss jackson

我们有一个 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-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 世界中常见的不便之处在于,声明为依赖项的库由应用程序服务器提供(并且可能与您认为正在使用的库不同)。

<小时/>

编辑
另外这个答案可能有用:How to make Resteasy 2.3.6 use Jackson 2.+

关于java - 忽略依赖 jar 中的 Jackson 2.0 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26140179/

相关文章:

json - Golang json.decoder 无法仅解码来自浏览器的请求

javascript - 无法从存在的 json 中获取值

java - 在构建开始之前运行 bash 脚本

java - Java 使用的 Asp.net Web 服务和 Windows 集成身份验证

java - 如何在 Java 8 中映射映射中的值?

javascript - 使用 Ajax 将复杂对象数组从 View 传递到 Controller

maven - BadCommandLineException 与 maven cxf XJC 插件

java - 按照 Maven 存储库布局生成 JAR 和 POM 文件?

java - 导入org.openqa.selenium.firefox.FirefoxDriver无法解析

java - 将图像插入java代码编辑器