You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/07/30 14:04:48 UTC

[camel] 02/02: CAMEL-16823: kamelets should support dynamic endpoints from toD

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 <cl...@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());