This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 9c5ba6b  CAMEL-16685: camel-openapi-restdsl-generator - Split 
generated route builder into smaller code blocks
9c5ba6b is described below

commit 9c5ba6bf16b0ac1bd4216e94aa1c34c4771a5402
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jun 4 10:35:36 2021 +0200

    CAMEL-16685: camel-openapi-restdsl-generator - Split generated route 
builder into smaller code blocks
---
 .../openapi/MethodBodySourceCodeEmitter.java       |  9 +++-
 .../openapi/RestDslSourceCodeGenerator.java        | 34 ++++++++++++--
 .../openapi/MethodBodySourceCodeEmitterTest.java   |  3 ++
 .../generator/openapi/RestDslGeneratorV3Test.java  |  1 -
 .../src/test/resources/MyRestRoute.txt             | 54 ++++++++++++++++------
 .../src/test/resources/MyRestRouteFilter.txt       | 14 ++++--
 .../src/test/resources/MyRestRouteFilterV3.txt     | 14 ++++--
 .../src/test/resources/MyRestRouteV3.txt           | 54 ++++++++++++++++------
 .../src/test/resources/OpenApiPetstore.txt         | 54 ++++++++++++++++------
 .../resources/OpenApiPetstoreWithRestComponent.txt | 53 +++++++++++++++------
 .../src/test/resources/OpenApiV3Petstore.txt       | 54 ++++++++++++++++------
 .../OpenApiV3PetstoreWithRestComponent.txt         | 53 +++++++++++++++------
 12 files changed, 306 insertions(+), 91 deletions(-)

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 17e1150..6cc8e14 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
@@ -50,7 +50,7 @@ class MethodBodySourceCodeEmitter implements 
CodeEmitter<MethodSpec> {
 
         final int indent = indentLevelOf(method);
 
-        if (!first) {
+        if (!first || indent == 0) {
             builder.addCode("\n");
         }
 
@@ -74,10 +74,15 @@ class MethodBodySourceCodeEmitter implements 
CodeEmitter<MethodSpec> {
         return this;
     }
 
+    public void endEmit() {
+        builder.addCode(";\n");
+        first = true;
+    }
+
     @Override
     public MethodSpec result() {
         builder.addCode(String.join("", 
Collections.nCopies(indentStack.peek(), "$<")));
-        builder.addCode(";\n");
+        builder.addCode("\n");
         return builder.build();
     }
 
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 2bf76b1..7333308 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
@@ -18,6 +18,8 @@ package org.apache.camel.generator.openapi;
 
 import java.io.IOException;
 import java.time.Instant;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.function.Function;
 import java.util.stream.Collector;
 
@@ -109,13 +111,26 @@ public abstract class RestDslSourceCodeGenerator<T> 
extends RestDslGenerator<Res
             if (ObjectHelper.isNotEmpty(apiContextPath)) {
                 configure.addCode(".apiContextPath(\"" + apiContextPath + 
"\")");
             }
-            configure.addCode(";\n\n");
+            configure.addCode(";\n");
         }
 
         final String basePath = 
RestDslGenerator.determineBasePathFrom(this.basePath, document);
-
-        final PathVisitor<MethodSpec> restDslStatement = new 
PathVisitor<>(basePath, emitter, filter, destinationGenerator());
-        document.paths.getItems().forEach(restDslStatement::visit);
+        document.paths.getItems().forEach(s -> {
+            // there must be at least one verb
+            if (s.get != null || s.delete != null || s.head != null || 
s.options != null || s.put != null || s.patch != null
+                    || s.post != null) {
+                // there must be at least one operation accepted by the filter 
(otherwise we generate empty rest methods)
+                boolean anyAccepted = filter == null || ofNullable(s.get, 
s.delete, s.head, s.options, s.put, s.patch, s.post)
+                        .stream().anyMatch(o -> filter.accept(o.operationId));
+                if (anyAccepted) {
+                    // create new rest statement per path to avoid a giant 
chained single method
+                    PathVisitor<MethodSpec> restDslStatement
+                            = new PathVisitor<>(basePath, emitter, filter, 
destinationGenerator());
+                    restDslStatement.visit(s);
+                    emitter.endEmit();
+                }
+            }
+        });
         return emitter.result();
     }
 
@@ -204,4 +219,15 @@ public abstract class RestDslSourceCodeGenerator<T> 
extends RestDslGenerator<Res
 
         return DEFAULT_PACKAGE_NAME;
     }
+
+    private static <T> List<T> ofNullable(T... t) {
+        List<T> list = new ArrayList<>();
+        for (T o : t) {
+            if (o != null) {
+                list.add(o);
+            }
+        }
+        return list;
+    }
+
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitterTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitterTest.java
index de90194..f6a6025 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitterTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/MethodBodySourceCodeEmitterTest.java
@@ -40,8 +40,10 @@ public class MethodBodySourceCodeEmitterTest {
         emitter.emit("type", RestParamType.body);
         emitter.emit("required", true);
         emitter.emit("endParam");
+        emitter.endEmit();
 
         assertThat(emitter.result().toString()).isEqualTo("void configure() 
{\n"//
+                                                          + "\n"//
                                                           + "  rest()\n"//
                                                           + "    
.put(\"/pet\")\n"//
                                                           + "      
.consumes(\"application/json,application/xml\")\n"//
@@ -51,6 +53,7 @@ public class MethodBodySourceCodeEmitterTest {
                                                           + "        
.type(org.apache.camel.model.rest.RestParamType.body)\n"//
                                                           + "        
.required(true)\n"//
                                                           + "      
.endParam();\n"//
+                                                          + "\n"//
                                                           + "}\n");
     }
 }
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 0fa636b..301e1f3 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
@@ -62,7 +62,6 @@ public class RestDslGeneratorV3Test {
         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
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRoute.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRoute.txt
index d08f3b5..e26f036 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRoute.txt
+++ b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRoute.txt
@@ -17,6 +17,7 @@ public final class MyRestRoute extends RouteBuilder {
         * Defines Apache Camel routes using REST DSL fluent API.
         */
        public void configure() {
+
                rest("/v2")
                        .put("/pet")
                                .id("updatePet")
@@ -47,7 +48,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(false)
                                        .description("Verbose data")
                                .endParam()
-                               .to("direct:rest-addPet")
+                               .to("direct:rest-addPet");
+
+               rest("/v2")
                        .get("/pet/findByStatus")
                                .id("findPetsByStatus")
                                .description("Multiple status values can be 
provided with comma separated strings")
@@ -61,7 +64,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Status values that need 
to be considered for filter")
                                .endParam()
-                               .to("direct:rest-findPetsByStatus")
+                               .to("direct:rest-findPetsByStatus");
+
+               rest("/v2")
                        .get("/pet/findByTags")
                                .id("findPetsByTags")
                                .description("Muliple tags can be provided with 
comma separated strings. Use tag1, tag2, tag3 for testing.")
@@ -75,7 +80,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Tags to filter by")
                                .endParam()
-                               .to("direct:rest-findPetsByTags")
+                               .to("direct:rest-findPetsByTags");
+
+               rest("/v2")
                        .get("/pet/{petId}")
                                .id("getPetById")
                                .description("Returns a single pet")
@@ -130,7 +137,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Pet id to delete")
                                .endParam()
-                               .to("direct:rest-deletePet")
+                               .to("direct:rest-deletePet");
+
+               rest("/v2")
                        .post("/pet/{petId}/uploadImage")
                                .id("uploadFile")
                                .consumes("multipart/form-data")
@@ -156,12 +165,16 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(false)
                                        .description("file to upload")
                                .endParam()
-                               .to("direct:rest-uploadFile")
+                               .to("direct:rest-uploadFile");
+
+               rest("/v2")
                        .get("/store/inventory")
                                .id("getInventory")
                                .description("Returns a map of status codes to 
quantities")
                                .produces("application/json")
-                               .to("direct:rest-getInventory")
+                               .to("direct:rest-getInventory");
+
+               rest("/v2")
                        .post("/store/order")
                                .id("placeOrder")
                                .produces("application/xml,application/json")
@@ -171,7 +184,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("order placed for 
purchasing the pet")
                                .endParam()
-                               .to("direct:rest-placeOrder")
+                               .to("direct:rest-placeOrder");
+
+               rest("/v2")
                        .get("/store/order/{orderId}")
                                .id("getOrderById")
                                .description("For valid response try integer 
IDs with value >= 1 and <= 10. Other values will generated exceptions")
@@ -195,7 +210,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("ID of the order that 
needs to be deleted")
                                .endParam()
-                               .to("direct:rest-deleteOrder")
+                               .to("direct:rest-deleteOrder");
+
+               rest("/v2")
                        .post("/user")
                                .id("createUser")
                                .description("This can only be done by the 
logged in user.")
@@ -206,7 +223,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Created user object")
                                .endParam()
-                               .to("direct:rest-createUser")
+                               .to("direct:rest-createUser");
+
+               rest("/v2")
                        .post("/user/createWithArray")
                                .id("createUsersWithArrayInput")
                                .produces("application/xml,application/json")
@@ -216,7 +235,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("List of user object")
                                .endParam()
-                               .to("direct:rest-createUsersWithArrayInput")
+                               .to("direct:rest-createUsersWithArrayInput");
+
+               rest("/v2")
                        .post("/user/createWithList")
                                .id("createUsersWithListInput")
                                .produces("application/xml,application/json")
@@ -226,7 +247,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("List of user object")
                                .endParam()
-                               .to("direct:rest-createUsersWithListInput")
+                               .to("direct:rest-createUsersWithListInput");
+
+               rest("/v2")
                        .get("/user/login")
                                .id("loginUser")
                                .produces("application/xml,application/json")
@@ -244,11 +267,15 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("The password for login in 
clear text")
                                .endParam()
-                               .to("direct:rest-loginUser")
+                               .to("direct:rest-loginUser");
+
+               rest("/v2")
                        .get("/user/logout")
                                .id("logoutUser")
                                .produces("application/xml,application/json")
-                               .to("direct:rest-logoutUser")
+                               .to("direct:rest-logoutUser");
+
+               rest("/v2")
                        .get("/user/{username}")
                                .id("getUserByName")
                                .produces("application/xml,application/json")
@@ -290,5 +317,6 @@ public final class MyRestRoute extends RouteBuilder {
                                        .description("The name that needs to be 
deleted")
                                .endParam()
                                .to("direct:rest-deleteUser");
+
        }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilter.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilter.txt
index 27547a6..c42d971 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilter.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilter.txt
@@ -17,6 +17,7 @@ public final class MyRestRoute extends RouteBuilder {
         * Defines Apache Camel routes using REST DSL fluent API.
         */
        public void configure() {
+
                rest("/v2")
                        .put("/pet")
                                .id("updatePet")
@@ -28,7 +29,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Pet object that needs to 
be added to the store")
                                .endParam()
-                               .to("direct:rest-updatePet")
+                               .to("direct:rest-updatePet");
+
+               rest("/v2")
                        .get("/pet/findByStatus")
                                .id("findPetsByStatus")
                                .description("Multiple status values can be 
provided with comma separated strings")
@@ -42,7 +45,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Status values that need 
to be considered for filter")
                                .endParam()
-                               .to("direct:rest-findPetsByStatus")
+                               .to("direct:rest-findPetsByStatus");
+
+               rest("/v2")
                        .get("/pet/findByTags")
                                .id("findPetsByTags")
                                .description("Muliple tags can be provided with 
comma separated strings. Use tag1, tag2, tag3 for testing.")
@@ -56,7 +61,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Tags to filter by")
                                .endParam()
-                               .to("direct:rest-findPetsByTags")
+                               .to("direct:rest-findPetsByTags");
+
+               rest("/v2")
                        .delete("/pet/{petId}")
                                .id("deletePet")
                                .produces("application/xml,application/json")
@@ -74,5 +81,6 @@ public final class MyRestRoute extends RouteBuilder {
                                        .description("Pet id to delete")
                                .endParam()
                                .to("direct:rest-deletePet");
+
        }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilterV3.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilterV3.txt
index 473210d..74ecc2c 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilterV3.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteFilterV3.txt
@@ -17,6 +17,7 @@ public final class MyRestRoute extends RouteBuilder {
         * Defines Apache Camel routes using REST DSL fluent API.
         */
        public void configure() {
+
                rest("/api/v3")
                        .put("/pet")
                                .id("updatePet")
@@ -27,7 +28,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Pet object that needs to 
be added to the store")
                                .endParam()
-                               .to("direct:rest-updatePet")
+                               .to("direct:rest-updatePet");
+
+               rest("/api/v3")
                        .get("/pet/findByStatus")
                                .id("findPetsByStatus")
                                .description("Multiple status values can be 
provided with comma separated strings")
@@ -41,7 +44,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Status values that need 
to be considered for filter")
                                .endParam()
-                               .to("direct:rest-findPetsByStatus")
+                               .to("direct:rest-findPetsByStatus");
+
+               rest("/api/v3")
                        .get("/pet/findByTags")
                                .id("findPetsByTags")
                                .description("Muliple tags can be provided with 
comma separated strings. Use tag1, tag2, tag3 for testing.")
@@ -55,7 +60,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Tags to filter by")
                                .endParam()
-                               .to("direct:rest-findPetsByTags")
+                               .to("direct:rest-findPetsByTags");
+
+               rest("/api/v3")
                        .delete("/pet/{petId}")
                                .id("deletePet")
                                .param()
@@ -72,5 +79,6 @@ public final class MyRestRoute extends RouteBuilder {
                                        .description("Pet id to delete")
                                .endParam()
                                .to("direct:rest-deletePet");
+
        }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
index 1ec2154..9f4126c 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
+++ b/tooling/openapi-rest-dsl-generator/src/test/resources/MyRestRouteV3.txt
@@ -17,6 +17,7 @@ public final class MyRestRoute extends RouteBuilder {
         * Defines Apache Camel routes using REST DSL fluent API.
         */
        public void configure() {
+
                rest("/api/v3")
                        .put("/pet")
                                .id("updatePet")
@@ -45,7 +46,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Pet object that needs to 
be added to the store")
                                .endParam()
-                               .to("direct:rest-addPet")
+                               .to("direct:rest-addPet");
+
+               rest("/api/v3")
                        .get("/pet/findByStatus")
                                .id("findPetsByStatus")
                                .description("Multiple status values can be 
provided with comma separated strings")
@@ -59,7 +62,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Status values that need 
to be considered for filter")
                                .endParam()
-                               .to("direct:rest-findPetsByStatus")
+                               .to("direct:rest-findPetsByStatus");
+
+               rest("/api/v3")
                        .get("/pet/findByTags")
                                .id("findPetsByTags")
                                .description("Muliple tags can be provided with 
comma separated strings. Use tag1, tag2, tag3 for testing.")
@@ -73,7 +78,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Tags to filter by")
                                .endParam()
-                               .to("direct:rest-findPetsByTags")
+                               .to("direct:rest-findPetsByTags");
+
+               rest("/api/v3")
                        .get("/pet/{petId}")
                                .id("getPetById")
                                .description("Returns a single pet")
@@ -126,7 +133,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Pet id to delete")
                                .endParam()
-                               .to("direct:rest-deletePet")
+                               .to("direct:rest-deletePet");
+
+               rest("/api/v3")
                        .post("/pet/{petId}/uploadImage")
                                .id("uploadFile")
                                .consumes("multipart/form-data")
@@ -152,12 +161,16 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("file to upload")
                                .endParam()
-                               .to("direct:rest-uploadFile")
+                               .to("direct:rest-uploadFile");
+
+               rest("/api/v3")
                        .get("/store/inventory")
                                .id("getInventory")
                                .description("Returns a map of status codes to 
quantities")
                                .produces("application/json")
-                               .to("direct:rest-getInventory")
+                               .to("direct:rest-getInventory");
+
+               rest("/api/v3")
                        .post("/store/order")
                                .id("placeOrder")
                                .consumes("*/*")
@@ -168,7 +181,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("order placed for 
purchasing the pet")
                                .endParam()
-                               .to("direct:rest-placeOrder")
+                               .to("direct:rest-placeOrder");
+
+               rest("/api/v3")
                        .get("/store/order/{orderId}")
                                .id("getOrderById")
                                .description("For valid response try integer 
IDs with value >= 1 and <= 10. Other values will generated exceptions")
@@ -191,7 +206,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("ID of the order that 
needs to be deleted")
                                .endParam()
-                               .to("direct:rest-deleteOrder")
+                               .to("direct:rest-deleteOrder");
+
+               rest("/api/v3")
                        .post("/user")
                                .id("createUser")
                                .description("This can only be done by the 
logged in user.")
@@ -202,7 +219,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("Created user object")
                                .endParam()
-                               .to("direct:rest-createUser")
+                               .to("direct:rest-createUser");
+
+               rest("/api/v3")
                        .post("/user/createWithArray")
                                .id("createUsersWithArrayInput")
                                .consumes("*/*")
@@ -212,7 +231,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("List of user object")
                                .endParam()
-                               .to("direct:rest-createUsersWithArrayInput")
+                               .to("direct:rest-createUsersWithArrayInput");
+
+               rest("/api/v3")
                        .post("/user/createWithList")
                                .id("createUsersWithListInput")
                                .consumes("*/*")
@@ -222,7 +243,9 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("List of user object")
                                .endParam()
-                               .to("direct:rest-createUsersWithListInput")
+                               .to("direct:rest-createUsersWithListInput");
+
+               rest("/api/v3")
                        .get("/user/login")
                                .id("loginUser")
                                .produces("application/xml,application/json")
@@ -240,10 +263,14 @@ public final class MyRestRoute extends RouteBuilder {
                                        .required(true)
                                        .description("The password for login in 
clear text")
                                .endParam()
-                               .to("direct:rest-loginUser")
+                               .to("direct:rest-loginUser");
+
+               rest("/api/v3")
                        .get("/user/logout")
                                .id("logoutUser")
-                               .to("direct:rest-logoutUser")
+                               .to("direct:rest-logoutUser");
+
+               rest("/api/v3")
                        .get("/user/{username}")
                                .id("getUserByName")
                                .produces("application/xml,application/json")
@@ -284,5 +311,6 @@ public final class MyRestRoute extends RouteBuilder {
                                        .description("The name that needs to be 
deleted")
                                .endParam()
                                .to("direct:rest-deleteUser");
+
        }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstore.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstore.txt
index c3334f7..bdb3929 100644
--- a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstore.txt
+++ b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstore.txt
@@ -14,6 +14,7 @@ public final class OpenApiPetstore extends RouteBuilder {
      * Defines Apache Camel routes using REST DSL fluent API.
      */
     public void configure() {
+
         rest("/v2")
             .put("/pet")
                 .id("updatePet")
@@ -44,7 +45,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(false)
                     .description("Verbose data")
                 .endParam()
-                .to("direct:addPet")
+                .to("direct:addPet");
+
+        rest("/v2")
             .get("/pet/findByStatus")
                 .id("findPetsByStatus")
                 .description("Multiple status values can be provided with 
comma separated strings")
@@ -58,7 +61,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Status values that need to be considered for 
filter")
                 .endParam()
-                .to("direct:findPetsByStatus")
+                .to("direct:findPetsByStatus");
+
+        rest("/v2")
             .get("/pet/findByTags")
                 .id("findPetsByTags")
                 .description("Muliple tags can be provided with comma 
separated strings. Use tag1, tag2, tag3 for testing.")
@@ -72,7 +77,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Tags to filter by")
                 .endParam()
-                .to("direct:findPetsByTags")
+                .to("direct:findPetsByTags");
+
+        rest("/v2")
             .get("/pet/{petId}")
                 .id("getPetById")
                 .description("Returns a single pet")
@@ -127,7 +134,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet id to delete")
                 .endParam()
-                .to("direct:deletePet")
+                .to("direct:deletePet");
+
+        rest("/v2")
             .post("/pet/{petId}/uploadImage")
                 .id("uploadFile")
                 .consumes("multipart/form-data")
@@ -153,12 +162,16 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(false)
                     .description("file to upload")
                 .endParam()
-                .to("direct:uploadFile")
+                .to("direct:uploadFile");
+
+        rest("/v2")
             .get("/store/inventory")
                 .id("getInventory")
                 .description("Returns a map of status codes to quantities")
                 .produces("application/json")
-                .to("direct:getInventory")
+                .to("direct:getInventory");
+
+        rest("/v2")
             .post("/store/order")
                 .id("placeOrder")
                 .produces("application/xml,application/json")
@@ -168,7 +181,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("order placed for purchasing the pet")
                 .endParam()
-                .to("direct:placeOrder")
+                .to("direct:placeOrder");
+
+        rest("/v2")
             .get("/store/order/{orderId}")
                 .id("getOrderById")
                 .description("For valid response try integer IDs with value >= 
1 and <= 10. Other values will generated exceptions")
@@ -192,7 +207,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("ID of the order that needs to be deleted")
                 .endParam()
-                .to("direct:deleteOrder")
+                .to("direct:deleteOrder");
+
+        rest("/v2")
             .post("/user")
                 .id("createUser")
                 .description("This can only be done by the logged in user.")
@@ -203,7 +220,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Created user object")
                 .endParam()
-                .to("direct:createUser")
+                .to("direct:createUser");
+
+        rest("/v2")
             .post("/user/createWithArray")
                 .id("createUsersWithArrayInput")
                 .produces("application/xml,application/json")
@@ -213,7 +232,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithArrayInput")
+                .to("direct:createUsersWithArrayInput");
+
+        rest("/v2")
             .post("/user/createWithList")
                 .id("createUsersWithListInput")
                 .produces("application/xml,application/json")
@@ -223,7 +244,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithListInput")
+                .to("direct:createUsersWithListInput");
+
+        rest("/v2")
             .get("/user/login")
                 .id("loginUser")
                 .produces("application/xml,application/json")
@@ -241,11 +264,15 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
-                .to("direct:loginUser")
+                .to("direct:loginUser");
+
+        rest("/v2")
             .get("/user/logout")
                 .id("logoutUser")
                 .produces("application/xml,application/json")
-                .to("direct:logoutUser")
+                .to("direct:logoutUser");
+
+        rest("/v2")
             .get("/user/{username}")
                 .id("getUserByName")
                 .produces("application/xml,application/json")
@@ -287,5 +314,6 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .description("The name that needs to be deleted")
                 .endParam()
                 .to("direct:deleteUser");
+
     }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstoreWithRestComponent.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstoreWithRestComponent.txt
index 657025f..5f42d8a 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstoreWithRestComponent.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiPetstoreWithRestComponent.txt
@@ -47,7 +47,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(false)
                     .description("Verbose data")
                 .endParam()
-                .to("direct:addPet")
+                .to("direct:addPet");
+
+        rest("/v2")
             .get("/pet/findByStatus")
                 .id("findPetsByStatus")
                 .description("Multiple status values can be provided with 
comma separated strings")
@@ -61,7 +63,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Status values that need to be considered for 
filter")
                 .endParam()
-                .to("direct:findPetsByStatus")
+                .to("direct:findPetsByStatus");
+
+        rest("/v2")
             .get("/pet/findByTags")
                 .id("findPetsByTags")
                 .description("Muliple tags can be provided with comma 
separated strings. Use tag1, tag2, tag3 for testing.")
@@ -75,7 +79,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Tags to filter by")
                 .endParam()
-                .to("direct:findPetsByTags")
+                .to("direct:findPetsByTags");
+
+        rest("/v2")
             .get("/pet/{petId}")
                 .id("getPetById")
                 .description("Returns a single pet")
@@ -130,7 +136,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet id to delete")
                 .endParam()
-                .to("direct:deletePet")
+                .to("direct:deletePet");
+
+        rest("/v2")
             .post("/pet/{petId}/uploadImage")
                 .id("uploadFile")
                 .consumes("multipart/form-data")
@@ -156,12 +164,16 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(false)
                     .description("file to upload")
                 .endParam()
-                .to("direct:uploadFile")
+                .to("direct:uploadFile");
+
+        rest("/v2")
             .get("/store/inventory")
                 .id("getInventory")
                 .description("Returns a map of status codes to quantities")
                 .produces("application/json")
-                .to("direct:getInventory")
+                .to("direct:getInventory");
+
+        rest("/v2")
             .post("/store/order")
                 .id("placeOrder")
                 .produces("application/xml,application/json")
@@ -171,7 +183,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("order placed for purchasing the pet")
                 .endParam()
-                .to("direct:placeOrder")
+                .to("direct:placeOrder");
+
+        rest("/v2")
             .get("/store/order/{orderId}")
                 .id("getOrderById")
                 .description("For valid response try integer IDs with value >= 
1 and <= 10. Other values will generated exceptions")
@@ -195,7 +209,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("ID of the order that needs to be deleted")
                 .endParam()
-                .to("direct:deleteOrder")
+                .to("direct:deleteOrder");
+
+        rest("/v2")
             .post("/user")
                 .id("createUser")
                 .description("This can only be done by the logged in user.")
@@ -206,7 +222,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Created user object")
                 .endParam()
-                .to("direct:createUser")
+                .to("direct:createUser");
+
+        rest("/v2")
             .post("/user/createWithArray")
                 .id("createUsersWithArrayInput")
                 .produces("application/xml,application/json")
@@ -216,7 +234,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithArrayInput")
+                .to("direct:createUsersWithArrayInput");
+
+        rest("/v2")
             .post("/user/createWithList")
                 .id("createUsersWithListInput")
                 .produces("application/xml,application/json")
@@ -226,7 +246,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithListInput")
+                .to("direct:createUsersWithListInput");
+
+        rest("/v2")
             .get("/user/login")
                 .id("loginUser")
                 .produces("application/xml,application/json")
@@ -244,11 +266,15 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
-                .to("direct:loginUser")
+                .to("direct:loginUser");
+
+        rest("/v2")
             .get("/user/logout")
                 .id("logoutUser")
                 .produces("application/xml,application/json")
-                .to("direct:logoutUser")
+                .to("direct:logoutUser");
+
+        rest("/v2")
             .get("/user/{username}")
                 .id("getUserByName")
                 .produces("application/xml,application/json")
@@ -290,5 +316,6 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .description("The name that needs to be deleted")
                 .endParam()
                 .to("direct:deleteUser");
+
     }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
index 239990e..4a61b58 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3Petstore.txt
@@ -14,6 +14,7 @@ public final class OpenApiPetstore extends RouteBuilder {
      * Defines Apache Camel routes using REST DSL fluent API.
      */
     public void configure() {
+
         rest("/api/v3")
             .put("/pet")
                 .id("updatePet")
@@ -42,7 +43,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet object that needs to be added to the 
store")
                 .endParam()
-                .to("direct:addPet")
+                .to("direct:addPet");
+
+        rest("/api/v3")
             .get("/pet/findByStatus")
                 .id("findPetsByStatus")
                 .description("Multiple status values can be provided with 
comma separated strings")
@@ -56,7 +59,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Status values that need to be considered for 
filter")
                 .endParam()
-                .to("direct:findPetsByStatus")
+                .to("direct:findPetsByStatus");
+
+        rest("/api/v3")
             .get("/pet/findByTags")
                 .id("findPetsByTags")
                 .description("Muliple tags can be provided with comma 
separated strings. Use tag1, tag2, tag3 for testing.")
@@ -70,7 +75,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Tags to filter by")
                 .endParam()
-                .to("direct:findPetsByTags")
+                .to("direct:findPetsByTags");
+
+        rest("/api/v3")
             .get("/pet/{petId}")
                 .id("getPetById")
                 .description("Returns a single pet")
@@ -123,7 +130,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet id to delete")
                 .endParam()
-                .to("direct:deletePet")
+                .to("direct:deletePet");
+
+        rest("/api/v3")
             .post("/pet/{petId}/uploadImage")
                 .id("uploadFile")
                 .consumes("multipart/form-data")
@@ -149,12 +158,16 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("file to upload")
                 .endParam()
-                .to("direct:uploadFile")
+                .to("direct:uploadFile");
+
+        rest("/api/v3")
             .get("/store/inventory")
                 .id("getInventory")
                 .description("Returns a map of status codes to quantities")
                 .produces("application/json")
-                .to("direct:getInventory")
+                .to("direct:getInventory");
+
+        rest("/api/v3")
             .post("/store/order")
                 .id("placeOrder")
                 .consumes("*/*")
@@ -165,7 +178,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("order placed for purchasing the pet")
                 .endParam()
-                .to("direct:placeOrder")
+                .to("direct:placeOrder");
+
+        rest("/api/v3")
             .get("/store/order/{orderId}")
                 .id("getOrderById")
                 .description("For valid response try integer IDs with value >= 
1 and <= 10. Other values will generated exceptions")
@@ -188,7 +203,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("ID of the order that needs to be deleted")
                 .endParam()
-                .to("direct:deleteOrder")
+                .to("direct:deleteOrder");
+
+        rest("/api/v3")
             .post("/user")
                 .id("createUser")
                 .description("This can only be done by the logged in user.")
@@ -199,7 +216,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Created user object")
                 .endParam()
-                .to("direct:createUser")
+                .to("direct:createUser");
+
+        rest("/api/v3")
             .post("/user/createWithArray")
                 .id("createUsersWithArrayInput")
                 .consumes("*/*")
@@ -209,7 +228,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithArrayInput")
+                .to("direct:createUsersWithArrayInput");
+
+        rest("/api/v3")
             .post("/user/createWithList")
                 .id("createUsersWithListInput")
                 .consumes("*/*")
@@ -219,7 +240,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithListInput")
+                .to("direct:createUsersWithListInput");
+
+        rest("/api/v3")
             .get("/user/login")
                 .id("loginUser")
                 .produces("application/xml,application/json")
@@ -237,10 +260,14 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
-                .to("direct:loginUser")
+                .to("direct:loginUser");
+
+        rest("/api/v3")
             .get("/user/logout")
                 .id("logoutUser")
-                .to("direct:logoutUser")
+                .to("direct:logoutUser");
+
+        rest("/api/v3")
             .get("/user/{username}")
                 .id("getUserByName")
                 .produces("application/xml,application/json")
@@ -281,5 +308,6 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .description("The name that needs to be deleted")
                 .endParam()
                 .to("direct:deleteUser");
+
     }
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
index 614fd01..18fa1e7 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/resources/OpenApiV3PetstoreWithRestComponent.txt
@@ -45,7 +45,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet object that needs to be added to the 
store")
                 .endParam()
-                .to("direct:addPet")
+                .to("direct:addPet");
+
+        rest("/api/v3")
             .get("/pet/findByStatus")
                 .id("findPetsByStatus")
                 .description("Multiple status values can be provided with 
comma separated strings")
@@ -59,7 +61,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Status values that need to be considered for 
filter")
                 .endParam()
-                .to("direct:findPetsByStatus")
+                .to("direct:findPetsByStatus");
+
+        rest("/api/v3")
             .get("/pet/findByTags")
                 .id("findPetsByTags")
                 .description("Muliple tags can be provided with comma 
separated strings. Use tag1, tag2, tag3 for testing.")
@@ -73,7 +77,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Tags to filter by")
                 .endParam()
-                .to("direct:findPetsByTags")
+                .to("direct:findPetsByTags");
+
+        rest("/api/v3")
             .get("/pet/{petId}")
                 .id("getPetById")
                 .description("Returns a single pet")
@@ -126,7 +132,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Pet id to delete")
                 .endParam()
-                .to("direct:deletePet")
+                .to("direct:deletePet");
+
+        rest("/api/v3")
             .post("/pet/{petId}/uploadImage")
                 .id("uploadFile")
                 .consumes("multipart/form-data")
@@ -152,12 +160,16 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("file to upload")
                 .endParam()
-                .to("direct:uploadFile")
+                .to("direct:uploadFile");
+
+        rest("/api/v3")
             .get("/store/inventory")
                 .id("getInventory")
                 .description("Returns a map of status codes to quantities")
                 .produces("application/json")
-                .to("direct:getInventory")
+                .to("direct:getInventory");
+
+        rest("/api/v3")
             .post("/store/order")
                 .id("placeOrder")
                 .consumes("*/*")
@@ -168,7 +180,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("order placed for purchasing the pet")
                 .endParam()
-                .to("direct:placeOrder")
+                .to("direct:placeOrder");
+
+        rest("/api/v3")
             .get("/store/order/{orderId}")
                 .id("getOrderById")
                 .description("For valid response try integer IDs with value >= 
1 and <= 10. Other values will generated exceptions")
@@ -191,7 +205,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("ID of the order that needs to be deleted")
                 .endParam()
-                .to("direct:deleteOrder")
+                .to("direct:deleteOrder");
+
+        rest("/api/v3")
             .post("/user")
                 .id("createUser")
                 .description("This can only be done by the logged in user.")
@@ -202,7 +218,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("Created user object")
                 .endParam()
-                .to("direct:createUser")
+                .to("direct:createUser");
+
+        rest("/api/v3")
             .post("/user/createWithArray")
                 .id("createUsersWithArrayInput")
                 .consumes("*/*")
@@ -212,7 +230,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithArrayInput")
+                .to("direct:createUsersWithArrayInput");
+
+        rest("/api/v3")
             .post("/user/createWithList")
                 .id("createUsersWithListInput")
                 .consumes("*/*")
@@ -222,7 +242,9 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("List of user object")
                 .endParam()
-                .to("direct:createUsersWithListInput")
+                .to("direct:createUsersWithListInput");
+
+        rest("/api/v3")
             .get("/user/login")
                 .id("loginUser")
                 .produces("application/xml,application/json")
@@ -240,10 +262,14 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .required(true)
                     .description("The password for login in clear text")
                 .endParam()
-                .to("direct:loginUser")
+                .to("direct:loginUser");
+
+        rest("/api/v3")
             .get("/user/logout")
                 .id("logoutUser")
-                .to("direct:logoutUser")
+                .to("direct:logoutUser");
+
+        rest("/api/v3")
             .get("/user/{username}")
                 .id("getUserByName")
                 .produces("application/xml,application/json")
@@ -284,5 +310,6 @@ public final class OpenApiPetstore extends RouteBuilder {
                     .description("The name that needs to be deleted")
                 .endParam()
                 .to("direct:deleteUser");
+
     }
 }

Reply via email to