diff --git a/README.md b/README.md
index 352e159f8..4fae6e8d5 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,9 @@ The project is very much Work In Progress and will be published on maven central
# Release Notes
BOAT is still under development and subject to change.
+## 0.14.7
+* *Boat Marina*
+ * Exports flatObjects as a model to prevent errors with references
## 0.14.6
* *Maven Plugin*
* Added `boat:ship` mojo to automagically zip specs found in `src/main/resources` and attach it to the project reactor so `mvn install` or `mvn deploy` will also include a zip archive of the project with with `api` classifier
diff --git a/boat-engine/pom.xml b/boat-engine/pom.xml
index e7441f412..5e032c153 100644
--- a/boat-engine/pom.xml
+++ b/boat-engine/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-engine
jar
diff --git a/boat-maven-plugin/pom.xml b/boat-maven-plugin/pom.xml
index e0f282ba1..b354a51a2 100644
--- a/boat-maven-plugin/pom.xml
+++ b/boat-maven-plugin/pom.xml
@@ -6,7 +6,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-maven-plugin
diff --git a/boat-quay/boat-quay-lint/pom.xml b/boat-quay/boat-quay-lint/pom.xml
index 1997cff9d..f88d1f1b2 100644
--- a/boat-quay/boat-quay-lint/pom.xml
+++ b/boat-quay/boat-quay-lint/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
boat-quay
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-quay-lint
jar
diff --git a/boat-quay/boat-quay-rules/pom.xml b/boat-quay/boat-quay-rules/pom.xml
index 9b4508cbd..0da15d652 100644
--- a/boat-quay/boat-quay-rules/pom.xml
+++ b/boat-quay/boat-quay-rules/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
boat-quay
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-quay-rules
jar
diff --git a/boat-quay/pom.xml b/boat-quay/pom.xml
index 4fd72a2e3..03a5035fc 100644
--- a/boat-quay/pom.xml
+++ b/boat-quay/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
diff --git a/boat-scaffold/pom.xml b/boat-scaffold/pom.xml
index ba69e6d9b..9bf5c514d 100644
--- a/boat-scaffold/pom.xml
+++ b/boat-scaffold/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-scaffold
@@ -86,7 +86,7 @@
com.backbase.oss
boat-trail-resources
- 0.14.6
+ 0.14.7-SNAPSHOT
test
diff --git a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java
index e1ee165e2..7584cd0a6 100644
--- a/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java
+++ b/boat-scaffold/src/main/java/com/backbase/oss/codegen/BoatStaticDocsGenerator.java
@@ -20,6 +20,7 @@
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenResponse;
+import org.openapitools.codegen.utils.ModelUtils;
import java.io.IOException;
import java.nio.charset.Charset;
@@ -65,9 +66,16 @@ public void preprocessOpenAPI(OpenAPI openAPI) {
}
if (openAPI.getComponents().getExamples() != null) {
- Set imports = new HashSet<>();
additionalProperties.put("examples", openAPI.getComponents().getExamples().entrySet().stream()
- .map(exampleEntry -> mapComponentExample(imports, exampleEntry))
+ .map(this::mapComponentExample)
+ .collect(Collectors.toList()));
+ }
+
+ // We need freeForm objects as models as well, since they are being referenced with $ref
+ if (openAPI.getComponents().getSchemas() != null) {
+ additionalProperties.put("freeFormModels", openAPI.getComponents().getSchemas().entrySet().stream()
+ .filter(freeFormModel -> ModelUtils.isFreeFormObject(freeFormModel.getValue()))
+ .map(this::mapFreeFormObject)
.collect(Collectors.toList()));
}
@@ -90,12 +98,17 @@ private CodegenParameter mapComponentRequestBody(Set imports, java.util.
return fromRequestBody(requestBody, imports, name);
}
- private BoatExample mapComponentExample(Set imports, Map.Entry namedExample) {
+ private BoatExample mapComponentExample( Map.Entry namedExample) {
String key = namedExample.getKey();
Example example = namedExample.getValue();
return new BoatExample(key,"", example , false);
}
+ private Object mapFreeFormObject(Map.Entry freeFormObject) {//NOSONAR
+ String name = freeFormObject.getKey();
+ return fromModel(name, freeFormObject.getValue());
+ }
+
private CodegenParameter mapComponentParameter(Set imports, java.util.Map.Entry nameParameter) {
Parameter parameter = nameParameter.getValue();
return fromParameter(parameter, imports);
diff --git a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars
index 1b121a32a..32c92cd7e 100644
--- a/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars
+++ b/boat-scaffold/src/main/templates/boat-marina/api.js.handlebars
@@ -47,12 +47,13 @@ const data = {
data["parameters"]["{{paramName}}"] = {{{jsonSchema}}};
{{/each}}
+{{#each freeFormModels}}
+ data.models["{{name}}"] = {{{json .}}};
+{{/each}}
{{#each swagger.vendorExtensions.x-shared-errors}}
let err = {{{json .}}};
data["errors"][err.errorID] = err;
{{/each}}
-
-
module.exports = { data };
\ No newline at end of file
diff --git a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java
index 0da0acccf..682f51b63 100644
--- a/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java
+++ b/boat-scaffold/src/test/java/com/backbase/oss/codegen/marina/BoatMarinaTest.java
@@ -2,7 +2,6 @@
import com.backbase.oss.boat.loader.OpenAPILoader;
import com.backbase.oss.boat.loader.OpenAPILoaderException;
-import com.backbase.oss.codegen.doc.BoatDocsGenerator;
import io.swagger.v3.oas.models.OpenAPI;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
@@ -42,6 +41,11 @@ void testGenerateDocs() throws IOException {
File index = new File("target/marina-docs/api.js");
String generated = String.join(" ", Files.readAllLines(Paths.get(index.getPath())));
assertTrue(generated.startsWith("/**"));
+ assertTrue(generated.contains("Simple API overview"));
+ assertTrue(generated.contains("appDescription: \"No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)\","));
+ assertTrue(generated.contains("data.examples[\"BadRequestError\"]"));
+ assertTrue(generated.contains("data.models[\"ParameterMap\"]"));
+
}
@@ -53,7 +57,7 @@ protected File getFile(String name) {
}
- private static void generateDocs(File spec) {
+ private static void generateDocs(File spec) throws IOException {
log.info("Generate docs for: {}", spec);
OpenAPI openAPI = null;
try {
diff --git a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml
index de066b028..0b1572413 100644
--- a/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml
+++ b/boat-scaffold/src/test/resources/openapi-with-examples/openapi-with-json.yaml
@@ -2,7 +2,38 @@ openapi: "3.0.0"
info:
title: Simple API overview
version: 2.0.0
+components:
+ schemas:
+ ParameterMap:
+ type: object
+ additionalProperties:
+ type: object
+ example:
+ enable_payments: true
+ examples:
+ BadRequestError:
+ summary: BadRequestError
+ value:
+ message: Bad Request
+ errors:
+ - message: "Value Exceeded. Must be between {min} and {max}."
+ key: common.api.shoesize
+ context:
+ max: "50"
+ min: "1"
paths:
+ /foo:
+ description: Some random description
+ get:
+ operationId: foo
+ summary: Gets a project's parameters.
+ responses:
+ "200":
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ParameterMap'
/:
get:
operationId: listVersionsv2
@@ -29,6 +60,8 @@ paths:
links:
- href: http://127.0.0.1:8774/v3/
rel: self
+ bar:
+ $ref: '#/components/examples/BadRequestError'
'300':
description: |-
diff --git a/boat-terminal/pom.xml b/boat-terminal/pom.xml
index 5be5a7121..bf9c6d90a 100644
--- a/boat-terminal/pom.xml
+++ b/boat-terminal/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-terminal
diff --git a/boat-trail-resources/pom.xml b/boat-trail-resources/pom.xml
index b8a4b1cfb..957055c3b 100644
--- a/boat-trail-resources/pom.xml
+++ b/boat-trail-resources/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
boat-trail-resources
diff --git a/pom.xml b/pom.xml
index e6386394d..31513bc12 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
pom
Backbase Open Api Tools will help you converting RAML to OpenAPI plus many more
diff --git a/tests/pom.xml b/tests/pom.xml
index e492540fc..9aaea49f2 100644
--- a/tests/pom.xml
+++ b/tests/pom.xml
@@ -5,7 +5,7 @@
com.backbase.oss
backbase-openapi-tools
- 0.14.6
+ 0.14.7-SNAPSHOT
tests