Skip to content

Commit e6ecbcd

Browse files
committed
Fix for issue 1608
1 parent b65db7a commit e6ecbcd

File tree

3 files changed

+105
-12
lines changed

3 files changed

+105
-12
lines changed

modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import io.swagger.v3.parser.core.models.AuthorizationValue;
6060
import io.swagger.v3.parser.core.models.ParseOptions;
6161
import io.swagger.v3.parser.core.models.SwaggerParseResult;
62+
import io.swagger.v3.parser.util.ResolverFully;
6263
import io.swagger.v3.parser.util.SchemaTypeUtil;
6364
import org.apache.commons.lang3.StringUtils;
6465

@@ -108,19 +109,25 @@ public SwaggerParseResult readContents(String swaggerAsString, List<Authorizatio
108109

109110
private SwaggerParseResult readResult(SwaggerDeserializationResult result, List<AuthorizationValue> auth, ParseOptions options) {
110111
SwaggerParseResult out = convert(result);
111-
if (out != null && options != null && options.isFlatten()) {
112-
try {
113-
SwaggerParseResult resultV3 = new OpenAPIV3Parser().readContents(Yaml.pretty(out.getOpenAPI()), auth, options);
114-
out.setOpenAPI(resultV3.getOpenAPI());
115-
if (out.getMessages() != null) {
116-
out.getMessages().addAll(resultV3.getMessages());
117-
out.messages(out.getMessages().stream()
118-
.distinct()
119-
.collect(Collectors.toList()));
120-
} else {
121-
out.messages(resultV3.getMessages());
112+
if (out != null && options != null) {
113+
if (options.isResolveFully()) {
114+
new ResolverFully(options.isResolveCombinators()).resolveFully(out.getOpenAPI());
115+
}
116+
if (options.isFlatten()) {
117+
try {
118+
SwaggerParseResult resultV3 = new OpenAPIV3Parser().readContents(Yaml.pretty(out.getOpenAPI()), auth, options);
119+
out.setOpenAPI(resultV3.getOpenAPI());
120+
if (out.getMessages() != null) {
121+
out.getMessages().addAll(resultV3.getMessages());
122+
out.messages(out.getMessages().stream()
123+
.distinct()
124+
.collect(Collectors.toList()));
125+
} else {
126+
out.messages(resultV3.getMessages());
127+
}
128+
} catch (Exception ignore) {
122129
}
123-
} catch (Exception ignore) {}
130+
}
124131
}
125132
return out;
126133
}

modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@
3030

3131
public class OpenAPIParserTest {
3232

33+
@Test
34+
public void testIssue1608(){
35+
ParseOptions options = new ParseOptions();
36+
options.setResolveFully(true);
37+
OpenAPIParser openAPIParser = new OpenAPIParser();
38+
SwaggerParseResult swaggerParseResult = openAPIParser.readLocation("issue1608.json", null, options);
39+
Schema schema = swaggerParseResult.getOpenAPI().getPaths().get("/pet").getPut().getRequestBody().getContent().get("application/json").getSchema();
40+
assertEquals(schema.getRequired().size(), 1);
41+
}
42+
3343
@Test
3444
public void testIssue1143(){
3545
ParseOptions options = new ParseOptions();
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
{
2+
"swagger": "2.0",
3+
"info": {
4+
"description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.",
5+
"version": "1.0.5",
6+
"title": "Swagger Petstore",
7+
"termsOfService": "http://swagger.io/terms/",
8+
"contact": {
9+
"email": "[email protected]"
10+
},
11+
"license": {
12+
"name": "Apache 2.0",
13+
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
14+
}
15+
},
16+
"host": "petstore.swagger.io",
17+
"basePath": "/v2",
18+
"schemes": [
19+
"https",
20+
"http"
21+
],
22+
"paths": {
23+
"/pet": {
24+
"put": {
25+
"summary": "Update an existing pet",
26+
"description": "",
27+
"operationId": "updatePet",
28+
"consumes": [
29+
"application/json",
30+
"application/xml"
31+
],
32+
"produces": [
33+
"application/json",
34+
"application/xml"
35+
],
36+
"parameters": [
37+
{
38+
"in": "body",
39+
"name": "body",
40+
"description": "Pet object that needs to be added to the store",
41+
"required": true,
42+
"schema": {
43+
"$ref": "#/definitions/Pet"
44+
}
45+
}
46+
],
47+
"responses": {
48+
"400": {
49+
"description": "Invalid ID supplied"
50+
}
51+
}
52+
}
53+
}
54+
},
55+
"definitions": {
56+
"Pet": {
57+
"type": "object",
58+
"required": [
59+
"name"
60+
],
61+
"properties": {
62+
"name": {
63+
"type": "string",
64+
"example": "doggie"
65+
}
66+
},
67+
"xml": {
68+
"name": "Pet"
69+
}
70+
}
71+
},
72+
"externalDocs": {
73+
"description": "Find out more about Swagger",
74+
"url": "http://swagger.io"
75+
}
76+
}

0 commit comments

Comments
 (0)