我正在 IntelliJ IDEA 中开发一个简单的基于 maven 的 JavaEE 应用程序,显然我想将 Wildfly 8 用于开发和生产。我只需要通过一些 RESTful Web 服务公开一些实体。这些实体具有双向关系,当它们将被序列化为 JSON 时会导致循环。
较新版本的 Jackson 能够通过特殊注释处理这种情况。为了让它工作,我需要排除 Wildfly 的内置 JSON 序列化程序/jackson 提供程序/无论它是什么,并使用与我的应用程序捆绑在一起的较新版本。我按照我在网上找到的说明,提出了这个 jboss-deployment-structure.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.codehaus.jackson.jackson-jaxrs" />
<module name="org.codehaus.jackson.jackson-core-asl" />
<module name="org.codehaus.jackson.jackson-mapper-asl" />
<module name="org.codehaus.jackson.jackson-xc" />
</exclusions>
</deployment>
</jboss-deployment-structure>
问题是,它不起作用。即使我将 pom.xml 设置为如下所示:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
<version>3.0.6.Final</version>
<scope>provided</scope>
</dependency>
</dependencies>
这清楚地表明我的应用程序不应该捆绑任何东西,我仍然得到这个 StackOverflowError(由无限循环引起),它源于 org.codehaus.jackson 包。这又意味着 Jackson 的内置版本仍在开发中,不排除在外。我怎样才能解决这个问题?
提前致谢。
更新
我更改了标题,因为我想问题更大。要么我做错了什么,要么 Wildfly 存在严重问题。
我创建了一个带有“编译”范围的所有 jackson 2 库 (com.fasterxml.jackson*) 的 pom.xml。这些库包含在 WEB-INF/lib 文件夹中。我根据Jackson JAX-RS FAQ编写了一个 @Provider并且我可以验证它实际上是由 JAX-RS 实现 (RestEasy) 读取的,仅仅是因为如果我不在 WEB-INF/lib 中包含 jackson 库,部署将失败一个 ClassNotFoundException。但是,我仍然遇到 org.codehaus.X (Jackson 1) 的无限递归错误。
我不在乎如何,我只需要一个解决方案来修复 Wildfly 中的这种无限递归。