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
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
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
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 }