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
commit 17c7bb2949b0c32ba095672bb99d64f19c924235 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Jul 30 16:03:24 2021 +0200 CAMEL-16823: kamelets should support dynamic endpoints from toD --- .../{KameletToDTest.java => KameletRecipientListTest.java} | 8 +++----- .../java/org/apache/camel/component/kamelet/KameletToDTest.java | 4 +--- .../kamelet/{KameletToDTest.java => KameletWireTapTest.java} | 8 +++----- .../src/main/java/org/apache/camel/reifier/ToDynamicReifier.java | 8 ++++++++ .../src/main/java/org/apache/camel/reifier/WireTapReifier.java | 9 +++++++++ 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRecipientListTest.java similarity index 91% copy from components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java copy to components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRecipientListTest.java index dce4dc6..2121508 100644 --- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java +++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRecipientListTest.java @@ -19,14 +19,12 @@ package org.apache.camel.component.kamelet; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -@Disabled -public class KameletToDTest extends CamelTestSupport { +public class KameletRecipientListTest extends CamelTestSupport { @Test - public void testToD() throws Exception { + public void testRecipientList() throws Exception { getMockEndpoint("mock:foo").expectedBodiesReceived("A"); getMockEndpoint("mock:bar").expectedBodiesReceived("B"); @@ -50,7 +48,7 @@ public class KameletToDTest extends CamelTestSupport { routeTemplate("broker") .templateParameter("queue") .from("kamelet:source") - .toD("seda:{{name}}"); + .recipientList(constant("mock:{{queue}}")); from("direct:foo") .kamelet("broker?queue=foo"); diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java index dce4dc6..e72e32f 100644 --- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java +++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java @@ -19,10 +19,8 @@ package org.apache.camel.component.kamelet; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -@Disabled public class KameletToDTest extends CamelTestSupport { @Test @@ -50,7 +48,7 @@ public class KameletToDTest extends CamelTestSupport { routeTemplate("broker") .templateParameter("queue") .from("kamelet:source") - .toD("seda:{{name}}"); + .toD("mock:{{queue}}"); from("direct:foo") .kamelet("broker?queue=foo"); diff --git a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletWireTapTest.java similarity index 91% copy from components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java copy to components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletWireTapTest.java index dce4dc6..ff64836 100644 --- a/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletToDTest.java +++ b/components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletWireTapTest.java @@ -19,14 +19,12 @@ package org.apache.camel.component.kamelet; import org.apache.camel.RoutesBuilder; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.junit5.CamelTestSupport; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -@Disabled -public class KameletToDTest extends CamelTestSupport { +public class KameletWireTapTest extends CamelTestSupport { @Test - public void testToD() throws Exception { + public void testWireTap() throws Exception { getMockEndpoint("mock:foo").expectedBodiesReceived("A"); getMockEndpoint("mock:bar").expectedBodiesReceived("B"); @@ -50,7 +48,7 @@ public class KameletToDTest extends CamelTestSupport { routeTemplate("broker") .templateParameter("queue") .from("kamelet:source") - .toD("seda:{{name}}"); + .wireTap("mock:{{queue}}"); from("direct:foo") .kamelet("broker?queue=foo"); diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java index fc4ad92..aece53b 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java @@ -21,6 +21,8 @@ import org.apache.camel.Expression; import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.model.ProcessorDefinition; +import org.apache.camel.model.ProcessorDefinitionHelper; +import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.ToDynamicDefinition; import org.apache.camel.processor.SendDynamicProcessor; import org.apache.camel.spi.Language; @@ -45,6 +47,12 @@ public class ToDynamicReifier<T extends ToDynamicDefinition> extends ProcessorRe exp = createExpression(uri); } + // route templates should pre parse uri as they have dynamic values as part of their template parameters + RouteDefinition rd = ProcessorDefinitionHelper.getRoute(definition); + if (rd != null && rd.isTemplate() != null && rd.isTemplate()) { + uri = EndpointHelper.resolveEndpointUriPropertyPlaceholders(camelContext, uri); + } + SendDynamicProcessor processor = new SendDynamicProcessor(uri, exp); processor.setCamelContext(camelContext); processor.setPattern(parse(ExchangePattern.class, definition.getPattern())); diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java index 23a7508..c43c592 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java @@ -26,12 +26,15 @@ import org.apache.camel.ExtendedCamelContext; import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.model.ProcessorDefinition; +import org.apache.camel.model.ProcessorDefinitionHelper; +import org.apache.camel.model.RouteDefinition; import org.apache.camel.model.SetHeaderDefinition; import org.apache.camel.model.WireTapDefinition; import org.apache.camel.processor.SendDynamicProcessor; import org.apache.camel.processor.SendProcessor; import org.apache.camel.processor.WireTapProcessor; import org.apache.camel.support.CamelContextHelper; +import org.apache.camel.support.EndpointHelper; import org.apache.camel.support.LanguageSupport; import org.apache.camel.util.StringHelper; @@ -58,6 +61,12 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> { uri = StringHelper.notEmpty(definition.getUri(), "uri", this); } + // route templates should pre parse uri as they have dynamic values as part of their template parameters + RouteDefinition rd = ProcessorDefinitionHelper.getRoute(definition); + if (rd != null && rd.isTemplate() != null && rd.isTemplate()) { + uri = EndpointHelper.resolveEndpointUriPropertyPlaceholders(camelContext, uri); + } + SendDynamicProcessor dynamicSendProcessor = null; SendProcessor sendProcessor = null; boolean simple = LanguageSupport.hasSimpleFunction(definition.getUri());