diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
index 03f8b0a1f0..30b6ec8626 100644
--- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
+++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java
@@ -26,6 +26,7 @@
import io.swagger.v3.oas.models.media.Encoding;
import io.swagger.v3.oas.models.media.MapSchema;
import io.swagger.v3.oas.models.media.MediaType;
+import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.media.XML;
import io.swagger.v3.oas.models.security.OAuthFlow;
@@ -50,9 +51,7 @@
import io.swagger.v3.oas.models.servers.ServerVariables;
import io.swagger.v3.parser.core.models.SwaggerParseResult;
import io.swagger.v3.core.util.Json;
-import io.swagger.v3.core.util.RefUtils;
-import io.swagger.v3.parser.models.RefFormat;
import org.apache.commons.lang3.StringUtils;
import static io.swagger.v3.core.util.RefUtils.extractSimpleName;
@@ -2034,6 +2033,7 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
ArrayNode anyOfArray = getArray("anyOf", node, false, location, result);
ObjectNode itemsNode = getObject("items", node, false, location, result);
ObjectNode additionalPropertiesNode = getObject("additionalProperties", node, false, location, result);
+ Boolean additionalPropertiesBoolean = getBoolean("additionalProperties", node, false, location, result);
if((allOfArray != null )||(anyOfArray != null)|| (oneOfArray != null)) {
@@ -2085,7 +2085,7 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
schema = items;
}
- if(additionalPropertiesNode != null){
+ if(additionalPropertiesNode != null) {
MapSchema mapSchema = new MapSchema();
if (additionalPropertiesNode.getNodeType().equals(JsonNodeType.OBJECT)) {
ObjectNode additionalPropertiesObj = getObject("additionalProperties", node, false, location, result);
@@ -2093,19 +2093,20 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
Schema additionalProperties = getSchema(additionalPropertiesObj, location, result);
if (additionalProperties != null) {
mapSchema.setAdditionalProperties(additionalProperties);
+ schema = mapSchema;
}
}
- } else if (additionalPropertiesNode.getNodeType().equals(JsonNodeType.BOOLEAN)) {
- Boolean additionalProperties = getBoolean("additionalProperties", node, false, location, result);
- if (additionalProperties != null) {
- if (additionalProperties == true) {
- mapSchema.setAdditionalProperties(additionalProperties);
- }else{
- schema.setAdditionalProperties(additionalProperties);
- }
- }
}
- schema = mapSchema;
+ } else if(additionalPropertiesBoolean != null){
+ MapSchema mapSchema = new MapSchema();
+ if (additionalPropertiesBoolean) {
+ mapSchema.setAdditionalProperties(additionalPropertiesBoolean);
+ schema = mapSchema;
+ }else{
+ ObjectSchema objectSchema = new ObjectSchema();
+ objectSchema.setAdditionalProperties(additionalPropertiesBoolean);
+ schema = objectSchema;
+ }
}
diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
index cf914dc8c1..c5cd8d1d93 100644
--- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
+++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
@@ -75,11 +75,42 @@ public void testIssue1071() {
OpenAPI apispec = parseResult.getOpenAPI();
assertNotNull(apispec);
Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
- System.out.println(test.getClass());
assertTrue(test instanceof MapSchema);
}
+ @Test
+ public void testIssue1071True() {
+
+ ParseOptions options = new ParseOptions();
+ options.setResolve(true);
+
+ SwaggerParseResult parseResult = new OpenAPIV3Parser().readLocation("issue-1071-true.yaml", null, options);
+ OpenAPI apispec = parseResult.getOpenAPI();
+ assertNotNull(apispec);
+ Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
+ assertTrue(test instanceof MapSchema);
+ assertTrue(test.getAdditionalProperties() instanceof Boolean);
+ assertTrue((Boolean)test.getAdditionalProperties());
+
+ }
+
+ @Test
+ public void testIssue1071False() {
+
+ ParseOptions options = new ParseOptions();
+ options.setResolve(true);
+
+ SwaggerParseResult parseResult = new OpenAPIV3Parser().readLocation("issue-1071-false.yaml", null, options);
+ OpenAPI apispec = parseResult.getOpenAPI();
+ assertNotNull(apispec);
+ Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
+ assertTrue(test instanceof ObjectSchema);
+ assertTrue(test.getAdditionalProperties() instanceof Boolean);
+ assertFalse((Boolean)test.getAdditionalProperties());
+
+ }
+
@Test
public void testIssue1039() {
diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1071-false.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1071-false.yaml
new file mode 100644
index 0000000000..61234fcca1
--- /dev/null
+++ b/modules/swagger-parser-v3/src/test/resources/issue-1071-false.yaml
@@ -0,0 +1,28 @@
+openapi: "3.0.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
+ termsOfService: http://swagger.io/terms/
+ contact:
+ name: Swagger API Team
+ email: apiteam@swagger.io
+ url: http://swagger.io
+ license:
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
+servers:
+ - url: http://petstore.swagger.io/api
+paths:
+ '/mapschema':
+ get:
+ description: MapSchema
+ operationId: MapSchema
+ responses:
+ '200':
+ description: Successful response.
+ content:
+ application/json:
+ schema:
+ type: object
+ additionalProperties: false
\ No newline at end of file
diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1071-true.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1071-true.yaml
new file mode 100644
index 0000000000..37b330a74e
--- /dev/null
+++ b/modules/swagger-parser-v3/src/test/resources/issue-1071-true.yaml
@@ -0,0 +1,28 @@
+openapi: "3.0.0"
+info:
+ version: 1.0.0
+ title: Swagger Petstore
+ description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
+ termsOfService: http://swagger.io/terms/
+ contact:
+ name: Swagger API Team
+ email: apiteam@swagger.io
+ url: http://swagger.io
+ license:
+ name: Apache 2.0
+ url: https://www.apache.org/licenses/LICENSE-2.0.html
+servers:
+ - url: http://petstore.swagger.io/api
+paths:
+ '/mapschema':
+ get:
+ description: MapSchema
+ operationId: MapSchema
+ responses:
+ '200':
+ description: Successful response.
+ content:
+ application/json:
+ schema:
+ type: object
+ additionalProperties: true
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 92ac86ff3f..1e296b70d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -288,7 +288,7 @@
1.0.45-SNAPSHOT
2.4
1.6.3
- 2.0.7
+ 2.0.8-SNAPSHOT
4.8.1
6.14.2
1.35