Skip to content

Commit d4ca8fc

Browse files
authored
Merge pull request #1082 from swagger-api/bool-additional-props
deserialize into MapSchema for bool additionalProperties
2 parents 0a4ed0b + ae3993a commit d4ca8fc

File tree

5 files changed

+103
-15
lines changed

5 files changed

+103
-15
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.swagger.v3.oas.models.media.Encoding;
2727
import io.swagger.v3.oas.models.media.MapSchema;
2828
import io.swagger.v3.oas.models.media.MediaType;
29+
import io.swagger.v3.oas.models.media.ObjectSchema;
2930
import io.swagger.v3.oas.models.media.Schema;
3031
import io.swagger.v3.oas.models.media.XML;
3132
import io.swagger.v3.oas.models.security.OAuthFlow;
@@ -50,9 +51,7 @@
5051
import io.swagger.v3.oas.models.servers.ServerVariables;
5152
import io.swagger.v3.parser.core.models.SwaggerParseResult;
5253
import io.swagger.v3.core.util.Json;
53-
import io.swagger.v3.core.util.RefUtils;
5454

55-
import io.swagger.v3.parser.models.RefFormat;
5655
import org.apache.commons.lang3.StringUtils;
5756

5857
import static io.swagger.v3.core.util.RefUtils.extractSimpleName;
@@ -2034,6 +2033,7 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
20342033
ArrayNode anyOfArray = getArray("anyOf", node, false, location, result);
20352034
ObjectNode itemsNode = getObject("items", node, false, location, result);
20362035
ObjectNode additionalPropertiesNode = getObject("additionalProperties", node, false, location, result);
2036+
Boolean additionalPropertiesBoolean = getBoolean("additionalProperties", node, false, location, result);
20372037

20382038

20392039
if((allOfArray != null )||(anyOfArray != null)|| (oneOfArray != null)) {
@@ -2085,27 +2085,28 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
20852085
schema = items;
20862086
}
20872087

2088-
if(additionalPropertiesNode != null){
2088+
if(additionalPropertiesNode != null) {
20892089
MapSchema mapSchema = new MapSchema();
20902090
if (additionalPropertiesNode.getNodeType().equals(JsonNodeType.OBJECT)) {
20912091
ObjectNode additionalPropertiesObj = getObject("additionalProperties", node, false, location, result);
20922092
if (additionalPropertiesObj != null) {
20932093
Schema additionalProperties = getSchema(additionalPropertiesObj, location, result);
20942094
if (additionalProperties != null) {
20952095
mapSchema.setAdditionalProperties(additionalProperties);
2096+
schema = mapSchema;
20962097
}
20972098
}
2098-
} else if (additionalPropertiesNode.getNodeType().equals(JsonNodeType.BOOLEAN)) {
2099-
Boolean additionalProperties = getBoolean("additionalProperties", node, false, location, result);
2100-
if (additionalProperties != null) {
2101-
if (additionalProperties == true) {
2102-
mapSchema.setAdditionalProperties(additionalProperties);
2103-
}else{
2104-
schema.setAdditionalProperties(additionalProperties);
2105-
}
2106-
}
21072099
}
2108-
schema = mapSchema;
2100+
} else if(additionalPropertiesBoolean != null){
2101+
MapSchema mapSchema = new MapSchema();
2102+
if (additionalPropertiesBoolean) {
2103+
mapSchema.setAdditionalProperties(additionalPropertiesBoolean);
2104+
schema = mapSchema;
2105+
}else{
2106+
ObjectSchema objectSchema = new ObjectSchema();
2107+
objectSchema.setAdditionalProperties(additionalPropertiesBoolean);
2108+
schema = objectSchema;
2109+
}
21092110
}
21102111

21112112

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,42 @@ public void testIssue1071() {
7575
OpenAPI apispec = parseResult.getOpenAPI();
7676
assertNotNull(apispec);
7777
Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
78-
System.out.println(test.getClass());
7978
assertTrue(test instanceof MapSchema);
8079

8180
}
8281

82+
@Test
83+
public void testIssue1071True() {
84+
85+
ParseOptions options = new ParseOptions();
86+
options.setResolve(true);
87+
88+
SwaggerParseResult parseResult = new OpenAPIV3Parser().readLocation("issue-1071-true.yaml", null, options);
89+
OpenAPI apispec = parseResult.getOpenAPI();
90+
assertNotNull(apispec);
91+
Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
92+
assertTrue(test instanceof MapSchema);
93+
assertTrue(test.getAdditionalProperties() instanceof Boolean);
94+
assertTrue((Boolean)test.getAdditionalProperties());
95+
96+
}
97+
98+
@Test
99+
public void testIssue1071False() {
100+
101+
ParseOptions options = new ParseOptions();
102+
options.setResolve(true);
103+
104+
SwaggerParseResult parseResult = new OpenAPIV3Parser().readLocation("issue-1071-false.yaml", null, options);
105+
OpenAPI apispec = parseResult.getOpenAPI();
106+
assertNotNull(apispec);
107+
Schema test = apispec.getPaths().get("/mapschema").getGet().getResponses().get("200").getContent().get("application/json").getSchema();
108+
assertTrue(test instanceof ObjectSchema);
109+
assertTrue(test.getAdditionalProperties() instanceof Boolean);
110+
assertFalse((Boolean)test.getAdditionalProperties());
111+
112+
}
113+
83114
@Test
84115
public void testIssue1039() {
85116

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
openapi: "3.0.0"
2+
info:
3+
version: 1.0.0
4+
title: Swagger Petstore
5+
description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
6+
termsOfService: http://swagger.io/terms/
7+
contact:
8+
name: Swagger API Team
9+
10+
url: http://swagger.io
11+
license:
12+
name: Apache 2.0
13+
url: https://www.apache.org/licenses/LICENSE-2.0.html
14+
servers:
15+
- url: http://petstore.swagger.io/api
16+
paths:
17+
'/mapschema':
18+
get:
19+
description: MapSchema
20+
operationId: MapSchema
21+
responses:
22+
'200':
23+
description: Successful response.
24+
content:
25+
application/json:
26+
schema:
27+
type: object
28+
additionalProperties: false
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
openapi: "3.0.0"
2+
info:
3+
version: 1.0.0
4+
title: Swagger Petstore
5+
description: A sample API that uses a petstore as an example to demonstrate features in the OpenAPI 3.0 specification
6+
termsOfService: http://swagger.io/terms/
7+
contact:
8+
name: Swagger API Team
9+
10+
url: http://swagger.io
11+
license:
12+
name: Apache 2.0
13+
url: https://www.apache.org/licenses/LICENSE-2.0.html
14+
servers:
15+
- url: http://petstore.swagger.io/api
16+
paths:
17+
'/mapschema':
18+
get:
19+
description: MapSchema
20+
operationId: MapSchema
21+
responses:
22+
'200':
23+
description: Successful response.
24+
content:
25+
application/json:
26+
schema:
27+
type: object
28+
additionalProperties: true

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@
288288
<swagger-parser-v2-version>1.0.45-SNAPSHOT</swagger-parser-v2-version>
289289
<commons-io-version>2.4</commons-io-version>
290290
<slf4j-version>1.6.3</slf4j-version>
291-
<swagger-core-version>2.0.7</swagger-core-version>
291+
<swagger-core-version>2.0.8-SNAPSHOT</swagger-core-version>
292292
<junit-version>4.8.1</junit-version>
293293
<testng-version>6.14.2</testng-version>
294294
<jmockit-version>1.35</jmockit-version>

0 commit comments

Comments
 (0)