Skip to content

Commit 3bfd7cc

Browse files
authored
Merge pull request #3284 from swagger-api/ticket-3283
refs #3283 - add scanner limited to defined resourcePackages
2 parents 4bbbc98 + 6103bf4 commit 3bfd7cc

File tree

3 files changed

+75
-1
lines changed

3 files changed

+75
-1
lines changed

modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/JaxrsAnnotationScanner.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class JaxrsAnnotationScanner<T extends JaxrsAnnotationScanner<T>> impleme
2828
protected OpenAPIConfiguration openApiConfiguration;
2929
protected Application application;
3030
protected static Logger LOGGER = LoggerFactory.getLogger(JaxrsAnnotationScanner.class);
31+
protected boolean onlyConsiderResourcePackages = false;
3132

3233
public JaxrsAnnotationScanner application(Application application) {
3334
this.application = application;
@@ -83,7 +84,9 @@ public Set<Class<?>> classes() {
8384
}
8485
}
8586
} else {
86-
allowAllPackages = true;
87+
if (!onlyConsiderResourcePackages) {
88+
allowAllPackages = true;
89+
}
8790
}
8891
final Set<Class<?>> classes;
8992
try (ScanResult scanResult = graph.scan()) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.swagger.v3.jaxrs2.integration;
2+
3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
/**
7+
* @since 2.0.10
8+
*/
9+
public class JaxrsApplicationAndResourcePackagesAnnotationScanner extends JaxrsAnnotationScanner<JaxrsApplicationAndResourcePackagesAnnotationScanner> {
10+
11+
public JaxrsApplicationAndResourcePackagesAnnotationScanner() {
12+
onlyConsiderResourcePackages = true;
13+
}
14+
15+
@Override
16+
public Set<Class<?>> classes() {
17+
Set<Class<?>> classes = super.classes();
18+
Set<Class<?>> output = new HashSet<Class<?>>();
19+
if (application != null) {
20+
Set<Class<?>> clzs = application.getClasses();
21+
if (clzs != null) {
22+
for (Class<?> clz : clzs) {
23+
if (!isIgnored(clz.getName())) {
24+
output.add(clz);
25+
}
26+
}
27+
}
28+
Set<Object> singletons = application.getSingletons();
29+
if (singletons != null) {
30+
for (Object o : singletons) {
31+
if (!isIgnored(o.getClass().getName())) {
32+
output.add(o.getClass());
33+
}
34+
}
35+
}
36+
}
37+
classes.addAll(output);
38+
return classes;
39+
}
40+
}

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/integration/IntegrationTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import static org.testng.Assert.assertEquals;
1818
import static org.testng.Assert.assertNotNull;
19+
import static org.testng.Assert.assertNull;
1920

2021
public class IntegrationTest {
2122

@@ -52,4 +53,34 @@ public void shouldScanWithNewInitialization() throws Exception {
5253
}
5354
}
5455

56+
@Test
57+
public void shouldScanOnlyResourcePackagesClasses() throws Exception {
58+
SwaggerConfiguration config = new SwaggerConfiguration()
59+
.openAPI(new OpenAPI().info(new Info().description("TEST INFO DESC")));
60+
OpenApiContext ctx = new GenericOpenApiContext()
61+
.openApiConfiguration(config)
62+
.openApiReader(new Reader(config))
63+
.openApiScanner(new JaxrsApplicationAndResourcePackagesAnnotationScanner().openApiConfiguration(config))
64+
.init();
65+
66+
OpenAPI openApi = ctx.read();
67+
68+
assertNotNull(openApi);
69+
assertNull(openApi.getPaths());
70+
71+
config = new SwaggerConfiguration()
72+
.resourcePackages(Stream.of("com.my.project.resources", "org.my.project.resources").collect(Collectors.toSet()))
73+
.openAPI(new OpenAPI().info(new Info().description("TEST INFO DESC")));
74+
75+
ctx = new GenericOpenApiContext()
76+
.openApiConfiguration(config)
77+
.openApiReader(new Reader(config))
78+
.openApiScanner(new JaxrsApplicationAndResourcePackagesAnnotationScanner().openApiConfiguration(config))
79+
.init();
80+
81+
openApi = ctx.read();
82+
assertNotNull(openApi);
83+
assertEquals(openApi.getPaths().keySet(), expectedKeys);
84+
}
85+
5586
}

0 commit comments

Comments
 (0)