diff --git a/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBeanRouter.java b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBeanRouter.java new file mode 100644 index 0000000000..8a03f6ef18 --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBeanRouter.java @@ -0,0 +1,23 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.stereotype.Component; + +@Component +public class ConditionalBeanRouter extends RouteBuilder { + + @Override + public void configure() throws Exception { + + from("direct:start-conditional-bean") + .routeId("conditional-bean-route") + .choice() + .when(method(FruitBean.class, "isApple")) + .setHeader("favourite", simple("Apples")) + .to("mock:result") + .otherwise() + .setHeader("favourite", header("fruit")) + .to("mock:result") + .end(); + } +} diff --git a/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBodyRouter.java b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBodyRouter.java new file mode 100644 index 0000000000..99d23c747b --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalBodyRouter.java @@ -0,0 +1,24 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.stereotype.Component; + +@Component +public class ConditionalBodyRouter extends RouteBuilder { + + @Override + public void configure() throws Exception { + + from("direct:start-conditional") + .routeId("conditional-body-route") + .choice() + .when(body().contains("Baeldung")) + .setBody(simple("Goodbye, Baeldung!")) + .to("mock:result-body") + .otherwise() + .to("mock:result-body") + .end(); + + } + +} diff --git a/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalHeaderRouter.java b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalHeaderRouter.java new file mode 100644 index 0000000000..e723f97ef1 --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalHeaderRouter.java @@ -0,0 +1,23 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.stereotype.Component; + +@Component +public class ConditionalHeaderRouter extends RouteBuilder { + + @Override + public void configure() throws Exception { + + from("direct:start-conditional-header") + .routeId("conditional-header-route") + .choice() + .when(header("fruit").isEqualTo("Apple")) + .setHeader("favourite", simple("Apples")) + .to("mock:result") + .otherwise() + .setHeader("favourite", header("fruit")) + .to("mock:result") + .end(); + } +} diff --git a/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalRoutingSpringApplication.java b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalRoutingSpringApplication.java new file mode 100644 index 0000000000..f20d23068a --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/ConditionalRoutingSpringApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.camel.conditional; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ConditionalRoutingSpringApplication { + + public static void main(String[] args) { + SpringApplication.run(ConditionalRoutingSpringApplication.class, args); + } + +} diff --git a/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/FruitBean.java b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/FruitBean.java new file mode 100644 index 0000000000..080e3393b6 --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/main/java/com/baeldung/camel/conditional/FruitBean.java @@ -0,0 +1,15 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.Exchange; + +public class FruitBean { + + private FruitBean() { + } + + public static boolean isApple(Exchange exchange) { + return "Apple".equals(exchange.getIn() + .getHeader("fruit")); + } + +} diff --git a/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBeanRouterUnitTest.java b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBeanRouterUnitTest.java new file mode 100644 index 0000000000..bba1f21392 --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBeanRouterUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.EndpointInject; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.spring.junit5.CamelSpringBootTest; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +@CamelSpringBootTest +class ConditionalBeanRouterUnitTest { + + @Autowired + private ProducerTemplate template; + + @EndpointInject("mock:result") + private MockEndpoint mock; + + @Test + void whenSendBodyWithFruit_thenFavouriteHeaderReceivedSuccessfully() throws InterruptedException { + mock.expectedHeaderReceived("favourite", "Apples"); + + template.sendBodyAndHeader("direct:start-conditional-bean", null, "fruit", "Apple"); + + mock.assertIsSatisfied(); + } + +} diff --git a/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBodyRouterUnitTest.java b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBodyRouterUnitTest.java new file mode 100644 index 0000000000..22c12a741f --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalBodyRouterUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.EndpointInject; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.spring.junit5.CamelSpringBootTest; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +@CamelSpringBootTest +class ConditionalBodyRouterUnitTest { + + @Autowired + private ProducerTemplate template; + + @EndpointInject("mock:result-body") + private MockEndpoint mock; + + @Test + void whenSendBodyWithBaeldung_thenGoodbyeMessageReceivedSuccessfully() throws InterruptedException { + mock.expectedBodiesReceived("Goodbye, Baeldung!"); + + template.sendBody("direct:start-conditional", "Hello Baeldung Readers!"); + + mock.assertIsSatisfied(); + } + +} diff --git a/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalHeaderRouterUnitTest.java b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalHeaderRouterUnitTest.java new file mode 100644 index 0000000000..63fbf6682a --- /dev/null +++ b/spring-boot-modules/spring-boot-camel/src/test/java/com/baeldung/camel/conditional/ConditionalHeaderRouterUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.camel.conditional; + +import org.apache.camel.EndpointInject; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.spring.junit5.CamelSpringBootTest; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +@CamelSpringBootTest +class ConditionalHeaderRouterUnitTest { + + @Autowired + private ProducerTemplate template; + + @EndpointInject("mock:result") + private MockEndpoint mock; + + @Test + void whenSendBodyWithFruit_thenFavouriteHeaderReceivedSuccessfully() throws InterruptedException { + mock.expectedHeaderReceived("favourite", "Banana"); + + template.sendBodyAndHeader("direct:start-conditional-header", null, "fruit", "Banana"); + + mock.assertIsSatisfied(); + } +}