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