|
36 | 36 |
|
37 | 37 | public class SpecFilter { |
38 | 38 |
|
| 39 | + private OpenAPI _ctxOpenAPI; |
39 | 40 | public OpenAPI filter(OpenAPI openAPI, OpenAPISpecFilter filter, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) { |
40 | 41 | OpenAPI filteredOpenAPI = filterOpenAPI(filter, openAPI, params, cookies, headers); |
41 | 42 | if (filteredOpenAPI == null) { |
@@ -399,6 +400,26 @@ private void addPathItemSchemaRef(PathItem pathItem, Set<String> referencedDefin |
399 | 400 | } |
400 | 401 |
|
401 | 402 | 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 | + |
402 | 423 | if (response.getHeaders() != null) { |
403 | 424 | for (String keyHeaders : response.getHeaders().keySet()) { |
404 | 425 | Header header = response.getHeaders().get(keyHeaders); |
@@ -469,7 +490,7 @@ private void addComponentsSchemaRef(Components components, Set<String> reference |
469 | 490 | } |
470 | 491 |
|
471 | 492 | protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) { |
472 | | - |
| 493 | + this._ctxOpenAPI = openApi; |
473 | 494 | if (openApi == null || openApi.getComponents() == null || openApi.getComponents().getSchemas() == null) { |
474 | 495 | return openApi; |
475 | 496 | } |
@@ -499,6 +520,7 @@ protected OpenAPI removeBrokenReferenceDefinitions(OpenAPI openApi) { |
499 | 520 | .retainAll(referencedDefinitions.stream() |
500 | 521 | .map(s -> (String) RefUtils.extractSimpleName(s).getLeft()) |
501 | 522 | .collect(Collectors.toSet())); |
| 523 | + this._ctxOpenAPI = null; |
502 | 524 | return openApi; |
503 | 525 | } |
504 | 526 |
|
|
0 commit comments