import java.util.HashSet; import java.util.Set; import org.reflections.Reflections; import org.reflections.scanners.ResourcesScanner; import org.reflections.scanners.SubTypesScanner; import org.reflections.scanners.TypeAnnotationsScanner; import org.reflections.util.ClasspathHelper; import org.reflections.util.ConfigurationBuilder; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.jaxrs.config.BeanConfig; import com.wordnik.swagger.models.Contact; import com.wordnik.swagger.models.Info; import com.wordnik.swagger.models.License; /** * A {@link BeanConfig} that supports multiple resource packages. This can be removed in Swagger M2 * where this enhancement is supported (and directly ported from). * * @author ben.manes@gmail.com (Ben Manes) */ final class ResourceConfig extends BeanConfig { @Override public Set> classes() { ConfigurationBuilder config = new ConfigurationBuilder(); Set acceptablePackages = new HashSet(); if (getResourcePackage() != "") { String[] parts = getResourcePackage().split(","); for (String pkg : parts) { if (!"".equals(pkg)) { acceptablePackages.add(pkg); config.addUrls(ClasspathHelper.forPackage(pkg)); } } } config.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner()); setInfo(new Info() .title(getTitle()) .version(getVersion()) .description(getDescription()) .termsOfService(getTermsOfServiceUrl())); if (getContact() != null) { getInfo().contact(new Contact().name(getContact())); } if ((getLicense() != null) && (getLicenseUrl() != null)) { getInfo().license(new License().name(getLicense()).url(getLicenseUrl())); } getSwagger().setInfo(getInfo()); Set> classes = new Reflections(config).getTypesAnnotatedWith(Api.class); Set> output = new HashSet>(); for (Class cls : classes) { if (acceptablePackages.contains(cls.getPackage().getName())) { output.add(cls); } } return output; } }