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 {
+}