Skip to content

Commit 3f51a62

Browse files
authored
Merge pull request #2131 from swagger-api/enhancement/ResolverFully-Responses
Add logic to process responses with resolvFully parsing option
2 parents 6bdd4be + 0e945bd commit 3f51a62

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

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

+24
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public ResolverFully(boolean aggregateCombinators) {
5252
private Map<String, Schema> resolvedModels = new HashMap<>();
5353
private Map<String, Example> examples;
5454
private Map<String, Parameter> parameters;
55+
private Map<String, ApiResponse> responses;
5556
private Map<String, RequestBody> requestBodies;
5657
private Map<String, Header> headers;
5758
private Map<String, Link> links;
@@ -74,6 +75,13 @@ public void resolveFully(OpenAPI openAPI) {
7475
}
7576
}
7677

78+
if (components != null && components.getResponses() != null) {
79+
responses = components.getResponses();
80+
if (responses == null) {
81+
responses = new HashMap<>();
82+
}
83+
}
84+
7785
if (components != null && components.getExamples() != null) {
7886
examples = components.getExamples();
7987
if (examples == null) {
@@ -178,8 +186,10 @@ public void resolvePath(PathItem pathItem){
178186
// responses
179187
ApiResponses responses = op.getResponses();
180188
if(responses != null) {
189+
ApiResponses resolvedResponses = new ApiResponses();
181190
for(String code : responses.keySet()) {
182191
ApiResponse response = responses.get(code);
192+
response = response.get$ref() != null ? resolveResponse(response) : response;
183193
if (response.getContent() != null) {
184194
Map<String, MediaType> content = response.getContent();
185195
for(String mediaType: content.keySet()){
@@ -205,7 +215,9 @@ public void resolvePath(PathItem pathItem){
205215
link.setValue(resolvedValue);
206216
}
207217
}
218+
resolvedResponses.addApiResponse(code, response);
208219
}
220+
op.setResponses(resolvedResponses);
209221
}
210222
}
211223
}
@@ -274,6 +286,18 @@ public RequestBody resolveRequestBody(RequestBody requestBody){
274286
return requestBody;
275287
}
276288

289+
public ApiResponse resolveResponse(ApiResponse apiResponse){
290+
RefFormat refFormat = computeRefFormat(apiResponse.get$ref());
291+
String $ref = apiResponse.get$ref();
292+
if (!isAnExternalRefFormat(refFormat)){
293+
if (responses != null && !responses.isEmpty()) {
294+
String referenceKey = computeDefinitionName($ref);
295+
return responses.getOrDefault(referenceKey, apiResponse);
296+
}
297+
}
298+
return apiResponse;
299+
}
300+
277301
public Callback resolveCallback(Callback callback){
278302
RefFormat refFormat = computeRefFormat(callback.get$ref());
279303
String $ref = callback.get$ref();

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

+12
Original file line numberDiff line numberDiff line change
@@ -3352,4 +3352,16 @@ public void testResolveOASWithFlatten(){
33523352
assertNull(openAPI.getComponents().getSchemas().get("#/components/schemas/inline_response_404"));
33533353
assertNull(openAPI.getComponents().getSchemas().get("#/components/schemas/inline_response_200"));
33543354
}
3355+
3356+
@Test(description = "responses should be inline with using resolveFully = true")
3357+
public void testResolveFullyResponses(){
3358+
ParseOptions options = new ParseOptions();
3359+
options.setResolve(true);
3360+
options.setResolveFully(true);
3361+
OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
3362+
SwaggerParseResult parseResult = openApiParser.readLocation("resolve-responses-test.yaml", null, options);
3363+
OpenAPI openAPI = parseResult.getOpenAPI();
3364+
assertNull(openAPI.getPaths().get("/users").getGet().getResponses().get("400").get$ref());
3365+
3366+
}
33553367
}

0 commit comments

Comments
 (0)