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) {