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 2020/03/19 12:58:31 UTC

[camel] 02/02: CAMEL-14741: The FluentProducerTemplate.withTemplateCustomizer is broken

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

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

commit 9da9495feb617f319e27dbb82aa396c6d909e676
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 19 13:45:00 2020 +0100

    CAMEL-14741: The FluentProducerTemplate.withTemplateCustomizer is broken
---
 .../main/java/org/apache/camel/FluentProducerTemplate.java   | 12 ++++++------
 .../camel/impl/engine/DefaultFluentProducerTemplate.java     | 12 ++++++++++++
 .../org/apache/camel/builder/FluentProducerTemplateTest.java | 11 +++++++++++
 3 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java b/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
index 87a00ab..9175510 100644
--- a/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
+++ b/core/camel-api/src/main/java/org/apache/camel/FluentProducerTemplate.java
@@ -182,16 +182,16 @@ public interface FluentProducerTemplate extends Service {
      *
      * <pre>
      * {@code
-     * FluentProducerTemplate.on(context)
-     *     .withTemplateCustomizer(
-     *         template -> {
-     *             template.setExecutorService(myExecutor);
-     *             template.setMaximumCacheSize(10);
+     * FluentProducerTemplate fluent = context.createFluentProducerTemplate();
+     * fluent.withTemplateCustomizer(
+     *         t -> {
+     *             t.setExecutorService(myExecutor);
+     *             t.setMaximumCacheSize(10);
      *         }
      *      )
      *     .withBody("the body")
      *     .to("direct:start")
-     *     .request()}
+     *     .send()}
      * </pre>
      *
      * Note that it is invoked only once.
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
index 9a19e65..74dda14 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
@@ -177,6 +177,14 @@ public class DefaultFluentProducerTemplate extends ServiceSupport implements Flu
     @Override
     public FluentProducerTemplate withTemplateCustomizer(final Consumer<ProducerTemplate> templateCustomizer) {
         this.templateCustomizer.set(templateCustomizer);
+
+        if (template != null) {
+            // need to re-initialize template since we have a customizer
+            ServiceHelper.stopService(template);
+            templateCustomizer.accept(template);
+            ServiceHelper.startService(template);
+        }
+
         return this;
     }
 
@@ -374,6 +382,10 @@ public class DefaultFluentProducerTemplate extends ServiceSupport implements Flu
             return defaultEndpoint;
         }
 
+        if (template != null && template.getDefaultEndpoint() != null) {
+            return template.getDefaultEndpoint();
+        }
+
         throw new IllegalArgumentException("No endpoint configured on FluentProducerTemplate. You can configure an endpoint with to(uri)");
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
index d4b3f7f..d3922c1 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/FluentProducerTemplateTest.java
@@ -329,6 +329,17 @@ public class FluentProducerTemplateTest extends ContextTestSupport {
         assertEquals("body-2", exchange2.getIn().getBody(String.class));
     }
 
+    @Test
+    public void testWithCustomizer() throws Exception {
+        getMockEndpoint("mock:custom").expectedBodiesReceived("Hello World");
+
+        FluentProducerTemplate fluent = context.createFluentProducerTemplate().withTemplateCustomizer(t -> t.setDefaultEndpointUri("mock:custom"));
+
+        fluent.withBody("Hello World").send();
+
+        assertMockEndpointsSatisfied();
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {