Skip to content

Commit 5829da3

Browse files
committed
Merge branch 'develop_2.0' into relative-refs
2 parents dacf840 + 88495e7 commit 5829da3

File tree

6 files changed

+49
-10
lines changed

6 files changed

+49
-10
lines changed

modules/swagger-core/src/main/java/io/swagger/core/filter/SpecFilter.java

100644100755
Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,21 @@ public Map<String, Model> filterDefinitions(SwaggerSpecFilter filter, Map<String
6666
for (String key : definitions.keySet()) {
6767
Model definition = definitions.get(key);
6868
Map<String, Property> clonedProperties = new LinkedHashMap<String, Property>();
69-
for (String propName : definition.getProperties().keySet()) {
70-
Property property = definition.getProperties().get(propName);
71-
if (property != null) {
72-
boolean shouldInclude = filter.isPropertyAllowed(definition, property, propName, params, cookies, headers);
73-
if (shouldInclude) {
74-
clonedProperties.put(propName, property);
69+
if (definition.getProperties() != null) {
70+
for (String propName : definition.getProperties().keySet()) {
71+
Property property = definition.getProperties().get(propName);
72+
if (property != null) {
73+
boolean shouldInclude = filter.isPropertyAllowed(definition, property, propName, params, cookies, headers);
74+
if (shouldInclude) {
75+
clonedProperties.put(propName, property);
76+
}
7577
}
7678
}
7779
}
7880
Model clonedModel = (Model) definition.clone();
79-
clonedModel.getProperties().clear();
81+
if (clonedModel.getProperties() != null) {
82+
clonedModel.getProperties().clear();
83+
}
8084
clonedModel.setProperties(clonedProperties);
8185
clonedDefinitions.put(key, clonedModel);
8286
}

modules/swagger-core/src/test/scala/filter/SpecFilterTest.scala

100644100755
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package filter
22

33
import io.swagger.core.filter.SpecFilter
4-
import io.swagger.models.Swagger
4+
import io.swagger.models.{ModelImpl, Swagger}
55
import io.swagger.util.Json
66
import matchers.SerializationMatchers._
77
import org.junit.runner.RunWith
8-
import org.scalatest.{FlatSpec, Matchers}
98
import org.scalatest.junit.JUnitRunner
9+
import org.scalatest.{FlatSpec, Matchers}
1010

1111
import scala.collection.JavaConverters._
1212
import scala.io.Source
@@ -93,4 +93,18 @@ class SpecFilterTest extends FlatSpec with Matchers {
9393
}
9494
}
9595
}
96-
}
96+
97+
it should "filter models where some fields have no properties" in {
98+
val modelName = "Array"
99+
val model = new ModelImpl().`type`(ModelImpl.OBJECT).name(modelName)
100+
101+
val swagger = new Swagger()
102+
swagger.addDefinition(modelName, model)
103+
104+
val filtered = new SpecFilter().filterDefinitions(new NoOpOperationsFilter(), swagger.getDefinitions,
105+
null, null, null)
106+
107+
if (filtered.size() != 1)
108+
fail("ModelImpl with no properties failed to filter")
109+
}
110+
}

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/utils/ReflectionUtils.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ public static Method findMethod(Method methodToFind, Class<?> cls) {
109109
}
110110
Class<?>[] pt = method.getParameterTypes();
111111
Type[] gpt = method.getGenericParameterTypes();
112+
if (pTypes.length != pt.length || gpTypes.length != gpt.length) {
113+
continue;
114+
}
112115
for (int j = 0; j < pTypes.length; j++) {
113116
Class<?> parameterType = pTypes[j];
114117
if (!(pt[j].equals(parameterType) || (!gpt[j].equals(gpTypes[j]) && pt[j].isAssignableFrom(parameterType)))) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ class ReaderTest extends FlatSpec with Matchers {
141141

142142
val methodFromInterface = swagger.getPaths().get("/pet/{petId5}").getGet
143143
methodFromInterface should not equal (null)
144+
145+
swagger.getPaths().get("/pet/{petId6}").getGet should not equal (null)
144146
}
145147

146148
it should "scan implicit params" in {

modules/swagger-jaxrs/src/test/scala/resources/DescendantResource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,9 @@ public Response overriddenMethodWithoutTypedParam(@ApiParam(value = "ID of pet t
5353
public Response methodFromInterface(@ApiParam(value = "ID of pet to return") Number petId) {
5454
return null;
5555
}
56+
57+
@Override
58+
public Response methodFromInterface(@ApiParam(value = "Method to check ArrayIndexOutOfBoundsException") @PathParam("petId6") Number petId, String str) {
59+
return null;
60+
}
5661
}

modules/swagger-jaxrs/src/test/scala/resources/InterfaceResource.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,15 @@ public interface InterfaceResource {
2121
@ApiResponse(code = 404, message = "Pet not found")})
2222
Response methodFromInterface(
2323
@ApiParam(value = "ID of pet to return") @PathParam("petId5") Number petId);
24+
25+
@GET
26+
@Path("/{petId6}")
27+
@ApiOperation(value = "Find pet by ID",
28+
notes = "Returns a single pet",
29+
response = String.class
30+
)
31+
@ApiResponses(value = {@ApiResponse(code = 400, message = "Invalid ID supplied"),
32+
@ApiResponse(code = 404, message = "Pet not found")})
33+
Response methodFromInterface(
34+
@ApiParam(value = "Method to check ArrayIndexOutOfBoundsException") @PathParam("petId6") Number petId, String str);
2435
}

0 commit comments

Comments
 (0)