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.ObjectMapper;
8   import org.codehaus.jackson.map.SerializationConfig;
9   import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
10  import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
11  import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
12  
13  public class JacksonJsonProviderFactory
14  {
15      public JacksonJsonProvider create()
16      {
17          ObjectMapper mapper = new ObjectMapper();
18  
19          /* This is what MapperConfigurator would do to a default ObjectMapper */
20          AnnotationIntrospector intr = AnnotationIntrospector.pair(new JacksonAnnotationIntrospector(),  new JaxbAnnotationIntrospector());
21          mapper.setDeserializationConfig(mapper.getDeserializationConfig().withAnnotationIntrospector(intr));
22          mapper.setSerializationConfig(mapper.getSerializationConfig().withAnnotationIntrospector(intr));
23  
24          /* In the absence of a specific annotation for @JsonSerialize(include), ignore null fields when serializing */
25          mapper.setSerializationInclusion(Inclusion.NON_NULL);
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  }