Skip to content

Commit 1ae1863

Browse files
committed
fix for #1098, #1011, all / recursive scanning of packages
1 parent 3f75886 commit 1ae1863

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/config/BeanConfig.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ public Set<Class<?>> classes() {
166166
ConfigurationBuilder config = new ConfigurationBuilder();
167167
Set<String> acceptablePackages = new HashSet<String>();
168168

169+
boolean allowAllPackages = false;
170+
169171
if(resourcePackage != null && !"".equals(resourcePackage)) {
170172
String[] parts = resourcePackage.split(",");
171173
for(String pkg : parts) {
@@ -175,6 +177,9 @@ public Set<Class<?>> classes() {
175177
}
176178
}
177179
}
180+
else {
181+
allowAllPackages = true;
182+
}
178183

179184
config.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new SubTypesScanner());
180185

@@ -198,13 +203,21 @@ public Set<Class<?>> classes() {
198203

199204
reader.getSwagger().setInfo(info);
200205
final Reflections reflections = new Reflections(config);
201-
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Api.class);
206+
Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Api.class);
202207
classes.addAll(reflections.getTypesAnnotatedWith(javax.ws.rs.Path.class));
203208

204209
Set<Class<?>> output = new HashSet<Class<?>>();
205210
for(Class<?> cls : classes) {
206-
if(acceptablePackages.contains(cls.getPackage().getName()))
211+
if(allowAllPackages) {
207212
output.add(cls);
213+
}
214+
else {
215+
for(String pkg : acceptablePackages) {
216+
if(cls.getPackage().getName().startsWith(pkg)) {
217+
output.add(cls);
218+
}
219+
}
220+
}
208221
}
209222
return output;
210223
}

modules/swagger-jaxrs/src/test/scala/BeanConfigTest.scala

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,26 @@ class BeanConfigTest extends FlatSpec with Matchers {
3333
val schemes = swagger.getSchemes()
3434
schemes.asScala.toSet should be (Set(Scheme.HTTP, Scheme.HTTPS))
3535
}
36+
37+
it should "deep scan packages per #1011" in {
38+
val bc = new BeanConfig()
39+
bc.setResourcePackage("com.my,org.my")
40+
bc.setSchemes(List("http", "https").toArray);
41+
bc.setHost("petstore.swagger.io")
42+
bc.setBasePath("/api")
43+
bc.setTitle("Petstore Sample API")
44+
bc.setDescription("A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification")
45+
bc.setTermsOfServiceUrl("http://swagger.io/terms/")
46+
bc.setContact("Swagger API Team")
47+
bc.setLicense("MIT")
48+
bc.setLicenseUrl("http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT")
49+
bc.setScan(true)
50+
51+
val swagger = bc.getSwagger()
52+
swagger should not be (null)
53+
val keys = swagger.getPaths().keySet()
54+
keys.asScala.toSet should be (Set("/packageA", "/packageB"))
55+
val schemes = swagger.getSchemes()
56+
schemes.asScala.toSet should be (Set(Scheme.HTTP, Scheme.HTTPS))
57+
}
3658
}

0 commit comments

Comments
 (0)