Skip to content

Commit d9f9313

Browse files
committed
ref #2943 - replace reflections with classgraph
1 parent a4906f7 commit d9f9313

File tree

7 files changed

+37
-47
lines changed

7 files changed

+37
-47
lines changed

modules/swagger-integration/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
<name>swagger-integration</name>
1515
<dependencies>
1616
<dependency>
17-
<groupId>org.reflections</groupId>
18-
<artifactId>reflections</artifactId>
17+
<groupId>io.github.classgraph</groupId>
18+
<artifactId>classgraph</artifactId>
1919
</dependency>
2020
<dependency>
2121
<groupId>javax.ws.rs</groupId>

modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiScanner.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package io.swagger.v3.oas.integration;
22

3+
import io.github.classgraph.ClassGraph;
4+
import io.github.classgraph.ScanResult;
35
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
46
import io.swagger.v3.oas.integration.api.OpenAPIConfiguration;
57
import io.swagger.v3.oas.integration.api.OpenApiScanner;
68
import org.apache.commons.lang3.StringUtils;
7-
import org.reflections.Reflections;
8-
import org.reflections.scanners.ResourcesScanner;
9-
import org.reflections.scanners.SubTypesScanner;
10-
import org.reflections.scanners.TypeAnnotationsScanner;
11-
import org.reflections.util.ClasspathHelper;
12-
import org.reflections.util.ConfigurationBuilder;
139
import org.slf4j.Logger;
1410
import org.slf4j.LoggerFactory;
1511

@@ -37,9 +33,9 @@ public void setConfiguration(OpenAPIConfiguration openApiConfiguration) {
3733

3834
@Override
3935
public Set<Class<?>> classes() {
40-
ConfigurationBuilder config = new ConfigurationBuilder();
36+
ClassGraph graph = new ClassGraph().enableAllInfo();
37+
4138
Set<String> acceptablePackages = new HashSet<String>();
42-
Set<String> resourceClasses = new HashSet<String>();
4339

4440
Set<Class<?>> output = new HashSet<Class<?>>();
4541

@@ -63,18 +59,19 @@ public Set<Class<?>> classes() {
6359
for (String pkg : openApiConfiguration.getResourcePackages()) {
6460
if (!isIgnored(pkg)) {
6561
acceptablePackages.add(pkg);
66-
config.addUrls(ClasspathHelper.forPackage(pkg));
62+
graph.whitelistPackages(pkg);
6763
}
6864
}
6965
} else {
7066
allowAllPackages = true;
7167
}
7268

73-
config.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
74-
75-
final Reflections reflections = new Reflections(config);
7669
// this is generic, specific Jaxrs scanner will also look for @Path
77-
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(OpenAPIDefinition.class);
70+
final Set<Class<?>> classes;
71+
try (ScanResult scanResult = graph.scan()) {
72+
classes = new HashSet<>(scanResult.getClassesWithAnnotation(OpenAPIDefinition.class.getName()).loadClasses());
73+
}
74+
7875

7976
for (Class<?> cls : classes) {
8077
if (allowAllPackages) {

modules/swagger-jaxrs2/pom.xml

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,8 @@
142142
<artifactId>jackson-databind</artifactId>
143143
</dependency>
144144
<dependency>
145-
<groupId>org.reflections</groupId>
146-
<artifactId>reflections</artifactId>
147-
<exclusions>
148-
<exclusion>
149-
<groupId>org.javassist</groupId>
150-
<artifactId>javassist</artifactId>
151-
</exclusion>
152-
</exclusions>
145+
<groupId>io.github.classgraph</groupId>
146+
<artifactId>classgraph</artifactId>
153147
</dependency>
154148
<dependency>
155149
<groupId>org.javassist</groupId>

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

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
package io.swagger.v3.jaxrs2.integration;
22

3+
import io.github.classgraph.ClassGraph;
4+
import io.github.classgraph.ScanResult;
35
import io.swagger.v3.jaxrs2.integration.api.JaxrsOpenApiScanner;
46
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
57
import io.swagger.v3.oas.integration.IgnoredPackages;
68
import io.swagger.v3.oas.integration.SwaggerConfiguration;
79
import io.swagger.v3.oas.integration.api.OpenAPIConfiguration;
810
import org.apache.commons.lang3.StringUtils;
9-
import org.reflections.Reflections;
10-
import org.reflections.scanners.ResourcesScanner;
11-
import org.reflections.scanners.SubTypesScanner;
12-
import org.reflections.scanners.TypeAnnotationsScanner;
13-
import org.reflections.util.ClasspathHelper;
14-
import org.reflections.util.ConfigurationBuilder;
15-
import org.reflections.util.FilterBuilder;
1611
import org.slf4j.Logger;
1712
import org.slf4j.LoggerFactory;
1813

@@ -61,7 +56,7 @@ public Set<Class<?>> classes() {
6156
openApiConfiguration = new SwaggerConfiguration();
6257
}
6358

64-
ConfigurationBuilder config = new ConfigurationBuilder();
59+
ClassGraph graph = new ClassGraph().enableAllInfo();
6560
Set<String> acceptablePackages = new HashSet<String>();
6661
Set<Class<?>> output = new HashSet<Class<?>>();
6762

@@ -84,19 +79,17 @@ public Set<Class<?>> classes() {
8479
for (String pkg : openApiConfiguration.getResourcePackages()) {
8580
if (!isIgnored(pkg)) {
8681
acceptablePackages.add(pkg);
87-
config.addUrls(ClasspathHelper.forPackage(pkg));
82+
graph.whitelistPackages(pkg);
8883
}
8984
}
9085
} else {
9186
allowAllPackages = true;
9287
}
93-
config.filterInputsBy(new FilterBuilder().exclude(".*json").exclude(".*yaml"));
94-
//config.filterInputsBy(new FilterBuilder().exclude(".*yaml"));
95-
config.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
96-
final Reflections reflections;
97-
reflections = new Reflections(config);
98-
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.ws.rs.Path.class);
99-
classes.addAll(reflections.getTypesAnnotatedWith(OpenAPIDefinition.class));
88+
final Set<Class<?>> classes;
89+
try (ScanResult scanResult = graph.scan()) {
90+
classes = new HashSet<>(scanResult.getClassesWithAnnotation(javax.ws.rs.Path.class.getName()).loadClasses());
91+
classes.addAll(new HashSet<>(scanResult.getClassesWithAnnotation(OpenAPIDefinition.class.getName()).loadClasses()));
92+
}
10093

10194
for (Class<?> cls : classes) {
10295
if (allowAllPackages) {

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/annotations/parameters/ParametersTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.swagger.v3.jaxrs2.annotations.parameters;
22

3-
import com.google.common.collect.Sets;
4-
import io.swagger.v3.core.util.Yaml;
53
import io.swagger.v3.jaxrs2.Reader;
64
import io.swagger.v3.jaxrs2.annotations.AbstractAnnotationTest;
75
import io.swagger.v3.jaxrs2.resources.ResourceWithJacksonBean;
@@ -22,6 +20,8 @@
2220
import javax.ws.rs.POST;
2321
import javax.ws.rs.Path;
2422
import java.util.List;
23+
import java.util.stream.Collectors;
24+
import java.util.stream.Stream;
2525

2626
import static org.testng.Assert.assertEquals;
2727
import static org.testng.Assert.assertNotNull;
@@ -270,8 +270,8 @@ public void testJacksonFeatures() {
270270
OpenAPI openAPI = reader.read(ResourceWithJacksonBean.class);
271271
io.swagger.v3.oas.models.media.Schema o = openAPI.getComponents().getSchemas().get("JacksonBean");
272272

273-
assertEquals(o.getProperties().keySet(), Sets.newHashSet("identity", "bean", "code", "message",
274-
"precodesuf", "premessagesuf"));
273+
assertEquals(o.getProperties().keySet(), Stream.of("identity", "bean", "code", "message",
274+
"precodesuf", "premessagesuf").collect(Collectors.toSet()));
275275
}
276276

277277
static class SimpleOperations {

modules/swagger-maven-plugin/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@
9191
<artifactId>plexus-component-annotations</artifactId>
9292
<version>1.5.5</version>
9393
</dependency>
94+
<dependency>
95+
<groupId>com.google.guava</groupId>
96+
<artifactId>guava</artifactId>
97+
<version>23.0</version>
98+
<scope>test</scope>
99+
</dependency>
94100
<!-- Required to avoid
95101
java.lang.ClassNotFoundException: org.apache.maven.execution.MavenExecutionResult
96102
when mvn test is run.

pom.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -430,9 +430,9 @@
430430
<scope>test</scope>
431431
</dependency>
432432
<dependency>
433-
<groupId>org.reflections</groupId>
434-
<artifactId>reflections</artifactId>
435-
<version>${reflections-version}</version>
433+
<groupId>io.github.classgraph</groupId>
434+
<artifactId>classgraph</artifactId>
435+
<version>${classgraph-version}</version>
436436
</dependency>
437437
<dependency>
438438
<groupId>com.fasterxml.jackson.dataformat</groupId>
@@ -498,7 +498,7 @@
498498
<jersey2-version>2.26</jersey2-version>
499499
<jackson-version>2.9.5</jackson-version>
500500
<logback-version>1.2.3</logback-version>
501-
<reflections-version>0.9.11</reflections-version>
501+
<classgraph-version>4.6.32</classgraph-version>
502502
<guava-version>23.0</guava-version>
503503
<commons-lang-version>3.7</commons-lang-version>
504504
<commons-io-version>2.6</commons-io-version>

0 commit comments

Comments
 (0)