Skip to content

Commit b8dee8f

Browse files
Merge branch 'master' into set-extension-with-version
2 parents 483b923 + b636b6d commit b8dee8f

File tree

15 files changed

+656
-272
lines changed

15 files changed

+656
-272
lines changed

modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/SwaggerParseResult.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.swagger.v3.parser.core.models;
22

33
import io.swagger.v3.oas.models.OpenAPI;
4+
import java.util.Arrays;
5+
import java.util.Collections;
46
import java.util.List;
57

68
public class SwaggerParseResult {
@@ -27,4 +29,10 @@ public OpenAPI getOpenAPI() {
2729
public void setOpenAPI(OpenAPI openAPI) {
2830
this.openAPI = openAPI;
2931
}
32+
33+
public static SwaggerParseResult ofError(String message){
34+
final SwaggerParseResult result = new SwaggerParseResult();
35+
result.setMessages(Collections.singletonList(message));
36+
return result;
37+
}
3038
}

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java

Lines changed: 146 additions & 169 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.swagger.v3.parser.exception;
2+
3+
public class EncodingNotSupportedException extends RuntimeException {
4+
private static final long serialVersionUID = 3686905713011188803L;
5+
6+
public EncodingNotSupportedException(String encoding) {
7+
super(String.format("Encoding `%s` is not supported by JRE", encoding));
8+
}
9+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.swagger.v3.parser.exception;
2+
3+
/**
4+
* Happens when it's unable to read content from file or other resource
5+
*/
6+
public class ReadContentException extends RuntimeException {
7+
private static final long serialVersionUID = 4720926576862628428L;
8+
9+
public ReadContentException(String message, Throwable cause) {
10+
super(message, cause);
11+
}
12+
}

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

Lines changed: 152 additions & 84 deletions
Large diffs are not rendered by default.

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1727,10 +1727,7 @@ public Object getAnyExample(String nodeKey,ObjectNode node, String location, Par
17271727
JsonNode example = node.get(nodeKey);
17281728
if (example != null) {
17291729
if (example.getNodeType().equals(JsonNodeType.STRING)) {
1730-
String value = getString(nodeKey, node, false, location, result);
1731-
if (StringUtils.isNotBlank(value)) {
1732-
return value;
1733-
}
1730+
return getString(nodeKey, node, false, location, result);
17341731
} if (example.getNodeType().equals(JsonNodeType.NUMBER)) {
17351732
Integer integerExample = getInteger(nodeKey, node, false, location, result);
17361733
if (integerExample != null) {

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,7 @@
99
import io.swagger.v3.oas.models.examples.Example;
1010
import io.swagger.v3.oas.models.headers.Header;
1111
import io.swagger.v3.oas.models.links.Link;
12-
import io.swagger.v3.oas.models.media.ArraySchema;
13-
import io.swagger.v3.oas.models.media.ComposedSchema;
14-
import io.swagger.v3.oas.models.media.MapSchema;
15-
import io.swagger.v3.oas.models.media.MediaType;
16-
import io.swagger.v3.oas.models.media.ObjectSchema;
17-
import io.swagger.v3.oas.models.media.Schema;
12+
import io.swagger.v3.oas.models.media.*;
1813
import io.swagger.v3.oas.models.parameters.Parameter;
1914
import io.swagger.v3.oas.models.parameters.RequestBody;
2015
import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -463,6 +458,9 @@ private void aggregateSchemaCombinators(ComposedSchema sourceSchema, Schema targ
463458
}
464459
}
465460
}
461+
if (resolved.getEnum() != null ){
462+
targetSchema.setEnum(resolved.getEnum());
463+
}
466464
if (resolved.getExample() != null) {
467465
examples.add(resolved.getExample());
468466
}

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

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,101 @@ public class OpenAPIV3ParserTest {
8383
protected WireMockServer wireMockServer;
8484

8585

86+
@Test
87+
public void testIssue1367() {
88+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
89+
ParseOptions options = new ParseOptions();
90+
options.setResolve(true);
91+
options.setResolveCombinators(true);
92+
options.setResolveFully(true);
93+
options.setFlatten(true);
94+
SwaggerParseResult parseResult = openApiParser.readLocation("issue-1367.yaml", null, options);
95+
OpenAPI openAPI = parseResult.getOpenAPI();
96+
assertTrue(((Schema)openAPI.getComponents().getSchemas().get("TestDTO").getProperties().get("choice")).getEnum() != null);
97+
}
98+
99+
@Test
100+
public void testIssueFlattenAdditionalPropertiesSchemaInlineModelTrue() {
101+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
102+
ParseOptions options = new ParseOptions();
103+
options.setResolve(true);
104+
options.setFlatten(true);
105+
options.setFlattenComposedSchemas(true);
106+
options.setCamelCaseFlattenNaming(true);
107+
SwaggerParseResult parseResult = openApiParser.readLocation("additionalPropertiesFlatten.yaml", null, options);
108+
OpenAPI openAPI = parseResult.getOpenAPI();
109+
110+
//responses
111+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_map200"));
112+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_map200")).getOneOf().get(0).get$ref(),"#/components/schemas/Macaw1");
113+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_map_items404"));
114+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_map_items404")).getAnyOf().get(0).get$ref(),"#/components/schemas/Macaw2");
115+
}
116+
117+
118+
@Test
119+
public void testIssueFlattenArraySchemaItemsInlineModelFalse() {
120+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
121+
ParseOptions options = new ParseOptions();
122+
options.setResolve(true);
123+
options.setFlatten(true);
124+
options.setFlattenComposedSchemas(false);
125+
options.setCamelCaseFlattenNaming(false);
126+
SwaggerParseResult parseResult = openApiParser.readLocation("flattenArrayItems.yaml", null, options);
127+
OpenAPI openAPI = parseResult.getOpenAPI();
128+
129+
//responses
130+
assertNull(openAPI.getComponents().getSchemas().get("Inline_response_items200"));
131+
assertNull(openAPI.getComponents().getSchemas().get("Inline_response_400"));
132+
133+
//parameters
134+
assertNull(openAPI.getComponents().getSchemas().get("Inline_parameter_items_bodylimit"));
135+
assertNull(openAPI.getComponents().getSchemas().get("Pagelimit"));
136+
137+
//requestBodies
138+
assertNull(openAPI.getComponents().getSchemas().get("Body"));
139+
assertNull(openAPI.getComponents().getSchemas().get("Inline_response_items200"));
140+
141+
//components
142+
assertNull(openAPI.getComponents().getSchemas().get("Inline_array_items_ArrayTest"));
143+
144+
}
145+
146+
@Test
147+
public void testIssueFlattenArraySchemaItemsInlineModelTrue() {
148+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
149+
ParseOptions options = new ParseOptions();
150+
options.setResolve(true);
151+
options.setFlatten(true);
152+
options.setFlattenComposedSchemas(true);
153+
options.setCamelCaseFlattenNaming(true);
154+
SwaggerParseResult parseResult = openApiParser.readLocation("flattenArrayItems.yaml", null, options);
155+
OpenAPI openAPI = parseResult.getOpenAPI();
156+
157+
//responses
158+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_items200"));
159+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_items200")).getAnyOf().get(0).get$ref(),"#/components/schemas/Macaw");
160+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_400"));
161+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_400")).getAnyOf().get(0).get$ref(),"#/components/schemas/Macaw3");
162+
163+
//parameters
164+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_parameter_items_bodylimit"));
165+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_parameter_items_bodylimit")).getAnyOf().get(0).get$ref(),"#/components/schemas/Macaw1");
166+
assertNotNull(openAPI.getComponents().getSchemas().get("Pagelimit"));
167+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Pagelimit")).getOneOf().get(0).get$ref(),"#/components/schemas/Macaw2");
168+
169+
//requestBodies
170+
assertNotNull(openAPI.getComponents().getSchemas().get("Body"));
171+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Body")).getAllOf().get(1).get$ref(),"#/components/schemas/requestBodiesAllOf_2");
172+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_items200"));
173+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_body_items_applicationxml_requestBodies")).getAllOf().get(1).get$ref(),"#/components/schemas/ApplicationxmlAllOf_2");
174+
175+
//components
176+
assertNotNull(openAPI.getComponents().getSchemas().get("Inline_array_items_ArrayTest"));
177+
assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_array_items_ArrayTest")).getOneOf().get(1).get$ref(),"#/components/schemas/ArrayTestOneOf_2");
178+
}
179+
180+
86181
@Test
87182
public void testCamelCaseFlattenNamingFalse() {
88183
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
@@ -1924,7 +2019,7 @@ public void readingSpecNodeShouldNotOverQuotingStringExample() throws Exception
19242019
String yaml = Files.readFile(new File("src/test/resources/over-quoted-example.yaml"));
19252020
JsonNode rootNode = Yaml.mapper().readValue(yaml, JsonNode.class);
19262021
OpenAPIV3Parser parser = new OpenAPIV3Parser();
1927-
OpenAPI openAPI = (parser.readWithInfo(null, rootNode)).getOpenAPI();
2022+
OpenAPI openAPI = (parser.parseJsonNode(null, rootNode)).getOpenAPI();
19282023

19292024
Map<String, Schema> definitions = openAPI.getComponents().getSchemas();
19302025
assertEquals("NoQuotePlease", definitions.get("CustomerType").getExample());
@@ -2326,6 +2421,26 @@ public void testIssue1335() {
23262421
assertNotNull(result.getOpenAPI().getComponents().getExamples().get("ex1"));
23272422
}
23282423

2424+
@Test
2425+
public void testEmptyQueryParameterExample() {
2426+
final ParseOptions options = new ParseOptions();
2427+
options.setResolve(true);
2428+
2429+
SwaggerParseResult result = new OpenAPIV3Parser()
2430+
.readLocation("src/test/resources/emptyQueryParameter.yaml", null, options);
2431+
assertEquals("", result.getOpenAPI().getPaths().get("/foo").getGet().getParameters().get(0).getExample());
2432+
}
2433+
2434+
@Test
2435+
public void testBlankQueryParameterExample() {
2436+
final ParseOptions options = new ParseOptions();
2437+
options.setResolve(true);
2438+
2439+
SwaggerParseResult result = new OpenAPIV3Parser()
2440+
.readLocation("src/test/resources/blankQueryParameter.yaml", null, options);
2441+
assertEquals(" ", result.getOpenAPI().getPaths().get("/foo").getGet().getParameters().get(0).getExample());
2442+
}
2443+
23292444
@Test
23302445
public void testRegressionIssue1236() {
23312446
final ParseOptions options = new ParseOptions();

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/InlineModelResolverTest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,6 @@ public void testSkipInlineMatchesFalse() {
432432
final OpenAPI openAPI = new OpenAPI();
433433

434434
final InlineModelResolver inlineModelResolver = new InlineModelResolver();
435-
inlineModelResolver.setSkipMatches(false);
436435

437436
final Schema operationAlphaInAsset = new ObjectSchema();
438437
operationAlphaInAsset.setTitle("operationAlphaInAsset");
@@ -484,8 +483,7 @@ public void testSkipInlineMatchesFalse() {
484483
public void testSkipInlineMatchesTrue() {
485484
final OpenAPI openAPI = new OpenAPI();
486485

487-
final InlineModelResolver inlineModelResolver = new InlineModelResolver();
488-
inlineModelResolver.setSkipMatches(true);
486+
final InlineModelResolver inlineModelResolver = new InlineModelResolver(false, false, true);
489487

490488
final Schema operationAlphaInAsset = new ObjectSchema();
491489
operationAlphaInAsset.setTitle("operationAlphaInAsset");
@@ -940,13 +938,10 @@ public void testInlineMapResponseWithObjectSchema() throws Exception {
940938

941939
ApiResponses apiResponses = new ApiResponses().addApiResponse("200",apiResponse);
942940

943-
944-
945941
openAPI.path("/foo/baz", new PathItem()
946942
.get(new Operation()
947943
.responses(apiResponses)));
948944

949-
950945
new InlineModelResolver().flatten(openAPI);
951946

952947
ApiResponse response = openAPI.getPaths().get("/foo/baz").getGet().getResponses().get("200");
@@ -956,7 +951,7 @@ public void testInlineMapResponseWithObjectSchema() throws Exception {
956951
assertEquals("ext-prop", property.getExtensions().get("x-ext"));
957952
assertTrue(openAPI.getComponents().getSchemas().size() == 1);
958953

959-
Schema inline = openAPI.getComponents().getSchemas().get("inline_response_200");
954+
Schema inline = openAPI.getComponents().getSchemas().get("inline_response_map200");
960955
assertTrue(inline instanceof Schema);
961956
assertNotNull(inline.getProperties().get("name"));
962957
assertTrue(inline.getProperties().get("name") instanceof StringSchema);

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2384,7 +2384,7 @@ public void readContentObject(JsonNode rootNode) throws Exception {
23842384
Assert.assertEquals(petByStatusEndpoint.getGet().getParameters().get(0).getContent().get("text/plain").getExamples().get("list").getSummary(),"List of names");
23852385
Assert.assertEquals(petByStatusEndpoint.getGet().getParameters().get(0).getContent().get("text/plain").getExamples().get("list").getValue(),"Bob,Diane,Mary,Bill");
23862386
Assert.assertEquals(petByStatusEndpoint.getGet().getParameters().get(0).getContent().get("text/plain").getExamples().get("empty").getSummary(),"Empty");
2387-
Assert.assertNull(petByStatusEndpoint.getGet().getParameters().get(0).getContent().get("text/plain").getExamples().get("empty").getValue());
2387+
Assert.assertEquals(petByStatusEndpoint.getGet().getParameters().get(0).getContent().get("text/plain").getExamples().get("empty").getValue(),"");
23882388

23892389
PathItem petEndpoint = paths.get("/pet");
23902390
Assert.assertNotNull(petEndpoint.getPut());

0 commit comments

Comments
 (0)