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>