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  }