How to integrate Camel Java DSL with XML

Integrating a Camel DSL with an XML DSL in a Spring Boot application can be a powerful way to combine the flexibility and ease of use of Camel’s Java DSL with the simplicity and readability of XML configuration. This tutorial will guide you through the process of integrating the two DSLs, using the provided code as an example.

Add the necessary dependencies

To use Camel in a Spring Boot application, you will need to add the necessary dependencies to your project. In this case, you will need the following dependencies in your pom.xml file:

  <dependencyManagement>
    <dependencies>
      <!-- Spring Boot BOM -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring.boot-version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- Camel BOM -->
      <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-dependencies</artifactId>
        <version>3.7.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

Then, add the Camel dependencies you need for your Routes, for example:

    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-spring-boot-starter</artifactId>
    </dependency>

Create a Camel route using the Java DSL

Firstly, we will add a Camel Route in Java. To do that, you simply need to create a class that extends the RouteBuilder class and implement the configure() method. Within the configure() method, you can use various Camel components and DSL constructs to define your route.

@Component
public class MySpringBootRouter extends RouteBuilder {
 
 
    @Override
    public void configure() {
        from("timer:hello?period={{timer.period}}").routeId("hello")              
                .setBody().simple("Current time is ${header.CamelTimerFiredTime}")
                .to("log:foo")
                .end()
                .to("direct:log_body");
    } 

}

As you can see, there’s a Timer that produces messages. The route terminates through a direct channel. We will intercept that direct channel in an XML Route

Create a Camel route using the XML DSL

To create a Camel route using the XML DSL, you need to create a file in a camel folder under the resources folder and define your route using XML syntax.

To create a route using the XML DSL, you need to define a <route> element with a unique id attribute. Within the <route> element, you can define your route using various XML elements and attributes that correspond to Camel components and DSL constructs.

<?xml version="1.0" encoding="UTF-8"?>
<routes xmlns="http://camel.apache.org/schema/spring">
  <!-- TODO: Add the XML DSL route -->
  <route id="XML DSL route">	
    <from uri="direct:log_body"/>	
    <log message="Got the following message: ${body}"/>	
    <to uri="mock:next_service"/> 
  </route>
</routes>

In the provided code, the XML route listens to the “direct:log_body” endpoint, logs the message body to the console, and then sends the message to a mock endpoint.

Here is the project view:

camel spring boot xml java

Test the integration

To test the integration, you can run your Spring Boot application and verify that both routes are working as expected. In this case, the Java DSL route should trigger every few seconds and log the current time to the console, and the XML DSL route should log the message body to the console and send it to the mock endpoint.

2023-03-30 16:03:58.336  INFO 66803 --- [- timer://hello] foo                                      : Exchange[ExchangePattern: InOnly, BodyType: String, Body: Current time is Thu Mar 30 16:03:58 CEST 2023]
2023-03-30 16:03:58.337  INFO 66803 --- [- timer://hello] XML DSL route                            : Got the following message: Current time is Thu Mar 30 16:03:58 CEST 2023
2023-03-30 16:04:00.301  INFO 66803 --- [- timer://hello] foo                                      : Exchange[ExchangePattern: InOnly, BodyType: String, Body: Current time is Thu Mar 30 16:04:00 CEST 2023]
2023-03-30 16:04:00.301  INFO 66803 --- [- timer://hello] XML DSL route                            : Got the following message: Current time is Thu Mar 30 16:04:00 CEST 2023

Conclusion

Camel’s Java DSL with the simplicity and readability of XML configuration. By following the steps outlined in this tutorial, you can create and integrate routes using both DSLs in your Spring Boot application.

Remember that this is just an example, and you can customize and modify the routes to suit your specific needs. Additionally, there are many other Camel components and DSL constructs that you can use to create more complex and powerful routes.

Happy coding!

Source code: https://github.com/fmarchioni/masterspringboot/tree/master/camel/camel-spring-xml

Found the article helpful? if so please follow us on Socials
Twitter Icon       Facebook Icon       LinkedIn Icon       Mastodon Icon