1 package com.atlassian.plugins.rest.module.json;
2
3 import com.atlassian.plugins.rest.module.scanner.AnnotatedClassScanner;
4 import com.atlassian.plugins.rest.common.json.JsonJaxbContextFactory;
5 import org.osgi.framework.Bundle;
6
7 import java.util.Set;
8 import javax.ws.rs.ext.ContextResolver;
9 import javax.ws.rs.ext.Provider;
10 import javax.xml.bind.JAXBContext;
11 import javax.xml.bind.annotation.XmlRootElement;
12 import javax.xml.bind.annotation.XmlType;
13
14 @Provider
15 public class JsonJaxbContextResolver implements ContextResolver<JAXBContext>
16 {
17 private final JAXBContext context;
18 private final Set<Class<?>> classes;
19
20 public JsonJaxbContextResolver(final Bundle bundle, final JsonJaxbContextFactory jsonJaxbContextFactory)
21 {
22 this.classes = new AnnotatedClassScanner(bundle, XmlRootElement.class, XmlType.class).scan();
23 this.context = jsonJaxbContextFactory.createContext(classes.toArray(new Class[classes.size()]));
24 }
25
26 public JAXBContext getContext(Class<?> type)
27 {
28 return context != null && classes.contains(type) ? context : null;
29 }
30 }