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 6c5e3b9c928 CAMEL-21512: camel-jbang - camel transform route with multiple <rest> only include last 6c5e3b9c928 is described below commit 6c5e3b9c928200b712b05e589d8de1af102dfa49 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 --- .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java | 54 +++++++---------- .../camel/dsl/xml/io/XmlBlueprintLoadTest.java | 16 +++++ .../org/apache/camel/dsl/xml/io/blueprintRests.xml | 68 ++++++++++++++++++++++ 3 files changed, 105 insertions(+), 33 deletions(-) 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 7085bdaf928..03b75a7b7c3 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,15 +38,12 @@ 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.dataformat.DataFormatsDefinition; 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; @@ -213,60 +210,51 @@ public class XmlRoutesBuilderLoader extends RouteBuilderLoaderSupport { } if (app.getDataFormats() != null) { + app.getDataFormats().forEach(r -> r.setResource(getResource())); DataFormatsDefinition list = new DataFormatsDefinition(); list.setDataFormats(app.getDataFormats()); addDataFormats(list); } - 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>