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 <claus.ib...@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() {