View Javadoc

1   package eu.scape_project.watch.rest.resource;
2   
3   import javax.ws.rs.Produces;
4   import javax.ws.rs.core.MediaType;
5   import javax.ws.rs.ext.Provider;
6   
7   import org.codehaus.jackson.map.AnnotationIntrospector;
8   import org.codehaus.jackson.map.DeserializationConfig.Feature;
9   import org.codehaus.jackson.map.ObjectMapper;
10  import org.codehaus.jackson.map.SerializationConfig;
11  import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
12  import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
13  
14  /**
15   * Provider that configures Jackson to better detect methods and properties to
16   * serialize JSON.
17   * 
18   * 
19   * @author Wordnik
20   */
21  @Provider
22  @Produces(MediaType.APPLICATION_JSON)
23  public class JSONContextResolver extends org.codehaus.jackson.jaxrs.JacksonJsonProvider {
24    
25    /**
26     * Instance holder.
27     */
28    @SuppressWarnings("deprecation")
29    private static final class ObjectMapperHolder {
30      /**
31       * Cannot be instantiated.
32       */
33      private ObjectMapperHolder() {
34      }
35  
36      /**
37       * The instance.
38       */
39      public static final ObjectMapper COMMON_MAPPER = new ObjectMapper();
40      
41      static {
42        AnnotationIntrospector jackson = new JacksonAnnotationIntrospector();
43        AnnotationIntrospector jaxb = new JaxbAnnotationIntrospector();
44        AnnotationIntrospector pair = new AnnotationIntrospector.Pair(jaxb, jackson);
45        COMMON_MAPPER.getSerializationConfig().setAnnotationIntrospector(jaxb);
46        COMMON_MAPPER.getDeserializationConfig().setAnnotationIntrospector(pair);
47        COMMON_MAPPER.getDeserializationConfig().set(Feature.AUTO_DETECT_SETTERS, true);
48        COMMON_MAPPER.configure(Feature.AUTO_DETECT_SETTERS, true);
49        COMMON_MAPPER.configure(SerializationConfig.Feature.WRITE_NULL_PROPERTIES, false);
50        COMMON_MAPPER.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
51        COMMON_MAPPER.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
52      }
53    }
54  
55    /**
56     * Get singleton instance.
57     * 
58     * @return The singleton instance
59     */
60    public static ObjectMapper getCommonMapper() {
61      return ObjectMapperHolder.COMMON_MAPPER;
62    }
63  
64    public JSONContextResolver() {
65      super.setMapper(getCommonMapper());
66    }
67  }