grafthez
grafthez

Reputation: 4081

Jackson @JsonSerialize ignored in Jboss 7.1.1 if maven dependecy set to provided

I have Jax-rs endpoint deployed in WAR archive on JBoss 7.1.1. In its JSON response I don't want my null field name to be included, so I put @JsonSerialize on it.

class MyResponse {

    private Long id;

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
    private String name;

    private List<String> addresses;

    // getters and setters
}

My pom.xml has the following

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>2.3.2.Final</version>
        <scope>provided</scope>
    </dependency>

When the scope for resteasy-jackson-provider is set to provided it ignores the annotation and returns null in JSON response. However when I remove the scope from maven dependency - it works.

From the page here https://docs.jboss.org/author/display/AS71/Implicit+module+dependencies+for+deployments it looks like JBoss should autoload this module if Jax-RS deployment found.

Now I don't know if this is a bug and if I should really include this dependency (NOT keeping it provided). Or maybe I'm doing something wrong there?

Upvotes: 9

Views: 4611

Answers (1)

Mark Jentz
Mark Jentz

Reputation: 161

You need to make sure to create a JBoss Deployment Structure descriptor.

Since this is a Maven project I assume it would be under src/main/webapp/WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="org.codehaus.jackson.jackson-core-asl" />
      <module name="org.codehaus.jackson.jackson-mapper-asl" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

This will allow the built-in support for RESTEasy and Jackson to work correctly in JBoss 7.1.x or JBoss EAP 6.x. Without this descriptor RESTEasy will use the Jettison provider.

Upvotes: 15

Related Questions