From 795f39d238604681658414d5880d0635454bc86b Mon Sep 17 00:00:00 2001 From: michaelin007 Date: Mon, 5 Feb 2024 06:42:49 +0000 Subject: [PATCH] https://jira.baeldung.com/browse/BAEL-5235 --- apache-libraries-2/pom.xml | 19 ++++++ .../dynamicrouter/DynamicRouterBean.java | 28 +++++++++ .../dynamicrouter/DynamicRouterRoute.java | 13 ++++ .../DynamicRouterRouteUnitTest.java | 63 +++++++++++++++++++ .../dynamicrouting/DynamicRouteBuilder.java | 4 ++ .../dynamicrouting/DynamicRouterBean.java | 4 ++ .../dynamicrouter/DynamicRouterUnitTest.java | 4 ++ 7 files changed, 135 insertions(+) create mode 100644 apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java create mode 100644 apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java create mode 100644 apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java create mode 100644 messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java create mode 100644 messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java create mode 100644 messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java diff --git a/apache-libraries-2/pom.xml b/apache-libraries-2/pom.xml index d188204208..2e7ef0344c 100644 --- a/apache-libraries-2/pom.xml +++ b/apache-libraries-2/pom.xml @@ -19,10 +19,29 @@ validation-api ${javax.validation.validation-api.version} + + org.apache.camel + camel-core + ${camel.version} + + + + org.apache.camel + camel-test-junit5 + ${camel.version} + test + + + + org.apache.camel + camel-main + ${camel.version} + 2.0.1.Final + 4.3.0 \ No newline at end of file diff --git a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java new file mode 100644 index 0000000000..3df861d2b2 --- /dev/null +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java @@ -0,0 +1,28 @@ +package com.baeldung.dynamicrouter; + +import org.apache.camel.ExchangeProperties; + +import java.util.Map; + +public class DynamicRouterBean { + public String route(String body, @ExchangeProperties Map properties) { + int invoked = 0; + Integer current = (Integer) properties.get("invoked"); + if (current != null) { + invoked = current; + } + invoked++; + properties.put("invoked", invoked); + + if (body.equalsIgnoreCase("mock") && invoked == 1) { + return "mock:dynamicRouter"; + } else if (body.equalsIgnoreCase("direct") && invoked == 1) { + return "mock:directDynamicRouter"; + } else if (body.equalsIgnoreCase("seda") && invoked == 1) { + return "mock:sedaDynamicRouter"; + } else if (body.equalsIgnoreCase("book") && invoked == 1) { + return "mock:bookDynamicRouter"; + } + return null; + } +} diff --git a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java new file mode 100644 index 0000000000..875263f0b1 --- /dev/null +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java @@ -0,0 +1,13 @@ +package com.baeldung.dynamicrouter; + +import org.apache.camel.builder.RouteBuilder; + +public class DynamicRouterRoute extends RouteBuilder { + + @Override + public void configure() { + + from("direct:dynamicRouter").dynamicRouter(method(DynamicRouterBean.class, "route")); + + } +} diff --git a/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java new file mode 100644 index 0000000000..fa8cab99a0 --- /dev/null +++ b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java @@ -0,0 +1,63 @@ +package dynamicrouter; + +import com.baeldung.dynamicrouter.DynamicRouterRoute; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.Test; + +public class DynamicRouterRouteUnitTest extends CamelTestSupport { + + @Override + protected RoutesBuilder createRouteBuilder() { + return new DynamicRouterRoute(); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndMockAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:dynamicRouter"); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("mock")); + context.start(); + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndDirectAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = context.getEndpoint("mock:directDynamicRouter", MockEndpoint.class); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("direct")); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndSedaAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = context.getEndpoint("mock:sedaDynamicRouter", MockEndpoint.class); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("seda")); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndBookAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:bookDynamicRouter"); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("book")); + MockEndpoint.assertIsSatisfied(context); + } + +} \ No newline at end of file diff --git a/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java new file mode 100644 index 0000000000..0019a56cae --- /dev/null +++ b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java @@ -0,0 +1,4 @@ +package com.baeldung.camel.apache.dynamicrouting; + +public class DynamicRouteBuilder { +} diff --git a/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java new file mode 100644 index 0000000000..3128551b0a --- /dev/null +++ b/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java @@ -0,0 +1,4 @@ +package com.baeldung.camel.apache.dynamicrouting; + +public class DynamicRouterBean { +} diff --git a/messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java b/messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java new file mode 100644 index 0000000000..a5a7a2c4fa --- /dev/null +++ b/messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java @@ -0,0 +1,4 @@ +package com.apache.dynamicrouter; + +public class DynamicRouterUnitTest { +}