BAEL-5237 - Apache Camel Conditional Routing (#12675)

* BAEL-4706 - Spring Boot with Spring Batch

* BAEL-3948 - Fix test(s) in spring-batch which leaves repository.sqlite
changed

* BAEL-4736 - Convert JSONArray to List of Object using camel-jackson

* BAEL-4756 - Mockito MockSettings

* BAEL-4756 - Mockito MockSettings - fix spelling

* BAEL-2674 - Upgrade the Okhttp article

* BAEL-4204 - Adding Interceptors in OkHTTP

* BAEL-4836 - Mocking Static Methods with Mockito

* BAEL-4205 - A Guide to Events in OkHTTP

* BAEL-5408 - Update Camel version in spring-boot-camel module

* BAEL-5234 - Apache Camel Routes Testing in Spring Boot

* BAEL-5234 - Apache Camel Routes Testing in Spring Boot

* BAEL-5237 - Apache Camel Conditional Routing

Co-authored-by: Jonathan Cook <jcook@sciops.esa.int>
This commit is contained in:
Jonathan Cook 2022-08-31 16:39:29 +02:00 committed by GitHub
parent 8a79e04d39
commit cd9f1cce2e
8 changed files with 187 additions and 0 deletions

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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"));
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}

View File

@ -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();
}
}