Развертывая свое приложение на JBoss AS 7, а затем на Jetty, я заметил нежелательную разницу, когда RestEasy сериализовал мой POJO. С Jetty у меня есть следующий JSON:
{
"pojo-name":{
"lines":[
{
"code":"250-1",
"id":1143,
}]
}
}
Однако при развертывании на JBoss AS 7 "pojo-name", заданное аннотацией @XmlRootElement, просто исчезает, в результате чего:
{
"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 у нас есть:
Если ваши классы Jackson аннотированы аннотациями JAXB и у вас есть resteasy-jaxb-provider в вашем пути к классам, вы можете запустить код маршаллинга Jettision JAXB. Чтобы отключить JAXB json marshaller, используйте @ org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes ("application / * + json") в ваших классах.
Как только я вернусь домой, я попробую этот подход, чтобы быть уверенным.