【发布时间】:2012-07-19 18:33:46
【问题描述】:
在 JBoss AS 7 上部署我的应用程序,然后在 Jetty 上部署,我注意到当 RestEasy 序列化我的 POJO 时出现了不受欢迎的差异。使用 Jetty,我有以下 JSON:
{
"pojo-name":{
"lines":[
{
"code":"250-1",
"id":1143,
}]
}
}
但是,当部署在 JBoss AS 7 上时,@XmlRootElement 注解给出的“pojo-name”会简单地消失,从而导致:
{
"lines":[
{
"code":"250-1",
"id":1143,
}]
}
我有一个包含以下依赖项的 POM 文件:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>${resteasy.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>${resteasy.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
<version>${resteasy.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-spring</artifactId>
<version>${resteasy.version}</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
<exclusion>
<artifactId>jaxb-impl</artifactId>
<groupId>com.sun.xml.bind</groupId>
</exclusion>
<exclusion>
<artifactId>sjsxp</artifactId>
<groupId>com.sun.xml.stream</groupId>
</exclusion>
<exclusion>
<artifactId>jsr250-api</artifactId>
<groupId>javax.annotation</groupId>
</exclusion>
<exclusion>
<artifactId>activation</artifactId>
<groupId>javax.activation</groupId>
</exclusion>
</exclusions>
</dependency>
我的 POJO 类如下所示:
@XmlRootElement(name = "pojo-name")
public class LinesResponse implements Serializable {
private static final long serialVersionUID = -8717658630497030320L;
private List<Lines> lines;
public LinesResponse() {}
// Getters and setters
}
您的帮助将不胜感激!谢谢各位。
编辑:
我似乎面临着 JAXB 提供者之间可能存在的冲突。也许当我的应用程序使用 Jetty 部署时,我将 Jettison 作为 JAXB 提供者,并且在部署在 JBoss Jackson 上时。来自JBoss documentation 我们有:
如果您的 Jackson 类使用 JAXB 注释进行注释,并且您的类路径中有 resteasy-jaxb-provider,您可能会触发 Jettision JAXB 编组代码。要关闭 JAXB json marshaller,请在您的类上使用 @org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes("application/*+json")。
一回到家,我就会尝试这种方法来确定。
【问题讨论】:
标签: java spring jetty jboss7.x resteasy