Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 394
grafthez Avatar asked Jan 11 '13 10:01

grafthez


1 Answers

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.

like image 55
Mark Jentz Avatar answered Nov 08 '22 02:11

Mark Jentz