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 2d0726f  CAMEL-16873: Route template parameter are not replaced when 
dumpRoutesAsXML is invoked from JMX Mbean
2d0726f is described below

commit 2d0726f2c11a0616e30a7ff47a9727e9169dc1de
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Mar 20 21:04:56 2022 +0100

    CAMEL-16873: Route template parameter are not replaced when dumpRoutesAsXML 
is invoked from JMX Mbean
---
 .../spring/routebuilder/SpringRouteTemplateTest.java   | 18 ++++++++++++++++++
 .../apache/camel/xml/jaxb/JaxbModelToXMLDumper.java    | 14 +++++++++++---
 2 files changed, 29 insertions(+), 3 deletions(-)

diff --git 
a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/routebuilder/SpringRouteTemplateTest.java
 
b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/routebuilder/SpringRouteTemplateTest.java
index 576e18e..8e0ed85 100644
--- 
a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/routebuilder/SpringRouteTemplateTest.java
+++ 
b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/routebuilder/SpringRouteTemplateTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
+import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.spring.SpringTestSupport;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -161,4 +162,21 @@ public class SpringRouteTemplateTest extends 
SpringTestSupport {
         Assertions.assertTrue(xml.contains("<from uri=\"direct:one\"/>"));
     }
 
+    @Test
+    public void testDumpModelsAsXml() throws Exception {
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("foo", "one");
+        parameters.put("bar", "cheese");
+        context.addRouteFromTemplate("first", "myTemplate", parameters);
+
+        RoutesDefinition def = new RoutesDefinition();
+        def.setRoutes(context.getRouteDefinitions());
+
+        ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+        String xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, def, 
true, true);
+
+        assertNotNull(xml);
+        Assertions.assertTrue(xml.contains("<from uri=\"direct:one\"/>"));
+    }
+
 }
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
index 2e25f3c..41a998f 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -50,6 +51,7 @@ import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.spi.ModelToXMLDumper;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.KeyValueHolder;
 import org.apache.camel.util.xml.XmlLineNumberParser;
 
@@ -182,16 +184,22 @@ public class JaxbModelToXMLDumper implements 
ModelToXMLDumper {
 
                     if (resolvePlaceholders) {
                         PropertiesComponent pc = 
context.getPropertiesComponent();
+                        Properties prop = new Properties();
+                        Iterator<?> it = null;
                         if (definition instanceof RouteDefinition) {
-                            RouteDefinition routeDefinition = 
(RouteDefinition) definition;
+                            it = ObjectHelper.createIterator(definition);
+                        } else if (definition instanceof RoutesDefinition) {
+                            it = 
ObjectHelper.createIterator(((RoutesDefinition) definition).getRoutes());
+                        }
+                        while (it != null && it.hasNext()) {
+                            RouteDefinition routeDefinition = 
(RouteDefinition) it.next();
                             // if the route definition was created via a route 
template then we need to prepare its parameters when the route is being created 
and started
                             if (routeDefinition.isTemplate() != null && 
routeDefinition.isTemplate()
                                     && routeDefinition.getTemplateParameters() 
!= null) {
-                                Properties prop = new Properties();
                                 
prop.putAll(routeDefinition.getTemplateParameters());
-                                pc.setLocalProperties(prop);
                             }
                         }
+                        pc.setLocalProperties(prop);
                         try {
                             after = context.resolvePropertyPlaceholders(after);
                         } catch (Exception e) {

Reply via email to