Skip to content

Commit ec44d8e

Browse files
authored
fix: resolve component responses examples
* fix: inline external file references in components/responses. * chore: reinstate the parser version prop * doc: Add fix to changelog in the Readme * chore: resolve sonar complaint
1 parent 742ab33 commit ec44d8e

File tree

6 files changed

+41
-13
lines changed

6 files changed

+41
-13
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ It currently consists of
1616
# Release Notes
1717
BOAT is still under development and subject to change.
1818

19+
## 0.17.70
20+
Fix: Examples of responses defined in components/responses were not inlined by the ExamplesProcessor.
21+
1922
## 0.17.69
2023
Update query parameter handling in Swift5 template (#1177)
2124

boat-engine/src/main/java/com/backbase/oss/boat/transformers/bundler/ExamplesProcessor.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.swagger.v3.oas.models.examples.Example;
1414
import io.swagger.v3.oas.models.media.Content;
1515
import io.swagger.v3.oas.models.media.MediaType;
16+
import io.swagger.v3.oas.models.responses.ApiResponse;
1617
import io.swagger.v3.parser.models.RefFormat;
1718
import io.swagger.v3.parser.util.RefUtils;
1819
import lombok.extern.slf4j.Slf4j;
@@ -62,7 +63,13 @@ public void processExamples() {
6263
.map(e -> ExampleHolder.of(e.getKey(), e.getValue(), true))
6364
.forEach(this::fixInlineExamples);
6465

66+
if (openAPI.getComponents().getResponses() != null) {
67+
log.debug("Processing examples in component/responses");
68+
openAPI.getComponents().getResponses().values().forEach(this::processResponse);
69+
}
70+
6571

72+
log.debug("Processing examples in Paths");
6673
openAPI.getPaths()
6774
.forEach((path, pathItem) -> {
6875
log.debug("Processing examples in Path: {}", path);
@@ -74,23 +81,28 @@ public void processExamples() {
7481
processMediaType(mediaType, null, false);
7582
});
7683
}
77-
operation.getResponses().forEach((responseCode, apiResponse) -> {
78-
log.debug("Processing Response Body Examples for Response Code: {}", responseCode);
79-
if (apiResponse.getContent() != null) {
80-
apiResponse.getContent().forEach((contentType, mediaType) -> {
81-
log.debug("Processing Response Body Examples for Content Type: {}", contentType);
82-
processMediaType(mediaType, null, false);
83-
});
84-
}
84+
operation.getResponses().forEach((responseCode, apiResponse) -> {
85+
log.debug("Processing Response Body Examples for: {}:{} {}", httpMethod, path, responseCode);
86+
processResponse(apiResponse);
8587
});
8688
});
8789
});
8890
}
8991

90-
public void processContent(Content content, String relativePath) {
92+
public void processResponse(ApiResponse response) {
93+
if (response.getContent() != null) {
94+
response.getContent().forEach((contentType, mediaType) -> {
95+
log.debug("Processing Response Body Examples for Content Type: {}", contentType);
96+
processMediaType(mediaType, null, false);
97+
});
98+
} else {
99+
log.warn("Content is null for: {}", response);
100+
}
101+
}
91102

103+
public void processContent(Content content, String relativePath) {
92104
content.forEach((s, mediaType) -> {
93-
log.debug("Processing Consent for: {} with relative path: {}", s, relativePath);
105+
log.debug("Processing Content for: {} with relative path: {}", s, relativePath);
94106
processMediaType(mediaType, relativePath, true);
95107
});
96108

boat-engine/src/test/java/com/backbase/oss/boat/transformers/BundlerTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ void testBundleExamples() throws OpenAPILoaderException, IOException {
8484

8585
new Bundler(input).transform(openAPI, Collections.emptyMap());
8686
log.info(Yaml.pretty(openAPI.getComponents().getExamples()));
87+
assertThat("Should not contain any json reference", Yaml.pretty(openAPI).indexOf(".json"), is(-1));
8788
assertEquals(openAPIUnproccessed, openAPI);
8889
}
8990

boat-engine/src/test/resources/logback.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
<root level="INFO">
88
<appender-ref ref="COLOR"/>
99
</root>
10-
</configuration>
10+
</configuration>

boat-engine/src/test/resources/openapi/bundler-examples-test-api/openapi.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ paths:
164164
$ref: '#/components/examples/example-in-components'
165165
in-component-1:
166166
$ref: '#/components/examples/example-in-components-1'
167+
'400':
168+
$ref: '#/components/responses/ResponseWithAFileReferenceToExample'
167169
components:
168170
schemas:
169171
UserPostRequest:
@@ -182,6 +184,16 @@ components:
182184
pattern: ^[0-9].*$
183185
minLength: 1
184186
maxLength: 30
187+
responses:
188+
ResponseWithAFileReferenceToExample:
189+
description: A 400 response with a reference to an example file.
190+
content:
191+
application/json:
192+
schema:
193+
$ref: 'schemas/post-user-response.json'
194+
example:
195+
$ref: 'examples/user-post-response.json'
196+
185197
examples:
186198
example-in-components:
187199
$ref: './examples/user-post-response.json'

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
<slf4j.version>1.7.30</slf4j.version>
5656
<swagger-core.version>2.2.40</swagger-core.version>
57-
<swagger-parser.version>2.1.6</swagger-parser.version>
57+
<swagger-parser.version>2.1.35</swagger-parser.version>
5858
<snakeyaml.version>2.5</snakeyaml.version>
5959
<jacoco-maven-plugin.version>0.8.14</jacoco-maven-plugin.version>
6060
</properties>
@@ -211,7 +211,7 @@
211211
<dependency>
212212
<groupId>io.swagger.parser.v3</groupId>
213213
<artifactId>swagger-parser</artifactId>
214-
<version>2.1.35</version>
214+
<version>${swagger-parser.version}</version>
215215
<exclusions>
216216
<exclusion>
217217
<groupId>javax.validation</groupId>

0 commit comments

Comments
 (0)