diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java index 09ded321bb..c2d56fd282 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java @@ -28,6 +28,7 @@ public class JaxrsAnnotationScanner> impleme protected OpenAPIConfiguration openApiConfiguration; protected Application application; protected static Logger LOGGER = LoggerFactory.getLogger(JaxrsAnnotationScanner.class); + protected boolean onlyConsiderResourcePackages = false; public JaxrsAnnotationScanner application(Application application) { this.application = application; @@ -83,7 +84,9 @@ public Set> classes() { } } } else { - allowAllPackages = true; + if (!onlyConsiderResourcePackages) { + allowAllPackages = true; + } } final Set> classes; try (ScanResult scanResult = graph.scan()) { diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsApplicationAndResourcePackagesAnnotationScanner.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsApplicationAndResourcePackagesAnnotationScanner.java new file mode 100644 index 0000000000..08338fd0b4 --- /dev/null +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsApplicationAndResourcePackagesAnnotationScanner.java @@ -0,0 +1,40 @@ +package io.swagger.v3.jaxrs2.integration; + +import java.util.HashSet; +import java.util.Set; + +/** + * @since 2.0.10 + */ +public class JaxrsApplicationAndResourcePackagesAnnotationScanner extends JaxrsAnnotationScanner { + + public JaxrsApplicationAndResourcePackagesAnnotationScanner() { + onlyConsiderResourcePackages = true; + } + + @Override + public Set> classes() { + Set> classes = super.classes(); + Set> output = new HashSet>(); + if (application != null) { + Set> clzs = application.getClasses(); + if (clzs != null) { + for (Class clz : clzs) { + if (!isIgnored(clz.getName())) { + output.add(clz); + } + } + } + Set singletons = application.getSingletons(); + if (singletons != null) { + for (Object o : singletons) { + if (!isIgnored(o.getClass().getName())) { + output.add(o.getClass()); + } + } + } + } + classes.addAll(output); + return classes; + } +} diff --git a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/integration/IntegrationTest.java b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/integration/IntegrationTest.java index ce17b2486f..b674e767ab 100644 --- a/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/integration/IntegrationTest.java +++ b/modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/integration/IntegrationTest.java @@ -16,6 +16,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; public class IntegrationTest { @@ -52,4 +53,34 @@ public void shouldScanWithNewInitialization() throws Exception { } } + @Test + public void shouldScanOnlyResourcePackagesClasses() throws Exception { + SwaggerConfiguration config = new SwaggerConfiguration() + .openAPI(new OpenAPI().info(new Info().description("TEST INFO DESC"))); + OpenApiContext ctx = new GenericOpenApiContext() + .openApiConfiguration(config) + .openApiReader(new Reader(config)) + .openApiScanner(new JaxrsApplicationAndResourcePackagesAnnotationScanner().openApiConfiguration(config)) + .init(); + + OpenAPI openApi = ctx.read(); + + assertNotNull(openApi); + assertNull(openApi.getPaths()); + + config = new SwaggerConfiguration() + .resourcePackages(Stream.of("com.my.project.resources", "org.my.project.resources").collect(Collectors.toSet())) + .openAPI(new OpenAPI().info(new Info().description("TEST INFO DESC"))); + + ctx = new GenericOpenApiContext() + .openApiConfiguration(config) + .openApiReader(new Reader(config)) + .openApiScanner(new JaxrsApplicationAndResourcePackagesAnnotationScanner().openApiConfiguration(config)) + .init(); + + openApi = ctx.read(); + assertNotNull(openApi); + assertEquals(openApi.getPaths().keySet(), expectedKeys); + } + }