private final JAXBContext newJAXBContext() { BundleContext ctx = getBundleContext(); IBundleScanService svc = lookupBundleScanner(ctx); try { List<Class<?>> 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) { LOGGER.error("Error creating JAXBContext", je); return null; } }
private final Set<Class<?>> findJAXRSResourceClasses() { BundleContext ctx = getBundleContext(); String bundleName = ctx.getBundle().getSymbolicName(); Set<Class<?>> result = new HashSet<Class<?>>(); ServiceException recordException = null; try { IBundleScanService svc = lookupBundleScanner(ctx); result.addAll( svc.getAnnotatedClasses( ctx, 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 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) { if (recordException != null) { throw recordException; } else { throw new ServiceException( "No resource classes found in bundle:" + ctx.getBundle().getSymbolicName()); } } return result; }