/** * Returns a list of any classes annotated with @WebService or * @WebServiceProvider annotation. */ private List<Class<?>> discoverWebServices(Bundle bundle) throws DeploymentException { logger.debug("Discovering web service classes"); ServiceReference sr = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName()); PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(sr); try { BundleAnnotationFinder classFinder = new BundleAnnotationFinder(packageAdmin, bundle); List<Class<?>> classes = new ArrayList<Class<?>>(); classes.addAll(classFinder.findAnnotatedClasses(WebService.class)); classes.addAll(classFinder.findAnnotatedClasses(WebServiceProvider.class)); return classes; } catch (Exception e) { throw new DeploymentException("Error scanning for web service annotations in bundle", e); } finally { bundle.getBundleContext().ungetService(sr); } }
BundleAnnotationFinder bundleAnnotationFinder = new BundleAnnotationFinder(packageAdmin, bundle, new ResourceDiscoveryFilter() {
private void servletAnnotationScan(final Bundle bundle, final WebApp webApp) throws Exception { LOG.debug("metadata-complete is either false or not set"); LOG.debug("scanning for annotated classes"); BundleAnnotationFinder baf = new BundleAnnotationFinder(packageAdmin.getService(), bundle); Set<Class<?>> webServletClasses = new LinkedHashSet<>(baf.findAnnotatedClasses(WebServlet.class)); Set<Class<?>> webFilterClasses = new LinkedHashSet<>(baf.findAnnotatedClasses(WebFilter.class)); Set<Class<?>> webListenerClasses = new LinkedHashSet<>(baf.findAnnotatedClasses(WebListener.class)); for (Class<?> webServletClass : webServletClasses) { LOG.debug("found WebServlet annotation on class: {}", webServletClass); WebServletAnnotationConfigurer annonScanner = new WebServletAnnotationConfigurer(bundle, webServletClass.getCanonicalName()); annonScanner.scan(webApp); } for (Class<?> webFilterClass : webFilterClasses) { LOG.debug("found WebFilter annotation on class: {}", webFilterClass); WebFilterAnnotationConfigurer filterScanner = new WebFilterAnnotationConfigurer(bundle, webFilterClass.getCanonicalName()); filterScanner.scan(webApp); } for (Class<?> webListenerClass : webListenerClasses) { LOG.debug("found WebListener annotation on class: {}", webListenerClass); addWebListener(webApp, webListenerClass.getCanonicalName()); } LOG.debug("class scanning done"); }
bundleAnnotationFinder = new BundleAnnotationFinder(packageAdmin, bundle, filter, beanArchiveJarNames); } else { ResourceDiscoveryFilter filter = new ResourceDiscoveryFilter() { bundleAnnotationFinder = new BundleAnnotationFinder(packageAdmin, bundle, filter, beanArchiveJarNames);
BundleAnnotationFinder baf = new BundleAnnotationFinder( packageAdminService, bundle); List<Class<?>> annotatedClasses = baf
BundleAnnotationFinder baf = new BundleAnnotationFinder( packageAdminService, bundle); List<Class<?>> annotatedClasses = baf
BundleAnnotationFinder bundleAnnotationFinder = new BundleAnnotationFinder(packageAdmin, bundle, new ResourceDiscoveryFilter() {
@SuppressWarnings("unchecked") public static void mergeAnnotations(Bundle bundle, WebApp webApp, MergeContext mergeContext, final String prefix) throws DeploymentException { final boolean isJarFile = prefix.endsWith(".jar"); try { BundleAnnotationFinder bundleAnnotationFinder = new BundleAnnotationFinder(null, bundle, new ResourceDiscoveryFilter() { @Override public boolean directoryDiscoveryRequired(String url) { return !isJarFile; } @Override public boolean rangeDiscoveryRequired(DiscoveryRange discoveryRange) { return discoveryRange.equals(DiscoveryRange.BUNDLE_CLASSPATH); } @Override public boolean zipFileDiscoveryRequired(String url) { return isJarFile ? url.equals(prefix) : false; } }); List<Class<?>> webServlets = bundleAnnotationFinder.findAnnotatedClasses(WebServlet.class); WEB_SERVLET_ANNOTATION_MERGE_HANDLER.merge(webServlets.toArray(new Class<?>[0]), webApp, mergeContext); List<Class<?>> webFilters = bundleAnnotationFinder.findAnnotatedClasses(WebFilter.class); WEB_FILTER_ANNOTATION_MERGE_HANDLER.merge(webFilters.toArray(new Class<?>[0]), webApp, mergeContext); List<Class<?>> webListeners = bundleAnnotationFinder.findAnnotatedClasses(WebListener.class); WEB_LISTENER_ANNOTATION_MERGE_HANDLER.merge(webListeners.toArray(new Class<?>[0]), webApp, mergeContext); } catch (Exception e) { throw new DeploymentException("Fail to merge annotations in " + prefix, e); } }
classFinder = new BundleAnnotationFinder(packageAdmin, bundle); } catch (Exception e) { throw new DeploymentException("could not create class finder for rar bundle " + bundle, e);