From 9e37b5ac69ca56a303698e3a0bf10005db0fb2f9 Mon Sep 17 00:00:00 2001 From: jasper linschoten Date: Mon, 24 Nov 2025 14:00:02 +0100 Subject: [PATCH 1/4] fix: inline external file references in components/responses. --- .../bundler/ExamplesProcessor.java | 34 +++++++++++++------ .../oss/boat/transformers/BundlerTests.java | 1 + boat-engine/src/test/resources/logback.xml | 2 +- .../bundler-examples-test-api/openapi.yaml | 12 +++++++ 4 files changed, 38 insertions(+), 11 deletions(-) diff --git a/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java b/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java index 06209de20..2554b65b0 100644 --- a/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java +++ b/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java @@ -13,6 +13,7 @@ import io.swagger.v3.oas.models.examples.Example; import io.swagger.v3.oas.models.media.Content; import io.swagger.v3.oas.models.media.MediaType; +import io.swagger.v3.oas.models.responses.ApiResponse; import io.swagger.v3.parser.models.RefFormat; import io.swagger.v3.parser.util.RefUtils; import lombok.extern.slf4j.Slf4j; @@ -62,7 +63,15 @@ public void processExamples() { .map(e -> ExampleHolder.of(e.getKey(), e.getValue(), true)) .forEach(this::fixInlineExamples); + if (openAPI.getComponents().getResponses() != null) { + log.debug("Processing examples in component/responses"); + openAPI.getComponents().getResponses().values().forEach(response -> { + processResponse(response); + }); + } + + log.debug("Processing examples in Paths"); openAPI.getPaths() .forEach((path, pathItem) -> { log.debug("Processing examples in Path: {}", path); @@ -74,23 +83,28 @@ public void processExamples() { processMediaType(mediaType, null, false); }); } - operation.getResponses().forEach((responseCode, apiResponse) -> { - log.debug("Processing Response Body Examples for Response Code: {}", responseCode); - if (apiResponse.getContent() != null) { - apiResponse.getContent().forEach((contentType, mediaType) -> { - log.debug("Processing Response Body Examples for Content Type: {}", contentType); - processMediaType(mediaType, null, false); - }); - } + operation.getResponses().forEach((responseCode, apiResponse) -> { + log.debug("Processing Response Body Examples for: {}:{} {}", httpMethod, path, responseCode); + processResponse(apiResponse); }); }); }); } - public void processContent(Content content, String relativePath) { + public void processResponse(ApiResponse response) { + if (response.getContent() != null) { + response.getContent().forEach((contentType, mediaType) -> { + log.debug("Processing Response Body Examples for Content Type: {}", contentType); + processMediaType(mediaType, null, false); + }); + } else { + log.warn("Content is null for: {}", response); + } + } + public void processContent(Content content, String relativePath) { content.forEach((s, mediaType) -> { - log.debug("Processing Consent for: {} with relative path: {}", s, relativePath); + log.debug("Processing Content for: {} with relative path: {}", s, relativePath); processMediaType(mediaType, relativePath, true); }); diff --git a/boat-engine/src/test/java/com/backbase/oss/boat/transformers/BundlerTests.java b/boat-engine/src/test/java/com/backbase/oss/boat/transformers/BundlerTests.java index 069bd0dfb..889d1d678 100644 --- a/boat-engine/src/test/java/com/backbase/oss/boat/transformers/BundlerTests.java +++ b/boat-engine/src/test/java/com/backbase/oss/boat/transformers/BundlerTests.java @@ -84,6 +84,7 @@ void testBundleExamples() throws OpenAPILoaderException, IOException { new Bundler(input).transform(openAPI, Collections.emptyMap()); log.info(Yaml.pretty(openAPI.getComponents().getExamples())); + assertThat("Should not contain any json reference", Yaml.pretty(openAPI).indexOf(".json"), is(-1)); assertEquals(openAPIUnproccessed, openAPI); } diff --git a/boat-engine/src/test/resources/logback.xml b/boat-engine/src/test/resources/logback.xml index 5f9af4edc..7a996c26c 100644 --- a/boat-engine/src/test/resources/logback.xml +++ b/boat-engine/src/test/resources/logback.xml @@ -7,4 +7,4 @@ - \ No newline at end of file + diff --git a/boat-engine/src/test/resources/openapi/bundler-examples-test-api/openapi.yaml b/boat-engine/src/test/resources/openapi/bundler-examples-test-api/openapi.yaml index baf62393c..adbc22ab2 100644 --- a/boat-engine/src/test/resources/openapi/bundler-examples-test-api/openapi.yaml +++ b/boat-engine/src/test/resources/openapi/bundler-examples-test-api/openapi.yaml @@ -164,6 +164,8 @@ paths: $ref: '#/components/examples/example-in-components' in-component-1: $ref: '#/components/examples/example-in-components-1' + '400': + $ref: '#/components/responses/ResponseWithAFileReferenceToExample' components: schemas: UserPostRequest: @@ -182,6 +184,16 @@ components: pattern: ^[0-9].*$ minLength: 1 maxLength: 30 + responses: + ResponseWithAFileReferenceToExample: + description: A 400 response with a reference to an example file. + content: + application/json: + schema: + $ref: 'schemas/post-user-response.json' + example: + $ref: 'examples/user-post-response.json' + examples: example-in-components: $ref: './examples/user-post-response.json' From 32f2e82879ee6440b1d461c9c5640de22a6072ad Mon Sep 17 00:00:00 2001 From: jasper linschoten Date: Mon, 24 Nov 2025 14:00:29 +0100 Subject: [PATCH 2/4] chore: reinstate the parser version prop --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 85e65de12..06a555cee 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ 1.7.30 2.2.40 - 2.1.6 + 2.1.35 2.5 0.8.14 @@ -211,7 +211,7 @@ io.swagger.parser.v3 swagger-parser - 2.1.35 + ${swagger-parser.version} javax.validation From 52e337fe076fd4f55371319a43303d4d9e461453 Mon Sep 17 00:00:00 2001 From: jasper linschoten Date: Mon, 24 Nov 2025 14:02:54 +0100 Subject: [PATCH 3/4] doc: Add fix to changelog in the Readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 76db8d35b..ec07b2eb3 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ It currently consists of # Release Notes BOAT is still under development and subject to change. +## 0.17.70 +Fix: Examples of responses defined in components/responses were not inlined by the ExamplesProcessor. + ## 0.17.69 Update query parameter handling in Swift5 template (#1177) From dda06f0cdd2d2233ca82a57911789a4c4c8fa34d Mon Sep 17 00:00:00 2001 From: jasper linschoten Date: Mon, 24 Nov 2025 14:26:54 +0100 Subject: [PATCH 4/4] chore: resolve sonar complaint --- .../oss/boat/transformers/bundler/ExamplesProcessor.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java b/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java index 2554b65b0..f8dcaa7fc 100644 --- a/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java +++ b/boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java @@ -65,9 +65,7 @@ public void processExamples() { if (openAPI.getComponents().getResponses() != null) { log.debug("Processing examples in component/responses"); - openAPI.getComponents().getResponses().values().forEach(response -> { - processResponse(response); - }); + openAPI.getComponents().getResponses().values().forEach(this::processResponse); }