You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2020/03/10 22:49:23 UTC
[camel] 02/03: CAMEL-14691: Code cleanup
This is an automated email from the ASF dual-hosted git repository.
zregvart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 9529789dd2de8e57c66b580f9a7daa5f441e41ec
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Tue Mar 10 23:02:11 2020 +0100
CAMEL-14691: Code cleanup
- makes sure that autocloseable resources are used with
try-with-resources
- parameter names reflect their use
- resources are not loaded outside of the `src` directory
- methods that can be static are declared as static
- methods are not named `get...`
- referenced values are used instead of fetched again (e.g. repeated
getServers())
- URL class is not used
- when possible early exits are taken
- doesn't rely on non-standard base path resolution from `basePath`
variable (used in example, no bearing on the base path)
- removes trailing whitespace
- use final where possible
- corrects AssertJ usage
- adds tests for refactored code
---
.../generator/openapi/AppendableGenerator.java | 4 +-
.../camel/generator/openapi/FilerGenerator.java | 4 +-
.../openapi/MethodBodySourceCodeEmitter.java | 64 +++---
.../camel/generator/openapi/OperationFilter.java | 9 +-
.../camel/generator/openapi/OperationVisitor.java | 59 +++---
.../camel/generator/openapi/PathGenerator.java | 4 +-
.../camel/generator/openapi/PathVisitor.java | 41 ++--
.../generator/openapi/RestDefinitionEmitter.java | 10 +-
.../openapi/RestDslDefinitionGenerator.java | 8 +-
.../camel/generator/openapi/RestDslGenerator.java | 230 +++++++++++----------
.../openapi/RestDslSourceCodeGenerator.java | 33 ++-
.../generator/openapi/RestDslXmlGenerator.java | 10 +-
.../SpringBootProjectSourceCodeGenerator.java | 48 ++---
.../PathSpringBootProjectSourceGeneratorTest.java | 5 +-
.../openapi/RestDefinitionEmitterTest.java | 60 +++---
.../generator/openapi/RestDslGeneratorTest.java | 163 ++++++++++++---
.../generator/openapi/RestDslGeneratorV3Test.java | 85 ++++----
.../openapi/RestDslSourceCodeGeneratorTest.java | 13 +-
.../openapi/RestDslSourceCodeGeneratorV3Test.java | 19 +-
.../generator/openapi/RestDslXmlGeneratorTest.java | 84 ++++----
.../openapi/RestDslXmlGeneratorV3Test.java | 86 ++++----
.../camel/generator/openapi}/openapi-spec.json | 0
.../camel/generator/openapi}/openapi-v2.json | 0
23 files changed, 583 insertions(+), 456 deletions(-)
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
index 3e51540..b76a2ac 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/AppendableGenerator.java
@@ -23,8 +23,8 @@ import io.apicurio.datamodels.openapi.models.OasDocument;
final class AppendableGenerator extends RestDslSourceCodeGenerator<Appendable> {
- AppendableGenerator(final OasDocument openapi) {
- super(openapi);
+ AppendableGenerator(final OasDocument document) {
+ super(document);
}
@Override
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
index 093b373..c376842 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/FilerGenerator.java
@@ -25,8 +25,8 @@ import io.apicurio.datamodels.openapi.models.OasDocument;
final class FilerGenerator extends RestDslSourceCodeGenerator<Filer> {
- FilerGenerator(final OasDocument openapi) {
- super(openapi);
+ FilerGenerator(final OasDocument document) {
+ super(document);
}
@Override
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitter.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitter.java
index 34e70bf..dbbe3cd 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitter.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitter.java
@@ -81,38 +81,6 @@ class MethodBodySourceCodeEmitter implements CodeEmitter<MethodSpec> {
return builder.build();
}
- Object[] argumentsFor(final Object[] args) {
- final List<Object> arguments = new ArrayList<>(args.length);
-
- for (final Object arg : args) {
- if (isPrimitiveOrWrapper(arg.getClass())) {
- arguments.add(arg);
- } else if (arg instanceof String) {
- arguments.add(arg);
- } else if (arg instanceof Enum) {
- arguments.add(arg.getClass());
- arguments.add(arg);
- } else if (arg instanceof String[]) {
- arguments.add(Arrays.stream((String[]) arg).collect(Collectors.joining(",")));
- }
- }
-
- return arguments.toArray(new Object[arguments.size()]);
- }
-
- Object[] extend(final Object first, final Object... others) {
- if (others == null || others.length == 0) {
- return new Object[] {first};
- }
-
- final Object[] ret = new Object[1 + others.length];
-
- ret[0] = first;
- System.arraycopy(others, 0, ret, 1, others.length);
-
- return ret;
- }
-
int indentLevelOf(final String method) {
switch (method) {
case "rest":
@@ -163,4 +131,36 @@ class MethodBodySourceCodeEmitter implements CodeEmitter<MethodSpec> {
return literals.toString();
}
+ static Object[] argumentsFor(final Object[] args) {
+ final List<Object> arguments = new ArrayList<>(args.length);
+
+ for (final Object arg : args) {
+ if (isPrimitiveOrWrapper(arg.getClass())) {
+ arguments.add(arg);
+ } else if (arg instanceof String) {
+ arguments.add(arg);
+ } else if (arg instanceof Enum) {
+ arguments.add(arg.getClass());
+ arguments.add(arg);
+ } else if (arg instanceof String[]) {
+ arguments.add(Arrays.stream((String[]) arg).collect(Collectors.joining(",")));
+ }
+ }
+
+ return arguments.toArray(new Object[arguments.size()]);
+ }
+
+ static Object[] extend(final Object first, final Object... others) {
+ if (others == null || others.length == 0) {
+ return new Object[] {first};
+ }
+
+ final Object[] ret = new Object[1 + others.length];
+
+ ret[0] = first;
+ System.arraycopy(others, 0, ret, 1, others.length);
+
+ return ret;
+ }
+
}
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationFilter.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationFilter.java
index 82371f6..ad74141 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationFilter.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationFilter.java
@@ -22,22 +22,23 @@ import org.apache.camel.support.PatternHelper;
class OperationFilter {
- // operation names to include separated by comma (wildcards can be used, eg find*)
+ // operation names to include separated by comma (wildcards can be used, eg
+ // find*)
private String includes;
public String getIncludes() {
return includes;
}
- public void setIncludes(String includes) {
+ public void setIncludes(final String includes) {
this.includes = includes;
}
- boolean accept(String name) {
+ boolean accept(final String name) {
boolean match = true;
if (includes != null) {
- String[] patterns = includes.split(",");
+ final String[] patterns = includes.split(",");
match = Arrays.stream(patterns).anyMatch(pattern -> PatternHelper.matchPattern(name, pattern));
}
return match;
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
index d905f78..98e7d82 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/OperationVisitor.java
@@ -76,7 +76,7 @@ class OperationVisitor<T> {
}
if (!parameterType.equals("body")) {
if (parameter instanceof Oas20Parameter) {
- final Oas20Parameter serializableParameter = (Oas20Parameter)parameter;
+ final Oas20Parameter serializableParameter = (Oas20Parameter) parameter;
final String dataType = serializableParameter.type;
emit("dataType", dataType);
@@ -86,7 +86,7 @@ class OperationVisitor<T> {
emit("collectionFormat", CollectionFormat.valueOf(collectionFormat));
}
if (ObjectHelper.isNotEmpty(serializableParameter.default_)) {
- String value = serializableParameter.default_.toString();
+ final String value = serializableParameter.default_.toString();
emit("defaultValue", value);
}
@@ -95,8 +95,8 @@ class OperationVisitor<T> {
emit("arrayType", items.type);
}
} else if (parameter instanceof Oas30Parameter) {
- final Oas30Parameter serializableParameter = (Oas30Parameter)parameter;
- Oas30Schema schema = (Oas30Schema)serializableParameter.schema;
+ final Oas30Parameter serializableParameter = (Oas30Parameter) parameter;
+ final Oas30Schema schema = (Oas30Schema) serializableParameter.schema;
if (schema != null) {
final String dataType = schema.type;
if (ObjectHelper.isNotEmpty(dataType)) {
@@ -114,13 +114,13 @@ class OperationVisitor<T> {
}
}
if (ObjectHelper.isNotEmpty(schema.default_)) {
- String value = schema.default_.toString();
+ final String value = schema.default_.toString();
emit("defaultValue", value);
}
if ("array".equals(dataType) && schema.items != null
&& schema.items instanceof Oas30ItemsSchema) {
- emit("arrayType", ((Oas30ItemsSchema)schema.items).type);
+ emit("arrayType", ((Oas30ItemsSchema) schema.items).type);
}
}
}
@@ -159,59 +159,58 @@ class OperationVisitor<T> {
emit("id", operation.operationId);
emit("description", operation.description);
- List<String> operationLevelConsumes = new ArrayList<String>();
+ List<String> operationLevelConsumes = new ArrayList<>();
if (operation instanceof Oas20Operation) {
- operationLevelConsumes = ((Oas20Operation)operation).consumes;
+ operationLevelConsumes = ((Oas20Operation) operation).consumes;
} else if (operation instanceof Oas30Operation) {
- Oas30Operation oas30Operation = (Oas30Operation)operation;
- if (oas30Operation.requestBody != null
- && oas30Operation.requestBody.content != null) {
- for (String ct : oas30Operation.requestBody.content.keySet()) {
+ final Oas30Operation oas30Operation = (Oas30Operation) operation;
+ if (oas30Operation.requestBody != null
+ && oas30Operation.requestBody.content != null) {
+ for (final String ct : oas30Operation.requestBody.content.keySet()) {
operationLevelConsumes.add(ct);
}
}
-
+
}
emit("consumes", operationLevelConsumes);
- List<String> operationLevelProduces = new ArrayList<String>();
+ List<String> operationLevelProduces = new ArrayList<>();
if (operation instanceof Oas20Operation) {
- operationLevelProduces = ((Oas20Operation)operation).produces;
+ operationLevelProduces = ((Oas20Operation) operation).produces;
} else if (operation instanceof Oas30Operation) {
- Oas30Operation oas30Operation = (Oas30Operation)operation;
+ final Oas30Operation oas30Operation = (Oas30Operation) operation;
if (oas30Operation.responses != null) {
- for (OasResponse response : oas30Operation.responses.getResponses()) {
- Oas30Response oas30Response = (Oas30Response)response;
- for (String ct : oas30Response.content.keySet()) {
+ for (final OasResponse response : oas30Operation.responses.getResponses()) {
+ final Oas30Response oas30Response = (Oas30Response) response;
+ for (final String ct : oas30Response.content.keySet()) {
operationLevelProduces.add(ct);
}
}
}
}
emit("produces", operationLevelProduces);
-
+
if (operation.getParameters() != null) {
operation.getParameters().forEach(parameter -> {
emit(parameter);
});
}
if (operation instanceof Oas30Operation) {
- emitOas30Operation((Oas30Operation)operation);
+ emitOas30Operation((Oas30Operation) operation);
}
emitter.emit("to", destinationGenerator.generateDestinationFor(operation));
}
}
- private CodeEmitter<T> emitOas30Operation(Oas30Operation operation) {
-
+ private CodeEmitter<T> emitOas30Operation(final Oas30Operation operation) {
if (operation.requestBody != null) {
boolean foundForm = false;
- Oas30RequestBody requestBody = operation.requestBody;
- for (Entry<String, Oas30MediaType> entry : requestBody.content.entrySet()) {
- String ct = entry.getKey();
- Oas30MediaType mediaType = entry.getValue();
+ final Oas30RequestBody requestBody = operation.requestBody;
+ for (final Entry<String, Oas30MediaType> entry : requestBody.content.entrySet()) {
+ final String ct = entry.getKey();
+ final Oas30MediaType mediaType = entry.getValue();
if (ct.contains("form") && mediaType.schema.properties != null) {
- for (Entry<String, OasSchema> entrySchema : mediaType.schema.properties.entrySet()) {
+ for (final Entry<String, OasSchema> entrySchema : mediaType.schema.properties.entrySet()) {
foundForm = true;
emitter.emit("param");
emit("name", entrySchema.getKey());
@@ -232,8 +231,8 @@ class OperationVisitor<T> {
emitter.emit("endParam");
}
}
-
+
return emitter;
-
+
}
}
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
index f89aba8..148e449 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathGenerator.java
@@ -24,8 +24,8 @@ import io.apicurio.datamodels.openapi.models.OasDocument;
final class PathGenerator extends RestDslSourceCodeGenerator<Path> {
- PathGenerator(final OasDocument openapi) {
- super(openapi);
+ PathGenerator(final OasDocument document) {
+ super(document);
}
@Override
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
index ca3c0bc..a6cac93 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/PathVisitor.java
@@ -28,9 +28,20 @@ class PathVisitor<T> {
private final DestinationGenerator destinationGenerator;
private final CodeEmitter<T> emitter;
+
private final OperationFilter filter;
- PathVisitor(final String basePath, final CodeEmitter<T> emitter, OperationFilter filter, final DestinationGenerator destinationGenerator) {
+ public enum HttpMethod {
+ DELETE,
+ GET,
+ HEAD,
+ OPTIONS,
+ PATCH,
+ POST,
+ PUT
+ }
+
+ PathVisitor(final String basePath, final CodeEmitter<T> emitter, final OperationFilter filter, final DestinationGenerator destinationGenerator) {
this.emitter = emitter;
this.filter = filter;
this.destinationGenerator = destinationGenerator;
@@ -42,20 +53,20 @@ class PathVisitor<T> {
}
}
+ void visit(final OasPathItem definition) {
+ final OperationVisitor<T> restDslOperation = new OperationVisitor<>(emitter, filter, definition.getPath(), destinationGenerator);
+
+ operationMapFrom(definition).forEach(restDslOperation::visit);
+ }
+
void visit(final String path, final OasPathItem definition) {
final OperationVisitor<T> restDslOperation = new OperationVisitor<>(emitter, filter, path, destinationGenerator);
- getOperationMap(definition).forEach(restDslOperation::visit);
+ operationMapFrom(definition).forEach(restDslOperation::visit);
}
-
- void visit(final OasPathItem definition) {
- final OperationVisitor<T> restDslOperation = new OperationVisitor<>(emitter, filter, definition.getPath(), destinationGenerator);
- getOperationMap(definition).forEach(restDslOperation::visit);
- }
-
- private Map<HttpMethod, OasOperation> getOperationMap(OasPathItem path) {
- Map<HttpMethod, OasOperation> result = new LinkedHashMap<HttpMethod, OasOperation>();
+ private static Map<HttpMethod, OasOperation> operationMapFrom(final OasPathItem path) {
+ final Map<HttpMethod, OasOperation> result = new LinkedHashMap<>();
if (path.get != null) {
result.put(HttpMethod.GET, path.get);
@@ -81,15 +92,5 @@ class PathVisitor<T> {
return result;
}
-
- public enum HttpMethod {
- POST,
- GET,
- PUT,
- PATCH,
- DELETE,
- HEAD,
- OPTIONS
- }
}
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDefinitionEmitter.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDefinitionEmitter.java
index 955647b..bcad4fe 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDefinitionEmitter.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDefinitionEmitter.java
@@ -49,9 +49,9 @@ class RestDefinitionEmitter implements CodeEmitter<RestsDefinition> {
} catch (final Throwable e) {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
- } else {
- throw new IllegalStateException(e);
}
+
+ throw new IllegalStateException(e);
}
return this;
@@ -62,7 +62,7 @@ class RestDefinitionEmitter implements CodeEmitter<RestsDefinition> {
return definition;
}
- Object[] argumentsFor(final Object[] args) {
+ static Object[] argumentsFor(final Object[] args) {
final List<Object> arguments = new ArrayList<>(args.length);
for (final Object arg : args) {
@@ -76,7 +76,7 @@ class RestDefinitionEmitter implements CodeEmitter<RestsDefinition> {
return arguments.toArray(new Object[arguments.size()]);
}
- Class<?>[] parameterTypesOf(final Object[] args) {
+ static Class<?>[] parameterTypesOf(final Object[] args) {
final Class<?>[] parameterTypes = new Class<?>[args.length];
for (int i = 0; i < args.length; i++) {
@@ -86,7 +86,7 @@ class RestDefinitionEmitter implements CodeEmitter<RestsDefinition> {
return parameterTypes;
}
- Class<?>[] typesOf(final Object[] args) {
+ static Class<?>[] typesOf(final Object[] args) {
final Class<?>[] types = new Class<?>[args.length];
for (int i = 0; i < types.length; i++) {
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
index 27ae620..3fdb374 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
@@ -22,16 +22,16 @@ import org.apache.camel.model.rest.RestsDefinition;
public final class RestDslDefinitionGenerator extends RestDslGenerator<RestDslDefinitionGenerator> {
- RestDslDefinitionGenerator(final OasDocument openapi) {
- super(openapi);
+ RestDslDefinitionGenerator(final OasDocument document) {
+ super(document);
}
public RestsDefinition generate(final CamelContext context) {
final RestDefinitionEmitter emitter = new RestDefinitionEmitter(context);
- String basePath = RestDslGenerator.getBasePathFromOasDocument(openapi);
+ final String basePath = RestDslGenerator.determineBasePathFrom(document);
final PathVisitor<RestsDefinition> restDslStatement = new PathVisitor<>(basePath, emitter, filter, destinationGenerator());
- openapi.paths.getPathItems().forEach(restDslStatement::visit);
+ document.paths.getPathItems().forEach(restDslStatement::visit);
return emitter.result();
}
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
index 90d243f..b2b7c48 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
@@ -16,21 +16,20 @@
*/
package org.apache.camel.generator.openapi;
-import java.net.MalformedURLException;
-import java.net.URL;
+import java.net.URI;
import java.nio.file.Path;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.List;
+import java.util.Objects;
import javax.annotation.processing.Filer;
+import io.apicurio.datamodels.core.models.common.Server;
+import io.apicurio.datamodels.core.models.common.ServerVariable;
import io.apicurio.datamodels.openapi.models.OasDocument;
import io.apicurio.datamodels.openapi.v2.models.Oas20Document;
import io.apicurio.datamodels.openapi.v3.models.Oas30Document;
import io.apicurio.datamodels.openapi.v3.models.Oas30Server;
import org.apache.camel.model.rest.RestsDefinition;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import static org.apache.camel.util.ObjectHelper.notNull;
@@ -40,25 +39,28 @@ import static org.apache.camel.util.ObjectHelper.notNull;
*/
public abstract class RestDslGenerator<G> {
- private static final Logger LOG = LoggerFactory.getLogger(RestDslGenerator.class);
- final OasDocument openapi;
+ String apiContextPath;
-
DestinationGenerator destinationGenerator = new DirectToOperationId();
+
+ final OasDocument document;
+
OperationFilter filter = new OperationFilter();
+
String restComponent;
+
String restContextPath;
- String apiContextPath;
- boolean springComponent;
+
boolean springBootProject;
- RestDslGenerator(final OasDocument openapi) {
- this.openapi = notNull(openapi, "openapi");
+ boolean springComponent;
+
+ RestDslGenerator(final OasDocument document) {
+ this.document = notNull(document, "document");
}
- public G withDestinationGenerator(final DestinationGenerator directRouteGenerator) {
- notNull(directRouteGenerator, "directRouteGenerator");
- this.destinationGenerator = directRouteGenerator;
+ public G asSpringBootProject() {
+ this.springBootProject = true;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -66,12 +68,8 @@ public abstract class RestDslGenerator<G> {
return that;
}
- DestinationGenerator destinationGenerator() {
- return destinationGenerator;
- }
-
- public G withOperationFilter(OperationFilter filter) {
- this.filter = filter;
+ public G asSpringComponent() {
+ this.springComponent = true;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -79,8 +77,8 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public G withOperationFilter(String include) {
- this.filter.setIncludes(include);
+ public G withApiContextPath(final String contextPath) {
+ this.apiContextPath = contextPath;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -88,8 +86,9 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public G withRestComponent(String restComponent) {
- this.restComponent = restComponent;
+ public G withDestinationGenerator(final DestinationGenerator directRouteGenerator) {
+ notNull(directRouteGenerator, "directRouteGenerator");
+ this.destinationGenerator = directRouteGenerator;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -97,17 +96,17 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public G withRestContextPath(String contextPath) {
- this.restContextPath = contextPath;
+ public G withOperationFilter(final OperationFilter filter) {
+ this.filter = filter;
@SuppressWarnings("unchecked")
final G that = (G) this;
return that;
}
-
- public G withApiContextPath(String contextPath) {
- this.apiContextPath = contextPath;
+
+ public G withOperationFilter(final String include) {
+ this.filter.setIncludes(include);
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -115,8 +114,8 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public G asSpringComponent() {
- this.springComponent = true;
+ public G withRestComponent(final String restComponent) {
+ this.restComponent = restComponent;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -124,8 +123,8 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public G asSpringBootProject() {
- this.springBootProject = true;
+ public G withRestContextPath(final String contextPath) {
+ this.restContextPath = contextPath;
@SuppressWarnings("unchecked")
final G that = (G) this;
@@ -133,93 +132,98 @@ public abstract class RestDslGenerator<G> {
return that;
}
- public static RestDslSourceCodeGenerator<Appendable> toAppendable(final OasDocument openapi) {
- return new AppendableGenerator(openapi);
+ DestinationGenerator destinationGenerator() {
+ return destinationGenerator;
}
- public static RestDslDefinitionGenerator toDefinition(final OasDocument openapi) {
- return new RestDslDefinitionGenerator(openapi);
- }
+ public static String determineBasePathFrom(final OasDocument document) {
+ Objects.requireNonNull(document, "document");
- public static RestDslXmlGenerator toXml(final OasDocument openapi) {
- return new RestDslXmlGenerator(openapi);
- }
+ if (document instanceof Oas20Document) {
+ return ((Oas20Document) document).basePath;
+ } else if (document instanceof Oas30Document) {
+ final Oas30Document oas30Document = (Oas30Document) document;
+ final List<Server> servers = oas30Document.getServers();
- public static RestDslSourceCodeGenerator<Filer> toFiler(final OasDocument openapi) {
- return new FilerGenerator(openapi);
- }
+ if (servers == null || servers.get(0) == null) {
+ return "";
+ }
- public static RestDslSourceCodeGenerator<Path> toPath(final OasDocument openapi) {
- return new PathGenerator(openapi);
- }
-
- public static String getHostFromOasDocument(final OasDocument openapi) {
- String host = null;
- if (openapi instanceof Oas20Document) {
- host = ((Oas20Document)openapi).host;
- } else if (openapi instanceof Oas30Document) {
- if (((Oas30Document)openapi).getServers() != null
- && ((Oas30Document)openapi).getServers().get(0) != null) {
- try {
- URL serverUrl = new URL(parseVariables(((Oas30Document)openapi).getServers().get(0).url, (Oas30Server)((Oas30Document)openapi).getServers().get(0)));
- host = serverUrl.getHost();
-
- } catch (MalformedURLException e) {
- LOG.info("error when parsing OpenApi 3.0 doc server url", e);
- }
+ final Oas30Server firstServer = (Oas30Server) servers.get(0);
+ final URI serverUrl = URI.create(resolveVariablesIn(firstServer.url, firstServer));
+ String basePath = serverUrl.getPath();
+ if (basePath == null || basePath.length() == 0) {
+ return "";
}
- }
- return host;
-
- }
-
- public static String getBasePathFromOasDocument(final OasDocument openapi) {
- String basePath = null;
- if (openapi instanceof Oas20Document) {
- basePath = ((Oas20Document)openapi).basePath;
- } else if (openapi instanceof Oas30Document) {
- if (((Oas30Document)openapi).getServers() != null
- && ((Oas30Document)openapi).getServers().get(0) != null) {
- try {
- Oas30Server server = (Oas30Server)((Oas30Document)openapi).getServers().get(0);
- if (server.variables != null && server.variables.get("basePath") != null) {
- basePath = server.variables.get("basePath").default_;
- }
- if (basePath == null) {
- // parse server url as fallback
- URL serverUrl = new URL(parseVariables(((Oas30Document)openapi).getServers().get(0).url, server));
- basePath = serverUrl.getPath();
- if (basePath.indexOf("//") == 0) {
- // strip off the first "/" if double "/" exists
- basePath = basePath.substring(1);
- }
- if ("/".equals(basePath)) {
- basePath = "";
- }
- }
-
- } catch (MalformedURLException e) {
- //not a valid whole url, just the basePath
- basePath = ((Oas30Document)openapi).getServers().get(0).url;
- }
+
+ if (basePath.charAt(0) != '/') {
+ basePath = "/" + basePath;
}
-
+
+ if (basePath.indexOf("//") == 0) {
+ // strip off the first "/" if double "/" exists
+ basePath = basePath.substring(1);
+ }
+
+ if ("/".equals(basePath)) {
+ basePath = "";
+ }
+
+ return basePath;
}
- return basePath;
-
- }
-
- public static String parseVariables(String url, Oas30Server server) {
- Pattern p = Pattern.compile("\\{(.*?)\\}");
- Matcher m = p.matcher(url);
- while (m.find()) {
-
- String var = m.group(1);
- if (server != null && server.variables != null && server.variables.get(var) != null) {
- String varValue = server.variables.get(var).default_;
- url = url.replace("{" + var + "}", varValue);
+
+ throw new IllegalArgumentException("Unsupported document type: " + document.getClass().getName());
+ }
+
+ public static String determineHostFrom(final OasDocument document) {
+ if (document instanceof Oas20Document) {
+ return ((Oas20Document) document).host;
+ } else if (document instanceof Oas30Document) {
+ final Oas30Document oas30Document = (Oas30Document) document;
+ final List<Server> servers = oas30Document.getServers();
+
+ if (servers == null || servers.get(0) == null) {
+ return "";
}
+
+ final Oas30Server firstServer = (Oas30Server) servers.get(0);
+
+ final URI serverUrl = URI.create(resolveVariablesIn(firstServer.url, firstServer));
+
+ return serverUrl.getHost();
}
- return url;
+
+ throw new IllegalArgumentException("Unsupported document type: " + document.getClass().getName());
+ }
+
+ public static String resolveVariablesIn(final String url, final Oas30Server server) {
+ final List<ServerVariable> variables = Objects.requireNonNull(server, "server").getServerVariables();
+ String withoutPlaceholders = url;
+ for (final ServerVariable variable : variables) {
+ final String name = "{" + variable.getName() + "}";
+ withoutPlaceholders = withoutPlaceholders.replace(name, variable.default_);
+ }
+
+ return withoutPlaceholders;
+ }
+
+ public static RestDslSourceCodeGenerator<Appendable> toAppendable(final OasDocument document) {
+ return new AppendableGenerator(document);
+ }
+
+ public static RestDslDefinitionGenerator toDefinition(final OasDocument document) {
+ return new RestDslDefinitionGenerator(document);
+ }
+
+ public static RestDslSourceCodeGenerator<Filer> toFiler(final OasDocument document) {
+ return new FilerGenerator(document);
+ }
+
+ public static RestDslSourceCodeGenerator<Path> toPath(final OasDocument document) {
+ return new PathGenerator(document);
+ }
+
+ public static RestDslXmlGenerator toXml(final OasDocument document) {
+ return new RestDslXmlGenerator(document);
}
}
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
index 70d9aa7..5750954 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
@@ -43,7 +43,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
static final String DEFAULT_CLASS_NAME = "RestDslRoute";
static final String DEFAULT_PACKAGE_NAME = "rest.dsl.generated";
-
+
private static final String DEFAULT_INDENT = " ";
private Function<OasDocument, String> classNameGenerator = RestDslSourceCodeGenerator::generateClassName;
@@ -56,8 +56,8 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
private boolean sourceCodeTimestamps;
- RestDslSourceCodeGenerator(final OasDocument openapi) {
- super(openapi);
+ RestDslSourceCodeGenerator(final OasDocument document) {
+ super(document);
}
public abstract void generate(T destination) throws IOException;
@@ -94,7 +94,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
return this;
}
- MethodSpec generateConfigureMethod(final OasDocument openapi) {
+ MethodSpec generateConfigureMethod(final OasDocument document) {
final MethodSpec.Builder configure = MethodSpec.methodBuilder("configure").addModifiers(Modifier.PUBLIC)
.returns(void.class).addJavadoc("Defines Apache Camel routes using REST DSL fluent API.\n");
@@ -112,10 +112,10 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
configure.addCode(";\n\n");
}
- String basePath = RestDslGenerator.getBasePathFromOasDocument(openapi);
-
+ final String basePath = RestDslGenerator.determineBasePathFrom(document);
+
final PathVisitor<MethodSpec> restDslStatement = new PathVisitor<>(basePath, emitter, filter, destinationGenerator());
- openapi.paths.getItems().forEach(restDslStatement::visit);
+ document.paths.getItems().forEach(restDslStatement::visit);
return emitter.result();
}
@@ -124,9 +124,9 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
}
JavaFile generateSourceCode() {
- final MethodSpec methodSpec = generateConfigureMethod(openapi);
+ final MethodSpec methodSpec = generateConfigureMethod(document);
- final String classNameToUse = classNameGenerator.apply(openapi);
+ final String classNameToUse = classNameGenerator.apply(document);
final AnnotationSpec.Builder generatedAnnotation = AnnotationSpec.builder(Generated.class).addMember("value",
"$S", getClass().getName());
@@ -134,7 +134,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
generatedAnnotation.addMember("date", "$S", generated());
}
- TypeSpec.Builder builder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
+ final TypeSpec.Builder builder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(methodSpec)
.addAnnotation(generatedAnnotation.build())
.addJavadoc("Generated from OpenApi specification by Camel REST DSL generator.\n");
@@ -142,9 +142,9 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
final AnnotationSpec.Builder springAnnotation = AnnotationSpec.builder(ClassName.bestGuess("org.springframework.stereotype.Component"));
builder.addAnnotation(springAnnotation.build());
}
- TypeSpec generatedRouteBuilder = builder.build();
+ final TypeSpec generatedRouteBuilder = builder.build();
- final String packageNameToUse = packageNameGenerator.apply(openapi);
+ final String packageNameToUse = packageNameGenerator.apply(document);
return JavaFile.builder(packageNameToUse, generatedRouteBuilder).indent(indent).build();
}
@@ -155,8 +155,8 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
return this;
}
- static String generateClassName(final OasDocument openapi) {
- final OasInfo info = (OasInfo)openapi.info;
+ static String generateClassName(final OasDocument document) {
+ final OasInfo info = (OasInfo) document.info;
if (info == null) {
return DEFAULT_CLASS_NAME;
}
@@ -177,9 +177,8 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
return className;
}
- static String generatePackageName(final OasDocument openapi) {
- String host = RestDslGenerator.getHostFromOasDocument(openapi);
-
+ static String generatePackageName(final OasDocument document) {
+ final String host = RestDslGenerator.determineHostFrom(document);
if (ObjectHelper.isNotEmpty(host)) {
final StringBuilder packageName = new StringBuilder();
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index a1ce847..a0a4718 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -43,20 +43,20 @@ public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> {
private boolean blueprint;
- RestDslXmlGenerator(final OasDocument openapi) {
- super(openapi);
+ RestDslXmlGenerator(final OasDocument document) {
+ super(document);
}
public String generate(final CamelContext context) throws Exception {
final RestDefinitionEmitter emitter = new RestDefinitionEmitter(context);
- String basePath = RestDslGenerator.getBasePathFromOasDocument(openapi);
+ final String basePath = RestDslGenerator.determineBasePathFrom(document);
final PathVisitor<RestsDefinition> restDslStatement = new PathVisitor<>(basePath, emitter, filter,
destinationGenerator());
- openapi.paths.getPathItems().forEach(restDslStatement::visit);
+ document.paths.getPathItems().forEach(restDslStatement::visit);
final RestsDefinition rests = emitter.result();
- ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ final ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
final String xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, rests);
final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/SpringBootProjectSourceCodeGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/SpringBootProjectSourceCodeGenerator.java
index dfd2604..4cf536d 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/SpringBootProjectSourceCodeGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/SpringBootProjectSourceCodeGenerator.java
@@ -39,7 +39,7 @@ public class SpringBootProjectSourceCodeGenerator {
private String packageName;
- public void generate(Path destination) throws IOException {
+ public void generate(final Path destination) throws IOException {
final JavaFile javaFile = generateSourceCode();
javaFile.writeTo(destination);
@@ -56,30 +56,9 @@ public class SpringBootProjectSourceCodeGenerator {
return this;
}
- JavaFile generateSourceCode() {
- notEmpty(packageName, "packageName");
-
- final MethodSpec methodSpec = generateRestMethod();
-
- final String classNameToUse = "CamelRestController";
-
- final AnnotationSpec.Builder generatedAnnotation = AnnotationSpec.builder(Generated.class).addMember("value",
- "$S", getClass().getName());
- final AnnotationSpec.Builder restAnnotation = AnnotationSpec.builder(ClassName.bestGuess("org.springframework.web.bind.annotation.RestController"));
-
- TypeSpec.Builder builder = TypeSpec.classBuilder(classNameToUse)
- .addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(methodSpec)
- .addAnnotation(generatedAnnotation.build())
- .addAnnotation(restAnnotation.build())
- .addJavadoc("Forward requests to the Camel servlet so it can service REST requests.\n");
- TypeSpec generatedRestController = builder.build();
-
- return JavaFile.builder(packageName, generatedRestController).indent(indent).build();
- }
-
MethodSpec generateRestMethod() {
- ClassName req = ClassName.bestGuess("javax.servlet.http.HttpServletRequest");
- ClassName res = ClassName.bestGuess("javax.servlet.http.HttpServletResponse");
+ final ClassName req = ClassName.bestGuess("javax.servlet.http.HttpServletRequest");
+ final ClassName res = ClassName.bestGuess("javax.servlet.http.HttpServletResponse");
final AnnotationSpec.Builder reqAnnotation = AnnotationSpec.builder(ClassName.bestGuess("org.springframework.web.bind.annotation.RequestMapping"))
.addMember("value", "\"/**\"");
@@ -100,6 +79,27 @@ public class SpringBootProjectSourceCodeGenerator {
return forward.build();
}
+ JavaFile generateSourceCode() {
+ notEmpty(packageName, "packageName");
+
+ final MethodSpec methodSpec = generateRestMethod();
+
+ final String classNameToUse = "CamelRestController";
+
+ final AnnotationSpec.Builder generatedAnnotation = AnnotationSpec.builder(Generated.class).addMember("value",
+ "$S", getClass().getName());
+ final AnnotationSpec.Builder restAnnotation = AnnotationSpec.builder(ClassName.bestGuess("org.springframework.web.bind.annotation.RestController"));
+
+ final TypeSpec.Builder builder = TypeSpec.classBuilder(classNameToUse)
+ .addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(methodSpec)
+ .addAnnotation(generatedAnnotation.build())
+ .addAnnotation(restAnnotation.build())
+ .addJavadoc("Forward requests to the Camel servlet so it can service REST requests.\n");
+ final TypeSpec generatedRestController = builder.build();
+
+ return JavaFile.builder(packageName, generatedRestController).indent(indent).build();
+ }
+
public static SpringBootProjectSourceCodeGenerator generator() {
return new SpringBootProjectSourceCodeGenerator();
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/PathSpringBootProjectSourceGeneratorTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/PathSpringBootProjectSourceGeneratorTest.java
index e7d6a46..3c3e973 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/PathSpringBootProjectSourceGeneratorTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/PathSpringBootProjectSourceGeneratorTest.java
@@ -33,9 +33,10 @@ public class PathSpringBootProjectSourceGeneratorTest {
@Test
public void shouldGenerateSourceCodeWithDefaults() throws IOException, URISyntaxException {
- Path path = new File("target/generated-sources").toPath();
+ final Path path = new File("target/generated-sources").toPath();
SpringBootProjectSourceCodeGenerator.generator().withPackageName("com.foo").generate(path);
- final String generatedContent = new String(Files.readAllBytes(Paths.get("target/generated-sources/com/foo/CamelRestController.java")), StandardCharsets.UTF_8);
+ final String generatedContent = new String(Files.readAllBytes(Paths.get("target/generated-sources/com/foo/CamelRestController.java")),
+ StandardCharsets.UTF_8);
final URI file = PathSpringBootProjectSourceGeneratorTest.class.getResource("/SpringBootRestController.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDefinitionEmitterTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDefinitionEmitterTest.java
index 132c218..a863bb9 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDefinitionEmitterTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDefinitionEmitterTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.generator.openapi;
+import java.io.IOException;
import java.util.List;
import org.apache.camel.impl.DefaultCamelContext;
@@ -30,41 +31,42 @@ import static org.assertj.core.api.Assertions.assertThat;
public class RestDefinitionEmitterTest {
@Test
- public void shouldGenerateObjects() {
- final DefaultCamelContext context = new DefaultCamelContext();
+ public void shouldGenerateObjects() throws IOException {
+ try (DefaultCamelContext context = new DefaultCamelContext()) {
- final RestDefinitionEmitter emitter = new RestDefinitionEmitter(context);
+ final RestDefinitionEmitter emitter = new RestDefinitionEmitter(context);
- emitter.emit("rest");
- emitter.emit("put", "/pet");
- emitter.emit("consumes", new Object[] {new String[] {"application/json", "application/xml"}});
- emitter.emit("produces", new Object[] {new String[] {"application/xml", "application/json"}});
- emitter.emit("param");
- emitter.emit("name", "body");
- emitter.emit("type", RestParamType.body);
- emitter.emit("required", true);
- emitter.emit("endParam");
+ emitter.emit("rest");
+ emitter.emit("put", "/pet");
+ emitter.emit("consumes", new Object[] {new String[] {"application/json", "application/xml"}});
+ emitter.emit("produces", new Object[] {new String[] {"application/xml", "application/json"}});
+ emitter.emit("param");
+ emitter.emit("name", "body");
+ emitter.emit("type", RestParamType.body);
+ emitter.emit("required", true);
+ emitter.emit("endParam");
- final RestsDefinition result = emitter.result();
- final List<RestDefinition> rests = result.getRests();
- assertThat(rests).hasSize(1);
+ final RestsDefinition result = emitter.result();
+ final List<RestDefinition> rests = result.getRests();
+ assertThat(rests).hasSize(1);
- final RestDefinition rest = rests.get(0);
- final List<VerbDefinition> verbs = rest.getVerbs();
- assertThat(verbs).hasSize(1);
+ final RestDefinition rest = rests.get(0);
+ final List<VerbDefinition> verbs = rest.getVerbs();
+ assertThat(verbs).hasSize(1);
- final VerbDefinition definition = verbs.get(0);
- assertThat(definition.asVerb()).isEqualTo("put");
- assertThat(definition.getUri()).isEqualTo("/pet");
- assertThat(definition.getConsumes()).isEqualTo("application/json,application/xml");
- assertThat(definition.getProduces()).isEqualTo("application/xml,application/json");
+ final VerbDefinition definition = verbs.get(0);
+ assertThat(definition.asVerb()).isEqualTo("put");
+ assertThat(definition.getUri()).isEqualTo("/pet");
+ assertThat(definition.getConsumes()).isEqualTo("application/json,application/xml");
+ assertThat(definition.getProduces()).isEqualTo("application/xml,application/json");
- final List<RestOperationParamDefinition> params = definition.getParams();
- assertThat(params).hasSize(1);
+ final List<RestOperationParamDefinition> params = definition.getParams();
+ assertThat(params).hasSize(1);
- final RestOperationParamDefinition param = params.get(0);
- assertThat(param.getName()).isEqualTo("body");
- assertThat(param.getType()).isEqualTo(RestParamType.body);
- assertThat(param.getRequired()).isEqualTo(true);
+ final RestOperationParamDefinition param = params.get(0);
+ assertThat(param.getName()).isEqualTo("body");
+ assertThat(param.getType()).isEqualTo(RestParamType.body);
+ assertThat(param.getRequired()).isEqualTo(true);
+ }
}
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
index 9dcde26..1b84880 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
@@ -16,20 +16,24 @@
*/
package org.apache.camel.generator.openapi;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.Instant;
+import java.util.Collections;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.apicurio.datamodels.Library;
import io.apicurio.datamodels.openapi.models.OasDocument;
+import io.apicurio.datamodels.openapi.v2.models.Oas20Document;
+import io.apicurio.datamodels.openapi.v3.models.Oas30Document;
+import io.apicurio.datamodels.openapi.v3.models.Oas30Server;
+import io.apicurio.datamodels.openapi.v3.models.Oas30ServerVariable;
import org.apache.camel.CamelContext;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.model.rest.RestsDefinition;
@@ -40,36 +44,74 @@ import static org.assertj.core.api.Assertions.assertThat;
public class RestDslGeneratorTest {
- static OasDocument openapi;
-
+ static OasDocument document;
+
final Instant generated = Instant.parse("2017-10-17T00:00:00.000Z");
-
- @BeforeClass
- public static void readOpenApiDoc() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- FileInputStream fis = new FileInputStream(new File("openapi-v2.json"));
- JsonNode node = mapper.readTree(fis);
- openapi = (OasDocument)Library.readDocument(node);
+ @Test
+ public void shouldCreateDefinitions() throws IOException {
+ try (CamelContext context = new DefaultCamelContext()) {
+ final RestsDefinition definition = RestDslGenerator.toDefinition(document).generate(context);
+ assertThat(definition).isNotNull();
+ assertThat(definition.getRests()).hasSize(1);
+ assertThat(definition.getRests().get(0).getPath()).isEqualTo("/v2");
+ }
+ }
+
+ @Test
+ public void shouldDetermineBasePathFromV2Document() {
+ final Oas20Document oas20Document = new Oas20Document();
+ oas20Document.basePath = "/api";
+ assertThat(RestDslGenerator.determineBasePathFrom(oas20Document)).isEqualTo("/api");
}
@Test
- public void shouldCreateDefinitions() {
- final CamelContext context = new DefaultCamelContext();
+ public void shouldDetermineBasePathFromV3DocumentsServerUrl() {
+ final Oas30Document oas30Document = new Oas30Document();
+ final Oas30Server server = new Oas30Server();
+ server.url = "https://example.com/api";
- final RestsDefinition definition = RestDslGenerator.toDefinition(openapi).generate(context);
- assertThat(definition).isNotNull();
- assertThat(definition.getRests()).hasSize(1);
- assertThat(definition.getRests().get(0).getPath()).isEqualTo("/v2");
-
-
+ oas30Document.servers = Collections.singletonList(server);
+ assertThat(RestDslGenerator.determineBasePathFrom(oas30Document)).isEqualTo("/api");
+ }
+
+ @Test
+ public void shouldDetermineBasePathFromV3DocumentsServerUrlWithTemplateVariables() {
+ final Oas30Document oas30Document = new Oas30Document();
+ final Oas30Server server = new Oas30Server();
+ addVariableTo(server, "base", "api");
+ addVariableTo(server, "path", "v3");
+ server.url = "https://example.com/{base}/{path}";
+
+ oas30Document.servers = Collections.singletonList(server);
+ assertThat(RestDslGenerator.determineBasePathFrom(oas30Document)).isEqualTo("/api/v3");
+ }
+
+ @Test
+ public void shouldDetermineBasePathFromV3DocumentsWhenServerUrlIsRelative() {
+ final Oas30Document oas30Document = new Oas30Document();
+ final Oas30Server server = new Oas30Server();
+ server.url = "/api/v3";
+
+ oas30Document.servers = Collections.singletonList(server);
+ assertThat(RestDslGenerator.determineBasePathFrom(oas30Document)).isEqualTo("/api/v3");
+ }
+
+ @Test
+ public void shouldDetermineBasePathFromV3DocumentsWhenServerUrlIsRelativeWithoutStartingSlash() {
+ final Oas30Document oas30Document = new Oas30Document();
+ final Oas30Server server = new Oas30Server();
+ server.url = "api/v3";
+
+ oas30Document.servers = Collections.singletonList(server);
+ assertThat(RestDslGenerator.determineBasePathFrom(oas30Document)).isEqualTo("/api/v3");
}
@Test
public void shouldGenerateSourceCodeWithDefaults() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).generate(code);
+ RestDslGenerator.toAppendable(document).withGeneratedTime(generated).generate(code);
final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstore.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
@@ -78,12 +120,20 @@ public class RestDslGeneratorTest {
}
@Test
- public void shouldGenerateSourceCodeWithRestComponent() throws IOException, URISyntaxException {
+ public void shouldGenerateSourceCodeWithFilter() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withRestComponent("servlet").withRestContextPath("/").generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withClassName("MyRestRoute")
+ .withPackageName("com.example")
+ .withIndent("\t")
+ .withSourceCodeTimestamps()
+ .withOperationFilter("find*,deletePet,updatePet")
+ .withDestinationGenerator(o -> "direct:rest-" + o.operationId)
+ .generate(code);
- final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreWithRestComponent.txt").toURI();
+ final URI file = RestDslGeneratorTest.class.getResource("/MyRestRouteFilter.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
assertThat(code.toString()).isEqualTo(expectedContent);
@@ -93,8 +143,12 @@ public class RestDslGeneratorTest {
public void shouldGenerateSourceCodeWithOptions() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withClassName("MyRestRoute")
- .withPackageName("com.example").withIndent("\t").withSourceCodeTimestamps()
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withClassName("MyRestRoute")
+ .withPackageName("com.example")
+ .withIndent("\t")
+ .withSourceCodeTimestamps()
.withDestinationGenerator(o -> "direct:rest-" + o.operationId).generate(code);
final URI file = RestDslGeneratorTest.class.getResource("/MyRestRoute.txt").toURI();
@@ -104,17 +158,64 @@ public class RestDslGeneratorTest {
}
@Test
- public void shouldGenerateSourceCodeWithFilter() throws IOException, URISyntaxException {
+ public void shouldGenerateSourceCodeWithRestComponent() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withClassName("MyRestRoute")
- .withPackageName("com.example").withIndent("\t").withSourceCodeTimestamps()
- .withOperationFilter("find*,deletePet,updatePet")
- .withDestinationGenerator(o -> "direct:rest-" + o.operationId).generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withRestComponent("servlet")
+ .withRestContextPath("/")
+ .generate(code);
- final URI file = RestDslGeneratorTest.class.getResource("/MyRestRouteFilter.txt").toURI();
+ final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreWithRestComponent.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
assertThat(code.toString()).isEqualTo(expectedContent);
}
+
+ @Test
+ public void shouldResolveEmptyVariables() {
+ assertThat(RestDslGenerator.resolveVariablesIn("", new Oas30Server())).isEmpty();
+ }
+
+ @Test
+ public void shouldResolveMultipleOccurancesOfVariables() {
+ final Oas30Server server = new Oas30Server();
+ addVariableTo(server, "var1", "value1");
+ addVariableTo(server, "var2", "value2");
+
+ assertThat(RestDslGenerator.resolveVariablesIn("{var2} before {var1} after {var2}", server)).isEqualTo("value2 before value1 after value2");
+ }
+
+ @Test
+ public void shouldResolveMultipleVariables() {
+ final Oas30Server server = new Oas30Server();
+ addVariableTo(server, "var1", "value1");
+ addVariableTo(server, "var2", "value2");
+
+ assertThat(RestDslGenerator.resolveVariablesIn("before {var1} after {var2}", server)).isEqualTo("before value1 after value2");
+ }
+
+ @Test
+ public void shouldResolveSingleVariable() {
+ final Oas30Server server = new Oas30Server();
+ addVariableTo(server, "var", "value");
+ assertThat(RestDslGenerator.resolveVariablesIn("before {var} after", server)).isEqualTo("before value after");
+ }
+
+ @BeforeClass
+ public static void readOpenApiDoc() throws Exception {
+ final ObjectMapper mapper = new ObjectMapper();
+ try (InputStream is = RestDslGeneratorTest.class.getResourceAsStream("openapi-v2.json")) {
+ final JsonNode node = mapper.readTree(is);
+ document = (OasDocument) Library.readDocument(node);
+ }
+ }
+
+ private static void addVariableTo(final Oas30Server server, final String name, final String value) {
+ final Oas30ServerVariable variable = new Oas30ServerVariable(name);
+ variable.default_ = value;
+
+ server.addServerVariable(name, variable);
+ }
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
index 645d0ad..6908cee 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorV3Test.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.generator.openapi;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
@@ -40,50 +39,50 @@ import static org.assertj.core.api.Assertions.assertThat;
public class RestDslGeneratorV3Test {
- static OasDocument openapi;
-
- final Instant generated = Instant.parse("2017-10-17T00:00:00.000Z");
+ static OasDocument document;
-
- @BeforeClass
- public static void readOpenApiDoc() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- FileInputStream fis = new FileInputStream(new File("openapi-spec.json"));
- JsonNode node = mapper.readTree(fis);
- openapi = (OasDocument)Library.readDocument(node);
- }
+ final Instant generated = Instant.parse("2017-10-17T00:00:00.000Z");
@Test
- public void shouldCreateDefinitions() {
- final CamelContext context = new DefaultCamelContext();
- final RestsDefinition definition = RestDslGenerator.toDefinition(openapi).generate(context);
- assertThat(definition).isNotNull();
- assertThat(definition.getRests()).hasSize(1);
- assertThat(definition.getRests().get(0).getPath()).isEqualTo("/api/v3");
-
+ public void shouldCreateDefinitions() throws IOException {
+ try (CamelContext context = new DefaultCamelContext()) {
+ final RestsDefinition definition = RestDslGenerator.toDefinition(document).generate(context);
+ assertThat(definition).isNotNull();
+ assertThat(definition.getRests()).hasSize(1);
+ assertThat(definition.getRests().get(0).getPath()).isEqualTo("/api/v3");
+ }
}
@Test
public void shouldGenerateSourceCodeWithDefaults() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .generate(code);
final URI file = RestDslGeneratorV3Test.class.getResource("/OpenApiV3Petstore.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
assertThat(code.toString()).isEqualTo(expectedContent);
-
+
}
@Test
- public void shouldGenerateSourceCodeWithRestComponent() throws IOException, URISyntaxException {
+ public void shouldGenerateSourceCodeWithFilter() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withRestComponent("servlet").withRestContextPath("/").generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withClassName("MyRestRoute")
+ .withPackageName("com.example")
+ .withIndent("\t")
+ .withSourceCodeTimestamps()
+ .withOperationFilter("find*,deletePet,updatePet")
+ .withDestinationGenerator(o -> "direct:rest-" + o.operationId)
+ .generate(code);
- final URI file = RestDslGeneratorV3Test.class.getResource("/OpenApiV3PetstoreWithRestComponent.txt").toURI();
+ final URI file = RestDslGeneratorV3Test.class.getResource("/MyRestRouteFilterV3.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
-
assertThat(code.toString()).isEqualTo(expectedContent);
}
@@ -91,9 +90,14 @@ public class RestDslGeneratorV3Test {
public void shouldGenerateSourceCodeWithOptions() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withClassName("MyRestRoute")
- .withPackageName("com.example").withIndent("\t").withSourceCodeTimestamps()
- .withDestinationGenerator(o -> "direct:rest-" + o.operationId).generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withClassName("MyRestRoute")
+ .withPackageName("com.example")
+ .withIndent("\t")
+ .withSourceCodeTimestamps()
+ .withDestinationGenerator(o -> "direct:rest-" + o.operationId)
+ .generate(code);
final URI file = RestDslGeneratorV3Test.class.getResource("/MyRestRouteV3.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
@@ -101,16 +105,27 @@ public class RestDslGeneratorV3Test {
}
@Test
- public void shouldGenerateSourceCodeWithFilter() throws IOException, URISyntaxException {
+ public void shouldGenerateSourceCodeWithRestComponent() throws IOException, URISyntaxException {
final StringBuilder code = new StringBuilder();
- RestDslGenerator.toAppendable(openapi).withGeneratedTime(generated).withClassName("MyRestRoute")
- .withPackageName("com.example").withIndent("\t").withSourceCodeTimestamps()
- .withOperationFilter("find*,deletePet,updatePet")
- .withDestinationGenerator(o -> "direct:rest-" + o.operationId).generate(code);
+ RestDslGenerator.toAppendable(document)
+ .withGeneratedTime(generated)
+ .withRestComponent("servlet")
+ .withRestContextPath("/")
+ .generate(code);
- final URI file = RestDslGeneratorV3Test.class.getResource("/MyRestRouteFilterV3.txt").toURI();
+ final URI file = RestDslGeneratorV3Test.class.getResource("/OpenApiV3PetstoreWithRestComponent.txt").toURI();
final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+
assertThat(code.toString()).isEqualTo(expectedContent);
}
+
+ @BeforeClass
+ public static void readOpenApiDoc() throws Exception {
+ final ObjectMapper mapper = new ObjectMapper();
+ try (InputStream is = RestDslGeneratorTest.class.getResourceAsStream("openapi-spec.json")) {
+ final JsonNode node = mapper.readTree(is);
+ document = (OasDocument) Library.readDocument(node);
+ }
+ }
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
index 77530cc..d2ba094 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorTest.java
@@ -44,7 +44,7 @@ public class RestDslSourceCodeGeneratorTest {
@Test
public void shouldGenerateClassNameFromTitle() {
final Oas20Document openapi = new Oas20Document();
- OasInfo info = new Oas20Info();
+ final OasInfo info = new Oas20Info();
info.title = "Example API";
openapi.info = info;
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI");
@@ -53,7 +53,7 @@ public class RestDslSourceCodeGeneratorTest {
@Test
public void shouldGenerateClassNameFromTitleWithNonValidJavaIdentifiers() {
final Oas20Document openapi = new Oas20Document();
- OasInfo info = new Oas20Info();
+ final OasInfo info = new Oas20Info();
info.title = "Example-API 2.0";
openapi.info = info;
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI20");
@@ -65,6 +65,7 @@ public class RestDslSourceCodeGeneratorTest {
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
+
openapi.info = new Oas20Info();
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
@@ -73,10 +74,10 @@ public class RestDslSourceCodeGeneratorTest {
@Test
public void shouldUseDefaultClassNameIfTitleContainsOnlyNonValidJavaIdentifiers() {
final Oas20Document openapi = new Oas20Document();
- OasInfo info = new Oas20Info();
+ final OasInfo info = new Oas20Info();
info.title = "\\%/4";
openapi.info = info;
-
+
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
}
@@ -85,7 +86,7 @@ public class RestDslSourceCodeGeneratorTest {
public void shouldUseDefaultPackageNameForLocalhost() {
final Oas20Document openapi = new Oas20Document();
openapi.host = "localhost";
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
}
@@ -94,7 +95,7 @@ public class RestDslSourceCodeGeneratorTest {
public void shouldUseDefaultPackageNameForLocalhostWithPort() {
final Oas20Document openapi = new Oas20Document();
openapi.host = "localhost:8080";
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
index dee70d5..4b9707c 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslSourceCodeGeneratorV3Test.java
@@ -29,7 +29,7 @@ public class RestDslSourceCodeGeneratorV3Test {
public void shouldCreatePackageNamesFromHostnames() {
final Oas30Document openapi = new Oas30Document();
openapi.addServer("http://api.example.org/", "test server url");
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
}
@@ -37,25 +37,27 @@ public class RestDslSourceCodeGeneratorV3Test {
public void shouldCreatePackageNamesFromHostnamesWithPorts() {
final Oas30Document openapi = new Oas30Document();
openapi.addServer("http://api.example.org:8080/", "test server url");
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi)).isEqualTo("org.example.api");
}
@Test
public void shouldGenerateClassNameFromTitle() {
final Oas30Document openapi = new Oas30Document();
- OasInfo info = new Oas30Info();
+ final OasInfo info = new Oas30Info();
info.title = "Example API";
openapi.info = info;
+
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI");
}
@Test
public void shouldGenerateClassNameFromTitleWithNonValidJavaIdentifiers() {
final Oas30Document openapi = new Oas30Document();
- OasInfo info = new Oas30Info();
+ final OasInfo info = new Oas30Info();
info.title = "Example-API 2.0";
openapi.info = info;
+
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi)).isEqualTo("ExampleAPI20");
}
@@ -65,6 +67,7 @@ public class RestDslSourceCodeGeneratorV3Test {
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
+
openapi.info = new Oas30Info();
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
@@ -73,10 +76,10 @@ public class RestDslSourceCodeGeneratorV3Test {
@Test
public void shouldUseDefaultClassNameIfTitleContainsOnlyNonValidJavaIdentifiers() {
final Oas30Document openapi = new Oas30Document();
- OasInfo info = new Oas30Info();
+ final OasInfo info = new Oas30Info();
info.title = "\\%/4";
openapi.info = info;
-
+
assertThat(RestDslSourceCodeGenerator.generateClassName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_CLASS_NAME);
}
@@ -85,7 +88,7 @@ public class RestDslSourceCodeGeneratorV3Test {
public void shouldUseDefaultPackageNameForLocalhost() {
final Oas30Document openapi = new Oas30Document();
openapi.addServer("http://localhost", "test server url");
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
}
@@ -94,7 +97,7 @@ public class RestDslSourceCodeGeneratorV3Test {
public void shouldUseDefaultPackageNameForLocalhostWithPort() {
final Oas30Document openapi = new Oas30Document();
openapi.addServer("http://localhost:8080", "test server url");
-
+
assertThat(RestDslSourceCodeGenerator.generatePackageName(openapi))
.isEqualTo(RestDslSourceCodeGenerator.DEFAULT_PACKAGE_NAME);
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorTest.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorTest.java
index 397b849..891d3db 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorTest.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorTest.java
@@ -16,8 +16,7 @@
*/
package org.apache.camel.generator.openapi;
-import java.io.File;
-import java.io.FileInputStream;
+import java.io.InputStream;
import java.io.StringReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
@@ -44,73 +43,74 @@ import static org.assertj.core.api.Assertions.assertThat;
public class RestDslXmlGeneratorTest {
- static OasDocument openapi;
-
- @BeforeClass
- public static void readOpenApiDoc() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- FileInputStream fis = new FileInputStream(new File("openapi-v2.json"));
- JsonNode node = mapper.readTree(fis);
- openapi = (OasDocument)Library.readDocument(node);
- }
+ static OasDocument document;
@Test
public void shouldGenerateBlueprintXml() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).withBlueprint().generate(context);
- assertThat(xml).isNotEmpty();
- assertThat(xml.contains("http://camel.apache.org/schema/blueprint"));
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).withBlueprint().generate(context);
+ assertThat(xml).contains("http://camel.apache.org/schema/blueprint");
+ }
}
@Test
- public void shouldGenerateXml() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
- assertThat(xml).isNotEmpty();
- assertThat(xml.contains("http://camel.apache.org/schema/spring"));
+ public void shouldGenerateSpringXml() throws Exception {
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
+ assertThat(xml).contains("http://camel.apache.org/schema/spring");
+ }
}
@Test
public void shouldGenerateXmlWithDefaultnamespace() throws Exception {
- final CamelContext context = new DefaultCamelContext();
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
+ final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
+ builderFactory.setNamespaceAware(true);
- final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- builderFactory.setNamespaceAware(true);
+ final DocumentBuilder builder = builderFactory.newDocumentBuilder();
- final DocumentBuilder builder = builderFactory.newDocumentBuilder();
+ final Document document = builder.parse(new InputSource(new StringReader(xml)));
- final Document document = builder.parse(new InputSource(new StringReader(xml)));
-
- assertThat(document.isDefaultNamespace("http://camel.apache.org/schema/spring")).isTrue();
+ assertThat(document.isDefaultNamespace("http://camel.apache.org/schema/spring")).isTrue();
+ }
}
@Test
public void shouldGenerateXmlWithDefaults() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
- final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreXml.txt").toURI();
- final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+ final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreXml.txt").toURI();
+ final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
- assertThat(xml).isXmlEqualTo(expectedContent);
+ assertThat(xml).isXmlEqualTo(expectedContent);
+ }
}
@Test
public void shouldGenerateXmlWithRestComponent() throws Exception {
- final CamelContext context = new DefaultCamelContext();
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document)
+ .withRestComponent("servlet")
+ .withRestContextPath("/foo")
+ .generate(context);
- final String xml = RestDslGenerator.toXml(openapi).withRestComponent("servlet").withRestContextPath("/foo")
- .generate(context);
+ final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreWithRestComponentXml.txt").toURI();
+ final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
- final URI file = RestDslGeneratorTest.class.getResource("/OpenApiPetstoreWithRestComponentXml.txt").toURI();
- final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+ assertThat(xml).isXmlEqualTo(expectedContent);
+ }
+ }
- assertThat(xml).isXmlEqualTo(expectedContent);
+ @BeforeClass
+ public static void readOpenApiDoc() throws Exception {
+ final ObjectMapper mapper = new ObjectMapper();
+ try (InputStream is = RestDslXmlGeneratorTest.class.getResourceAsStream("openapi-v2.json")) {
+ final JsonNode node = mapper.readTree(is);
+ document = (OasDocument) Library.readDocument(node);
+ }
}
}
diff --git a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
index c3fa886..1a187ed 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
+++ b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslXmlGeneratorV3Test.java
@@ -16,8 +16,7 @@
*/
package org.apache.camel.generator.openapi;
-import java.io.File;
-import java.io.FileInputStream;
+import java.io.InputStream;
import java.io.StringReader;
import java.net.URI;
import java.nio.charset.StandardCharsets;
@@ -44,72 +43,73 @@ import static org.assertj.core.api.Assertions.assertThat;
public class RestDslXmlGeneratorV3Test {
- static OasDocument openapi;
-
- @BeforeClass
- public static void readOpenApiDoc() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- FileInputStream fis = new FileInputStream(new File("openapi-spec.json"));
- JsonNode node = mapper.readTree(fis);
- openapi = (OasDocument)Library.readDocument(node);
- }
+ static OasDocument document;
@Test
public void shouldGenerateBlueprintXml() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).withBlueprint().generate(context);
- assertThat(xml).isNotEmpty();
- assertThat(xml.contains("http://camel.apache.org/schema/blueprint"));
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).withBlueprint().generate(context);
+ assertThat(xml).contains("http://camel.apache.org/schema/blueprint");
+ }
}
@Test
- public void shouldGenerateXml() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
- assertThat(xml).isNotEmpty();
- assertThat(xml.contains("http://camel.apache.org/schema/spring"));
+ public void shouldGenerateSpringXml() throws Exception {
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
+ assertThat(xml).contains("http://camel.apache.org/schema/spring");
+ }
}
@Test
public void shouldGenerateXmlWithDefaultnamespace() throws Exception {
- final CamelContext context = new DefaultCamelContext();
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
+ final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
+ builderFactory.setNamespaceAware(true);
- final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- builderFactory.setNamespaceAware(true);
+ final DocumentBuilder builder = builderFactory.newDocumentBuilder();
- final DocumentBuilder builder = builderFactory.newDocumentBuilder();
+ final Document document = builder.parse(new InputSource(new StringReader(xml)));
- final Document document = builder.parse(new InputSource(new StringReader(xml)));
-
- assertThat(document.isDefaultNamespace("http://camel.apache.org/schema/spring")).isTrue();
+ assertThat(document.isDefaultNamespace("http://camel.apache.org/schema/spring")).isTrue();
+ }
}
@Test
public void shouldGenerateXmlWithDefaults() throws Exception {
- final CamelContext context = new DefaultCamelContext();
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document).generate(context);
- final String xml = RestDslGenerator.toXml(openapi).generate(context);
+ final URI file = RestDslGeneratorTest.class.getResource("/OpenApiV3PetstoreXml.txt").toURI();
+ final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
- final URI file = RestDslGeneratorTest.class.getResource("/OpenApiV3PetstoreXml.txt").toURI();
- final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
-
- assertThat(xml).isXmlEqualTo(expectedContent);
+ assertThat(xml).isXmlEqualTo(expectedContent);
+ }
}
@Test
public void shouldGenerateXmlWithRestComponent() throws Exception {
- final CamelContext context = new DefaultCamelContext();
-
- final String xml = RestDslGenerator.toXml(openapi).withRestComponent("servlet").withRestContextPath("/foo")
- .generate(context);
+ try (CamelContext context = new DefaultCamelContext()) {
+ final String xml = RestDslGenerator.toXml(document)
+ .withRestComponent("servlet")
+ .withRestContextPath("/foo")
+ .generate(context);
+
+ final URI file = RestDslGeneratorTest.class.getResource("/OpenApiV3PetstoreWithRestComponentXml.txt").toURI();
+ final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+ assertThat(xml).isXmlEqualTo(expectedContent);
+ }
+ }
- final URI file = RestDslGeneratorTest.class.getResource("/OpenApiV3PetstoreWithRestComponentXml.txt").toURI();
- final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
- assertThat(xml).isXmlEqualTo(expectedContent);
+ @BeforeClass
+ public static void readOpenApiDoc() throws Exception {
+ final ObjectMapper mapper = new ObjectMapper();
+ try (InputStream is = RestDslXmlGeneratorV3Test.class.getResourceAsStream("openapi-spec.json")) {
+ final JsonNode node = mapper.readTree(is);
+ document = (OasDocument) Library.readDocument(node);
+ }
}
}
diff --git a/tooling/openapi-rest-dsl-generator/openapi-spec.json b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-spec.json
similarity index 100%
rename from tooling/openapi-rest-dsl-generator/openapi-spec.json
rename to tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-spec.json
diff --git a/tooling/openapi-rest-dsl-generator/openapi-v2.json b/tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v2.json
similarity index 100%
rename from tooling/openapi-rest-dsl-generator/openapi-v2.json
rename to tooling/openapi-rest-dsl-generator/src/test/resources/org/apache/camel/generator/openapi/openapi-v2.json