X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fnorthbound%2Fcommons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnorthbound%2Fcommons%2FNorthboundApplication.java;h=e164abaf95c0ccd3adb07e3bb55d32b8f9f22ec8;hb=9212fed678702583f4a555641208cf1c7b45b829;hp=5b8219126b8abbb7c82124b22f502505c2791e8c;hpb=109c75d557ff0048d2612d471e4acb0c879790bd;p=controller.git diff --git a/opendaylight/northbound/commons/src/main/java/org/opendaylight/controller/northbound/commons/NorthboundApplication.java b/opendaylight/northbound/commons/src/main/java/org/opendaylight/controller/northbound/commons/NorthboundApplication.java index 5b8219126b..e164abaf95 100644 --- a/opendaylight/northbound/commons/src/main/java/org/opendaylight/controller/northbound/commons/NorthboundApplication.java +++ b/opendaylight/northbound/commons/src/main/java/org/opendaylight/controller/northbound/commons/NorthboundApplication.java @@ -39,7 +39,26 @@ import org.slf4j.LoggerFactory; @SuppressWarnings("unchecked") public class NorthboundApplication extends Application { public static final String JAXRS_RESOURCES_MANIFEST_NAME = "Jaxrs-Resources"; + public static final String JAXRS_EXCLUDES_MANIFEST_NAME = "Jaxrs-Exclude-Types"; private static final Logger LOGGER = LoggerFactory.getLogger(NorthboundApplication.class); + private final Set _singletons; + + public NorthboundApplication() { + _singletons = new HashSet(); + _singletons.add(new ContextResolver() { + JAXBContext jaxbContext; + @Override + public synchronized JAXBContext getContext(Class type) { + if (jaxbContext == null) { + jaxbContext = newJAXBContext(); + } + return jaxbContext; + } + + } ); + _singletons.add(getJsonProvider()); + _singletons.add(new JacksonJsonProcessingExceptionMapper()); + } //////////////////////////////////////////////////////////////// // Application overrides @@ -47,17 +66,7 @@ public class NorthboundApplication extends Application { @Override public Set getSingletons() { - Set singletons = new HashSet(); - singletons.add(new ContextResolver() { - @Override - public JAXBContext getContext(Class type) { - return newJAXBContext(); - } - - } ); - singletons.add(getJsonProvider()); - singletons.add(new JacksonJsonProcessingExceptionMapper()); - return singletons; + return _singletons; } @Override @@ -102,6 +111,7 @@ public class NorthboundApplication extends Application { try { List> cls = svc.getAnnotatedClasses(ctx, new String[] { XmlRootElement.class.getPackage().getName() }, + parseManifestEntry(ctx, JAXRS_EXCLUDES_MANIFEST_NAME), true); return JAXBContext.newInstance(cls.toArray(new Class[cls.size()])); } catch (JAXBException je) { @@ -118,29 +128,22 @@ public class NorthboundApplication extends Application { try { IBundleScanService svc = lookupBundleScanner(ctx); result.addAll(svc.getAnnotatedClasses(ctx, - new String[] { javax.ws.rs.Path.class.getName() }, false)); + new String[] { javax.ws.rs.Path.class.getName() }, + null, false)); } catch (ServiceException se) { recordException = se; LOGGER.debug("Error finding JAXRS resource annotated classes in " + "bundle: {} error: {}.", bundleName, se.getMessage()); // the bundle scan service cannot be lookedup. Lets attempt to // lookup the resources from the bundle manifest header - Dictionary headers = ctx.getBundle().getHeaders(); - String header = headers.get(JAXRS_RESOURCES_MANIFEST_NAME); - if (header != null) { - for (String s : header.split(",")) { - s = s.trim(); - if (s.length() > 0) { - try { - result.add(ctx.getBundle().loadClass(s)); - } catch (ClassNotFoundException cnfe) { - LOGGER.error("Cannot load class: {} in bundle: {} " + - "defined as MANIFEST JAX-RS resource", s, bundleName, cnfe); - } - } + for (String c : parseManifestEntry(ctx, JAXRS_RESOURCES_MANIFEST_NAME)) { + try { + result.add(ctx.getBundle().loadClass(c)); + } catch (ClassNotFoundException cnfe) { + LOGGER.error("Cannot load class: {} in bundle: {} " + + "defined as MANIFEST JAX-RS resource", c, bundleName, cnfe); } } - } if (result.size() == 0) { @@ -154,4 +157,19 @@ public class NorthboundApplication extends Application { return result; } + private final Set parseManifestEntry(BundleContext ctx, String name) { + Set result = new HashSet(); + Dictionary headers = ctx.getBundle().getHeaders(); + String header = headers.get(name); + if (header != null) { + for (String s : header.split(",")) { + s = s.trim(); + if (s.length() > 0) { + result.add(s); + } + } + } + return result; + } + }