View Javadoc

1   package com.atlassian.plugins.rest.common.json;
2   
3   import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
4   import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
5   import org.codehaus.jackson.map.*;
6   import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
7   import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
8   import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
9   
10  public class JacksonJsonProviderFactory
11  {
12      public JacksonJsonProvider create(Iterable<? extends Module> modules)
13      {
14          ObjectMapper mapper = new ObjectMapper();
15  
16          /* This is what MapperConfigurator would do to a default ObjectMapper */
17          AnnotationIntrospector intr = AnnotationIntrospector.pair(new JacksonAnnotationIntrospector(),  new JaxbAnnotationIntrospector());
18          mapper.setDeserializationConfig(mapper.getDeserializationConfig().withAnnotationIntrospector(intr));
19          mapper.setSerializationConfig(mapper.getSerializationConfig().withAnnotationIntrospector(intr));
20  
21          /* In the absence of a specific annotation for @JsonSerialize(include), ignore null fields when serializing */
22          mapper.setSerializationInclusion(Inclusion.NON_NULL);
23  
24          for (Module module : modules)
25              mapper.registerModule(module);
26  
27          JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(mapper, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS);
28  
29          // Make sure we only rely on annotations for de-/serialization
30          provider.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, false);
31          provider.configure(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
32          provider.configure(DeserializationConfig.Feature.AUTO_DETECT_SETTERS, false);
33          provider.configure(DeserializationConfig.Feature.AUTO_DETECT_FIELDS, false);
34          return provider;
35      }
36  }