Skip to content

Commit 9e2cde1

Browse files
kuntal1461ewaostrowska
authored andcommitted
fix(core): follow ApiResponse $ref in SpecFilter to avoid pruning schemas
Fixes #4960
1 parent 99ba4cd commit 9e2cde1

File tree

1 file changed

+23
-1
lines changed
  • modules/swagger-core/src/main/java/io/swagger/v3/core/filter

1 file changed

+23
-1
lines changed

modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
public class SpecFilter {
3838

39+
private OpenAPI _ctxOpenAPI;
3940
public OpenAPI filter(OpenAPI openAPI, OpenAPISpecFilter filter, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
4041
OpenAPI filteredOpenAPI = filterOpenAPI(filter, openAPI, params, cookies, headers);
4142
if (filteredOpenAPI == null) {
@@ -399,6 +400,26 @@ private void addPathItemSchemaRef(PathItem pathItem, Set<String> referencedDefin
399400
}
400401

401402
private void addApiResponseSchemaRef(ApiResponse response, Set<String> referencedDefinitions) {
403+
if (response == null) return;
404+
String respRef = response.get$ref();
405+
if (respRef != null && !respRef.isEmpty() && _ctxOpenAPI != null) {
406+
String name = (String) RefUtils.extractSimpleName(respRef).getLeft();
407+
referencedDefinitions.add(name);
408+
Components comps = _ctxOpenAPI.getComponents();
409+
ApiResponse resolved = (comps != null && comps.getResponses() != null)
410+
? comps.getResponses().get(name)
411+
: null;
412+
if (resolved != null) {
413+
if (resolved.getHeaders() != null) {
414+
for (Header h : resolved.getHeaders().values()) {
415+
addHeaderSchemaRef(h, referencedDefinitions);
416+
}
417+
}
418+
addContentSchemaRef(resolved.getContent(), referencedDefinitions);
419+
}
420+
return;
421+
}
422+
402423
if (response.getHeaders() != null) {
403424
for (String keyHeaders : response.getHeaders().keySet()) {
404425
Header header = response.getHeaders().get(keyHeaders);
@@ -469,7 +490,7 @@ private void addComponentsSchemaRef(Components components, Set<String> reference
469490
}
470491

471492
protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
472-
493+
this._ctxOpenAPI = openApi;
473494
if (openApi == null || openApi.getComponents() == null || openApi.getComponents().getSchemas() == null) {
474495
return openApi;
475496
}
@@ -499,6 +520,7 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) {
499520
.retainAll(referencedDefinitions.stream()
500521
.map(s -> (String) RefUtils.extractSimpleName(s).getLeft())
501522
.collect(Collectors.toSet()));
523+
this._ctxOpenAPI = null;
502524
return openApi;
503525
}
504526

0 commit comments

Comments
 (0)