Skip to content

Commit 88495e7

Browse files
committed
Merge pull request #1142 from csuich2/develop_2.0
Fix for #1141 - SpecFilter.filterDefinitions() throwing NPE
2 parents 1ddf190 + 51172d8 commit 88495e7

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-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+
}

0 commit comments

Comments
 (0)