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.AnnotationIntrospector;
6   import org.codehaus.jackson.map.DeserializationConfig;
7   import org.codehaus.jackson.map.Module;
8   import org.codehaus.jackson.map.ObjectMapper;
9   import org.codehaus.jackson.map.SerializationConfig;
10  import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
11  import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
12  import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
13  
14  import java.util.Collections;
15  
16  public class JacksonJsonProviderFactory {
17      public JacksonJsonProvider create() {
18          return create(Collections.<Module>emptyList());
19      }
20  
21      public JacksonJsonProvider create(Iterable<? extends Module> modules) {
22          ObjectMapper mapper = new ObjectMapper();
23  
24          /* This is what MapperConfigurator would do to a default ObjectMapper */
25          AnnotationIntrospector intr = AnnotationIntrospector.pair(new JacksonAnnotationIntrospector(), new JaxbAnnotationIntrospector());
26          mapper.setDeserializationConfig(mapper.getDeserializationConfig().withAnnotationIntrospector(intr));
27          mapper.setSerializationConfig(mapper.getSerializationConfig().withAnnotationIntrospector(intr));
28  
29          /* In the absence of a specific annotation for @JsonSerialize(include), ignore null fields when serializing */
30          mapper.setSerializationInclusion(Inclusion.NON_NULL);
31  
32          for (Module module : modules) {
33              mapper.registerModule(module);
34          }
35  
36          mapper.registerModule(new GuavaIterableCapableModule());
37  
38          JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(mapper, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS);
39  
40          // Make sure we only rely on annotations for de-/serialization
41          provider.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, false);
42          provider.configure(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
43          provider.configure(DeserializationConfig.Feature.AUTO_DETECT_SETTERS, false);
44          provider.configure(DeserializationConfig.Feature.AUTO_DETECT_FIELDS, false);
45          return provider;
46      }
47  }