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

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


The following commit(s) were added to refs/heads/camel-4.8.x by this push:
     new f2c2c21f29e CAMEL-21512: camel-jbang - camel transform route with 
multiple <rest> only include last
f2c2c21f29e is described below

commit f2c2c21f29ec128e6293f3096b99ec2946e1b0a9
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sun Dec 8 12:24:32 2024 +0100

    CAMEL-21512: camel-jbang - camel transform route with multiple <rest> only 
include last
---
 .../services/org/apache/camel/other.properties     |  2 +-
 .../src/generated/resources/xml-io-dsl.json        |  2 +-
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   | 53 +++++++----------
 .../camel/dsl/xml/io/XmlBlueprintLoadTest.java     | 16 +++++
 .../org/apache/camel/dsl/xml/io/blueprintRests.xml | 68 ++++++++++++++++++++++
 5 files changed, 106 insertions(+), 35 deletions(-)

diff --git 
a/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
 
b/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
index 680b55a1b1d..8f5851fae7c 100644
--- 
a/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
+++ 
b/dsl/camel-xml-io-dsl/src/generated/resources/META-INF/services/org/apache/camel/other.properties
@@ -2,7 +2,7 @@
 name=xml-io-dsl
 groupId=org.apache.camel
 artifactId=camel-xml-io-dsl
-version=4.8.2-SNAPSHOT
+version=4.8.3-SNAPSHOT
 projectName=Camel :: XML DSL with camel-xml-io
 projectDescription=Camel XML DSL with camel-xml-io
 annotations=routes.language=xml
diff --git a/dsl/camel-xml-io-dsl/src/generated/resources/xml-io-dsl.json 
b/dsl/camel-xml-io-dsl/src/generated/resources/xml-io-dsl.json
index 13f30ce3f4c..3e06b134349 100644
--- a/dsl/camel-xml-io-dsl/src/generated/resources/xml-io-dsl.json
+++ b/dsl/camel-xml-io-dsl/src/generated/resources/xml-io-dsl.json
@@ -11,6 +11,6 @@
     "metadata": { "routes.language": "xml" },
     "groupId": "org.apache.camel",
     "artifactId": "camel-xml-io-dsl",
-    "version": "4.8.2-SNAPSHOT"
+    "version": "4.8.3-SNAPSHOT"
   }
 }
diff --git 
a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
 
b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index 95a5292a31f..eb57f9581e9 100644
--- 
a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
+++ 
b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -38,14 +38,11 @@ import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteConfigurationsDefinition;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.model.TemplatedRouteDefinition;
 import org.apache.camel.model.TemplatedRoutesDefinition;
 import org.apache.camel.model.app.BeansDefinition;
 import org.apache.camel.model.rest.RestConfigurationDefinition;
-import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
@@ -208,55 +205,45 @@ public class XmlRoutesBuilderLoader extends 
RouteBuilderLoaderSupport {
                     }
                 }
 
-                app.getRests().forEach(r -> {
-                    r.setResource(getResource());
-                    List<RestDefinition> list = new ArrayList<>();
-                    list.add(r);
+                if (!app.getRests().isEmpty()) {
+                    app.getRests().forEach(r -> r.setResource(getResource()));
                     RestsDefinition def = new RestsDefinition();
                     def.setResource(getResource());
-                    def.setRests(list);
+                    def.setRests(app.getRests());
                     setRestCollection(def);
-                });
+                }
 
-                app.getRouteConfigurations().forEach(rc -> {
-                    rc.setResource(getResource());
-                    List<RouteConfigurationDefinition> list = new 
ArrayList<>();
-                    list.add(rc);
+                if (!app.getRouteConfigurations().isEmpty()) {
+                    app.getRouteConfigurations().forEach(r -> 
r.setResource(getResource()));
                     RouteConfigurationsDefinition def = new 
RouteConfigurationsDefinition();
                     def.setResource(getResource());
-                    def.setRouteConfigurations(list);
+                    def.setRouteConfigurations(app.getRouteConfigurations());
                     addConfigurations(def);
-                });
+                }
 
-                app.getRouteTemplates().forEach(rt -> {
-                    rt.setResource(getResource());
-                    List<RouteTemplateDefinition> list = new ArrayList<>();
-                    list.add(rt);
+                if (!app.getRouteTemplates().isEmpty()) {
+                    app.getRouteTemplates().forEach(r -> 
r.setResource(getResource()));
                     RouteTemplatesDefinition def = new 
RouteTemplatesDefinition();
                     def.setResource(getResource());
-                    def.setRouteTemplates(list);
+                    def.setRouteTemplates(app.getRouteTemplates());
                     setRouteTemplateCollection(def);
-                });
+                }
 
-                app.getTemplatedRoutes().forEach(tr -> {
-                    tr.setResource(getResource());
-                    List<TemplatedRouteDefinition> list = new ArrayList<>();
-                    list.add(tr);
+                if (!app.getTemplatedRoutes().isEmpty()) {
+                    app.getTemplatedRoutes().forEach(r -> 
r.setResource(getResource()));
                     TemplatedRoutesDefinition def = new 
TemplatedRoutesDefinition();
                     def.setResource(getResource());
-                    def.setTemplatedRoutes(list);
+                    def.setTemplatedRoutes(app.getTemplatedRoutes());
                     setTemplatedRouteCollection(def);
-                });
+                }
 
-                app.getRoutes().forEach(r -> {
-                    r.setResource(getResource());
-                    List<RouteDefinition> list = new ArrayList<>();
-                    list.add(r);
+                if (!app.getRoutes().isEmpty()) {
+                    app.getRoutes().forEach(r -> r.setResource(getResource()));
                     RoutesDefinition def = new RoutesDefinition();
                     def.setResource(getResource());
-                    def.setRoutes(list);
+                    def.setRoutes(app.getRoutes());
                     addRoutes(def);
-                });
+                }
             }
 
             private void addRoutes(RoutesDefinition routes) {
diff --git 
a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlBlueprintLoadTest.java
 
b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlBlueprintLoadTest.java
index c2b92ebf494..af9623fbd65 100644
--- 
a/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlBlueprintLoadTest.java
+++ 
b/dsl/camel-xml-io-dsl/src/test/java/org/apache/camel/dsl/xml/io/XmlBlueprintLoadTest.java
@@ -40,4 +40,20 @@ public class XmlBlueprintLoadTest {
         }
     }
 
+    @Test
+    public void testLoadRestsBuilderFromXml() throws Exception {
+        try (DefaultCamelContext context = new DefaultCamelContext()) {
+            // load OSGi blueprint XML <blueprint> with embedded <camelContext>
+            Resource resource = 
PluginHelper.getResourceLoader(context).resolveResource(
+                    "/org/apache/camel/dsl/xml/io/blueprintRests.xml");
+
+            Assertions.assertDoesNotThrow(() -> {
+                // should be able to parse the file and not fail (camel-jbang 
supports creating spring beans)
+                PluginHelper.getRoutesLoader(context).loadRoutes(resource);
+            });
+
+            Assertions.assertEquals(2, context.getRestDefinitions().size());
+        }
+    }
+
 }
diff --git 
a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/blueprintRests.xml
 
b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/blueprintRests.xml
new file mode 100644
index 00000000000..89387311206
--- /dev/null
+++ 
b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/blueprintRests.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+           xsi:schemaLocation="
+           http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>
+
+    <camelContext id="myCamel" 
xmlns="http://camel.apache.org/schema/blueprint";>
+        <rest path="/user" consumes="application/json" 
produces="application/json">
+            <get path="/{id}">
+                <param name="id" type="path" description="The id of the user 
to get" dataType="integer"/>
+                <responseMessage message="The user that was found"/>
+                <responseMessage code="404" message="User not found"/>
+                <to uri="direct:getUser"/>
+            </get>
+            <put>
+                <param name="body" type="body" description="The user to update 
or create"/>
+                <to uri="stub:userService?method=updateUser"/>
+            </put>
+            <get path="/findAll">
+                <responseMessage message="All the users"/>
+                <to uri="stub:userService?method=listUsers"/>
+            </get>
+        </rest>
+
+        <rest path="/echo">
+            <get path="/ping">
+                <to uri="direct:echo"/>
+            </get>
+        </rest>
+
+        <route>
+            <from uri="direct:getUser"/>
+            <to uri="stub:userService?method=getUser(${header.id})"/>
+            <filter>
+                <simple>${body} == null</simple>
+                <setHeader name="Exchange.HTTP_RESPONSE_CODE">
+                    <constant>404</constant>
+                </setHeader>
+            </filter>
+        </route>
+        <route>
+            <from uri="direct:echo"/>
+            <setBody>
+                <constant>pong</constant>
+            </setBody>
+        </route>
+
+    </camelContext>
+
+</blueprint>

Reply via email to