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

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

commit 452d2165d60914eaf2980f2c761cfaa824d17ca1
Author: Rhuan Rocha <[email protected]>
AuthorDate: Fri Aug 5 12:19:23 2022 -0300

    CAMEL-18328 - Fixing template parameter to configurationId
    
    Signed-off-by: Rhuan Rocha <[email protected]>
---
 .../org/apache/camel/model/RoutesDefinition.java   | 22 +++++++++++++--
 .../model/RouteConfigurationOnExceptionTest.java   | 31 ++++++++++++++++++++++
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
index d1dd9ec93eb..c39cc78e045 100644
--- 
a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ 
b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -30,6 +31,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.spi.AsEndpointUri;
 import org.apache.camel.spi.Metadata;
@@ -37,6 +39,7 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.ResourceAware;
 import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.PatternHelper;
+import org.apache.camel.util.OrderedLocationProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -254,8 +257,23 @@ public class RoutesDefinition extends 
OptionalIdentifiedDefinition<RoutesDefinit
             if (globalConfigurations != null) {
 
                 // if there are multiple ids configured then we should apply 
in that same order
-                String[] ids = route.getRouteConfigurationId() != null
-                        ? route.getRouteConfigurationId().split(",") : new 
String[] { "*" };
+                String[] ids;
+                if (route.getRouteConfigurationId() != null) {
+                    // if the RouteConfigurationId was configured with 
property placeholder it should be resolved
+                    if (route.getTemplateParameters() != null && 
route.getRouteConfigurationId().startsWith("{{")) {
+                        OrderedLocationProperties locationProperties = new 
OrderedLocationProperties();
+                        locationProperties.putAll("TemplateProperties", new 
HashMap<>(route.getTemplateParameters()));
+                        
camelContext.getPropertiesComponent().setLocalProperties(locationProperties);
+                        ids = camelContext.adapt(ExtendedCamelContext.class)
+                                
.resolvePropertyPlaceholders(route.getRouteConfigurationId(), true)
+                                .split(",");
+                    } else {
+                        ids = route.getRouteConfigurationId().split(",");
+                    }
+                } else {
+                    ids = new String[] { "*" };
+                }
+
                 for (String id : ids) {
                     // sort according to ordered
                     
globalConfigurations.stream().sorted(OrderedComparator.get())
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/model/RouteConfigurationOnExceptionTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/model/RouteConfigurationOnExceptionTest.java
index 215b714b142..0bcbb0e7bab 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/model/RouteConfigurationOnExceptionTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/model/RouteConfigurationOnExceptionTest.java
@@ -37,6 +37,18 @@ public class RouteConfigurationOnExceptionTest extends 
ContextTestSupport {
                                 .throwException(RuntimeException.class, 
"Expected Error");
                     }
                 },
+                new RouteBuilder() {
+                    @Override
+                    public void configure() {
+                        routeTemplate("route-template-parameter")
+                                .templateParameter("configuration-id")
+                                .templateParameter("route-id")
+                                .from("direct:start-template-parameter")
+                                .routeId("{{route-id}}")
+                                .routeConfigurationId("{{configuration-id}}")
+                                .throwException(RuntimeException.class, 
"Expected Error");
+                    }
+                },
                 new RouteBuilder() {
                     @Override
                     public void configure() {
@@ -45,6 +57,16 @@ public class RouteConfigurationOnExceptionTest extends 
ContextTestSupport {
                                 .add();
                     }
                 },
+                new RouteBuilder() {
+                    @Override
+                    public void configure() {
+                        TemplatedRouteBuilder.builder(context, 
"route-template-parameter")
+                                .routeId("my-test-file-route-parameter")
+                                .parameter("configuration-id", 
"my-error-handler")
+                                .parameter("route-id", "custom-route-id")
+                                .add();
+                    }
+                },
                 new RouteBuilder() {
                     @Override
                     public void configure() {
@@ -73,6 +95,15 @@ public class RouteConfigurationOnExceptionTest extends 
ContextTestSupport {
         assertMockEndpointsSatisfied();
     }
 
+    @Test
+    void testRouteTemplateCanSupportRouteConfigurationWithParameter() throws 
Exception {
+
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        getMockEndpoint("mock:result").expectedBodiesReceived("Error 
Received");
+        template.sendBody("direct:start-template-parameter", "foo");
+        assertMockEndpointsSatisfied();
+    }
+
     @Test
     void testNormalRouteCanSupportRouteConfiguration() throws Exception {
         getMockEndpoint("mock:result").expectedMessageCount(1);

Reply via email to