diff --git a/messaging-modules/spring-apache-camel/pom.xml b/messaging-modules/spring-apache-camel/pom.xml index 2eeeabf5e3d2..f3fe240e178e 100644 --- a/messaging-modules/spring-apache-camel/pom.xml +++ b/messaging-modules/spring-apache-camel/pom.xml @@ -8,6 +8,18 @@ jar spring-apache-camel http://maven.apache.org + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + com.baeldung diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java new file mode 100644 index 000000000000..9fcd94e06b64 --- /dev/null +++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/CamelRoute.java @@ -0,0 +1,24 @@ +package com.baeldung.camel.producertemplate; + +import org.apache.camel.builder.RouteBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Component +public class CamelRoute extends RouteBuilder { + + @Override + public void configure() { + from("direct:start").log("Received: ${body}") + .transform(simple("Hello ${body}")); + from("direct:fileRoute").to("file://output?fileName=output.txt&fileExist=Append"); + from("direct:beanRoute").bean(ProcessingBean.class, "process"); + + } + + @Bean + public ProcessingBean processingBean() { + return new ProcessingBean(); + } + +} diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java new file mode 100644 index 000000000000..dcb8ae011919 --- /dev/null +++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProcessingBean.java @@ -0,0 +1,9 @@ +package com.baeldung.camel.producertemplate; + +public class ProcessingBean { + + public String process(String input) { + return "Bean processed " + input.toUpperCase(); + } + +} diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java new file mode 100644 index 000000000000..6e7a90ce9e9c --- /dev/null +++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.camel.producertemplate; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ProducerTemplateApplication { + + public static void main(String[] args) { + SpringApplication.run(ProducerTemplateApplication.class, args); + } + +} diff --git a/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java new file mode 100644 index 000000000000..84a964df7d79 --- /dev/null +++ b/messaging-modules/spring-apache-camel/src/main/java/com/baeldung/camel/producertemplate/ProducerTemplateController.java @@ -0,0 +1,33 @@ +package com.baeldung.camel.producertemplate; + +import org.apache.camel.ProducerTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ProducerTemplateController { + + @Autowired + private ProducerTemplate producerTemplate; + + @GetMapping("/send/simple/{message}") + public String sendSimpleMessage(@PathVariable String message) { + String response = producerTemplate.requestBody("direct:start", message, String.class); + return response; + } + + @GetMapping("/send/file/{message}") + public String sendToFile(@PathVariable String message) { + producerTemplate.sendBody("direct:fileRoute", message + "\n"); + return "Message appended to output.txt"; + } + + @GetMapping("/send/bean/{message}") + public String sendToBean(@PathVariable String message) { + String response = producerTemplate.requestBody("direct:beanRoute", message, String.class); + return response; + } + +} diff --git a/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java b/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java new file mode 100644 index 000000000000..a3d0e4e579f0 --- /dev/null +++ b/messaging-modules/spring-apache-camel/src/test/java/com/baeldung/producertemplate/ProducerTemplateIntegrationTest.java @@ -0,0 +1,66 @@ +package com.baeldung.producertemplate; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; + +import com.baeldung.camel.producertemplate.ProducerTemplateApplication; +import com.baeldung.camel.producertemplate.ProducerTemplateController; + +@SpringBootTest(classes = ProducerTemplateApplication.class) +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +public class ProducerTemplateIntegrationTest { + + @Autowired + private ProducerTemplateController producerTemplateController; + + private static final String TEST_MESSAGE = "TestMessage"; + private static final Path OUTPUT_FILE = Paths.get("output/output.txt"); + + @BeforeEach + void setUp() throws IOException { + + if (Files.exists(OUTPUT_FILE)) { + Files.delete(OUTPUT_FILE); + } + } + + @Test + void givenMessage_whenSendingSimpleMessage_thenReturnsProcessedMessage() { + String inputMessage = TEST_MESSAGE; + String response = producerTemplateController.sendSimpleMessage(inputMessage); + assertNotNull(response, "Response should not be null"); + assertEquals("Hello " + inputMessage, response); + } + + @Test + void givenMessage_whenSendingToFile_thenFileContainsMessage() throws IOException { + String inputMessage = TEST_MESSAGE; + String response = producerTemplateController.sendToFile(inputMessage); + + assertEquals("Message appended to output.txt", response); + assertTrue(Files.exists(OUTPUT_FILE)); + String fileContent = Files.readString(OUTPUT_FILE); + assertTrue(fileContent.contains(inputMessage)); + } + + @Test + void givenMessage_whenSendingToBean_thenReturnsUppercaseMessage() { + String inputMessage = TEST_MESSAGE; + String response = producerTemplateController.sendToBean(inputMessage); + assertNotNull(response); + assertEquals("Bean processed " + inputMessage.toUpperCase(), response); + } + +}