/** * Process the given {@link Set} of {@link Class} objects and add them to the JAX-RS Class List if they are valid * JAX-RS Classes * * @param classes {@link Set} of {@link Class} objects to process */ private void processClasses(Set<Class<?>> classes) { for (Class<?> cls : classes) { if (ProviderMetadataCollector.isProvider(cls)) { LOGGER.log(Level.FINE, "Loaded REST Provider class: " + cls.getName()); jaxRSClasses.add(cls); } else if (ResourceMetadataCollector.isResource(cls)) { final Parent parent = (Parent) cls.getAnnotation(Parent.class); if ((parent != null && BaseRestResource.class.equals(parent.value()))) { LOGGER.log(Level.FINE, "Loaded REST Resource class: " + cls.getName()); jaxRSClasses.add(cls); } else if (BaseRestResource.class.equals(cls)) { LOGGER.log(Level.FINE, "Loaded Base REST Resource class: " + cls.getName()); jaxRSClasses.add(cls); } else { LOGGER.log(Level.FINE, "Class [" + cls.getName() + "] is not a valid REST Resource, " + "the @Parent(BaseRestResource.class) annotation is missing"); } } else { LOGGER.log(Level.FINE, "Skipping class [" + cls.getName() + "]; Its not a REST Resource or Provider"); } } }
protected static <T> ClassMetadata collectClassMetadata(final Class<T> cls, boolean validateConstructor) { ClassMetadata classMetadata = null; if (ProviderMetadataCollector.isProvider(cls)) { classMetadata = ProviderMetadataCollector.collectMetadata(cls); } else if (ResourceMetadataCollector.isResource(cls)) { classMetadata = ResourceMetadataCollector.collectMetadata(cls); } else if (ApplicationMetadataCollector.isApplication(cls)) { classMetadata = ApplicationMetadataCollector.collectMetadata(cls); } else { throw new IllegalArgumentException(Messages.getMessage("cannotCreateFactoryForClass", cls)); //$NON-NLS-1$ } // validate that there is a valid constructor if needed if (validateConstructor && classMetadata.getConstructor().getConstructor() == null) { throw new IllegalStateException(Messages.getMessage("noValidConstructorFoundFor", cls //$NON-NLS-1$ .getCanonicalName())); } return classMetadata; }