From 795f39d238604681658414d5880d0635454bc86b Mon Sep 17 00:00:00 2001 From: michaelin007 Date: Mon, 5 Feb 2024 06:42:49 +0000 Subject: [PATCH 1/4] 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 { +} From f63fbeca4f74d249e2ba34ef6ea79f76be7d6aae Mon Sep 17 00:00:00 2001 From: michaelin007 Date: Mon, 5 Feb 2024 06:45:06 +0000 Subject: [PATCH 2/4] https://jira.baeldung.com/browse/BAEL-5235 --- .../camel/apache/dynamicrouting/DynamicRouteBuilder.java | 4 ---- .../camel/apache/dynamicrouting/DynamicRouterBean.java | 4 ---- .../java/com/apache/dynamicrouter/DynamicRouterUnitTest.java | 4 ---- 3 files changed, 12 deletions(-) delete mode 100644 messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java delete mode 100644 messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java delete mode 100644 messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java 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 deleted file mode 100644 index 0019a56cae..0000000000 --- a/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouteBuilder.java +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index 3128551b0a..0000000000 --- a/messaging-modules/apache-camel/src/main/java/com/baeldung/camel/apache/dynamicrouting/DynamicRouterBean.java +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index a5a7a2c4fa..0000000000 --- a/messaging-modules/apache-camel/src/test/java/com/apache/dynamicrouter/DynamicRouterUnitTest.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.apache.dynamicrouter; - -public class DynamicRouterUnitTest { -} From 8af3dd780f4c9fe8782745c39a666d8de5744507 Mon Sep 17 00:00:00 2001 From: michaelin007 Date: Wed, 7 Feb 2024 07:01:48 +0000 Subject: [PATCH 3/4] https://jira.baeldung.com/browse/BAEL-5235 --- .../java/com/baeldung/dynamicrouter/DynamicRouterBean.java | 4 ++-- .../test/java/dynamicrouter/DynamicRouterRouteUnitTest.java | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) 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 index 3df861d2b2..8bc455353b 100644 --- a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java @@ -20,8 +20,8 @@ public class DynamicRouterBean { return "mock:directDynamicRouter"; } else if (body.equalsIgnoreCase("seda") && invoked == 1) { return "mock:sedaDynamicRouter"; - } else if (body.equalsIgnoreCase("book") && invoked == 1) { - return "mock:bookDynamicRouter"; + } else if (body.equalsIgnoreCase("file") && invoked == 1) { + return "mock:fileDynamicRouter"; } return null; } diff --git a/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java index fa8cab99a0..6401fa4be2 100644 --- a/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java +++ b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java @@ -21,7 +21,6 @@ public class DynamicRouterRouteUnitTest extends CamelTestSupport { template.send("direct:dynamicRouter", exchange -> exchange.getIn() .setBody("mock")); - context.start(); MockEndpoint.assertIsSatisfied(context); } @@ -45,18 +44,17 @@ public class DynamicRouterRouteUnitTest extends CamelTestSupport { template.send("direct:dynamicRouter", exchange -> exchange.getIn() .setBody("seda")); - MockEndpoint.assertIsSatisfied(context); } @Test void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndBookAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { - MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:bookDynamicRouter"); + MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:fileDynamicRouter"); mockDynamicEndpoint.expectedMessageCount(1); template.send("direct:dynamicRouter", exchange -> exchange.getIn() - .setBody("book")); + .setBody("file")); MockEndpoint.assertIsSatisfied(context); } From 4288f99d1064f0a666a5fb392cdeb8a32a9a3bd2 Mon Sep 17 00:00:00 2001 From: michaelin007 Date: Fri, 9 Feb 2024 08:50:46 +0000 Subject: [PATCH 4/4] https://jira.baeldung.com/browse/BAEL-5235 --- .../dynamicrouter/DynamicRouterBean.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) 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 index 8bc455353b..a28c3959a4 100644 --- a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java @@ -6,22 +6,23 @@ 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++; + int invoked = (int) properties.getOrDefault("invoked", 0) + 1; + 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("file") && invoked == 1) { - return "mock:fileDynamicRouter"; + if (invoked == 1) { + switch (body.toLowerCase()) { + case "mock": + return "mock:dynamicRouter"; + case "direct": + return "mock:directDynamicRouter"; + case "seda": + return "mock:sedaDynamicRouter"; + case "file": + return "mock:fileDynamicRouter"; + default: + break; + } } return null; }