io.swagger.jaxrs2.integration.JaxrsAnnotationScanner Maven / Gradle / Ivy
package io.swagger.jaxrs2.integration;
import io.swagger.jaxrs2.integration.api.JaxrsOpenApiScanner;
import io.swagger.oas.integration.SwaggerConfiguration;
import io.swagger.oas.integration.api.OpenAPIConfiguration;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.ws.rs.core.Application;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class JaxrsAnnotationScanner> implements JaxrsOpenApiScanner {
protected OpenAPIConfiguration openApiConfiguration;
protected Application application;
protected static Logger LOGGER = LoggerFactory.getLogger(JaxrsAnnotationScanner.class);
public JaxrsAnnotationScanner application (Application application) {
this.application = application;
return this;
}
@Override
public void setApplication(Application application) {
this.application = application;
}
public T openApiConfiguration (OpenAPIConfiguration openApiConfiguration) {
this.openApiConfiguration = openApiConfiguration;
return (T)this;
}
@Override
public void setConfiguration(OpenAPIConfiguration openApiConfiguration) {
this.openApiConfiguration = openApiConfiguration;
}
@Override
public Set> classes() {
if (openApiConfiguration == null) {
openApiConfiguration = new SwaggerConfiguration();
}
ConfigurationBuilder config = new ConfigurationBuilder();
Set acceptablePackages = new HashSet();
boolean allowAllPackages = false;
if (openApiConfiguration.getResourcePackages() != null && !openApiConfiguration.getResourcePackages().isEmpty()) {
for (String pkg : openApiConfiguration.getResourcePackages()) {
if (!"".equals(pkg)) {
acceptablePackages.add(pkg);
config.addUrls(ClasspathHelper.forPackage(pkg));
}
}
} else {
allowAllPackages = true;
}
config.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
final Reflections reflections;
reflections = new Reflections(config);
Set> classes = reflections.getTypesAnnotatedWith(javax.ws.rs.Path.class);
// TODO add if adding annotations
//classes.addAll(reflections.getTypesAnnotatedWith(OpenApiDefinition.class));
Set> output = new HashSet>();
for (Class> cls : classes) {
if (allowAllPackages) {
output.add(cls);
} else {
for (String pkg : acceptablePackages) {
if (cls.getPackage().getName().startsWith(pkg)) {
output.add(cls);
}
}
}
}
LOGGER.trace ("classes() - output size {}", output.size());
return output;
}
@Override
public Map resources() {
return new HashMap();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy