HelloWorld Camel tutorial

The following is an HelloWorld Camel. tutorial which was created just using the Command Line and a tool for editing the Camel project.

Required tools:

  • Java 1.8 or later
  • Apache Maven
  • A Development Environment of your like (we use IntelliJ Idea in this tutorial)

Start by creating your Camel project as follows from Maven:

mvn archetype:generate \  -DarchetypeGroupId=org.apache.camel.archetypes \  -DarchetypeArtifactId=camel-archetype-java \  -DarchetypeVersion=3.7.0 \  -DgroupId=com.mastertheboss.camel \  -DartifactId=camel-helloworld \  -Dversion=1.0-SNAPSHOT

The project camel-helloworld will be created. Now import it in your favorite IDE. In our case we import it into IntelliJ Idea Community edition.

We will just edit the MainApp class to remove deprecated code and use Camel Main class instead. Here is how it should be like:

package com.mastertheboss.camel;
import org.apache.camel.main.Main;
public class MainApp {
  public static void main(String...args) throws Exception {
    // use Camels Main class         
    Main main = new Main();

The Class MyRouteBuilder which has been created for you is a Java DSL class to route messages.

package com.mastertheboss.camel;

import org.apache.camel.builder.RouteBuilder;

public class MyRouteBuilder extends RouteBuilder {
  public void configure() {
        .when(xpath("/person/city = 'London'"))
        .log("UK message")
        .log("Other message")

As you can see, all this Class does is to process the input files (leaving them in place, as configured from the ‘noop’ flag) and then perform Content Based routing using an XPath expression.

The XML files are picked up from the folder ‘data’ which is included in your project.

Finally, within the file log4j2.properties you can set custom definitions for your Loggers:

appender.out.type = Console appender.out.name = out appender.out.layout.type = PatternLayout appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n rootLogger.level = INFO rootLogger.appenderRef.out.ref = out

The project file (pom.xml) includes the following dependencies in it:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.mastertheboss.camel</groupId>   <artifactId>camel-helloworld</artifactId>   <packaging>jar</packaging>   <version>1.0-SNAPSHOT</version>    <name>A Camel Route</name>    <properties>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>   </properties>    <dependencyManagement>     <dependencies>       <!-- Camel BOM -->       <dependency>         <groupId>org.apache.camel</groupId>         <artifactId>camel-parent</artifactId>         <version>3.7.0</version>         <scope>import</scope>         <type>pom</type>       </dependency>     </dependencies>   </dependencyManagement>    <dependencies>      <dependency>       <groupId>org.apache.camel</groupId>       <artifactId>camel-core</artifactId>     </dependency>     <dependency>       <groupId>org.apache.camel</groupId>       <artifactId>camel-main</artifactId>     </dependency>      <!-- logging -->     <dependency>       <groupId>org.apache.logging.log4j</groupId>       <artifactId>log4j-api</artifactId>       <scope>runtime</scope>     </dependency>     <dependency>       <groupId>org.apache.logging.log4j</groupId>       <artifactId>log4j-core</artifactId>       <scope>runtime</scope>     </dependency>     <dependency>       <groupId>org.apache.logging.log4j</groupId>       <artifactId>log4j-slf4j-impl</artifactId>       <scope>runtime</scope>     </dependency>      <!-- testing -->     <dependency>       <groupId>org.apache.camel</groupId>       <artifactId>camel-test</artifactId>       <scope>test</scope>     </dependency>   </dependencies>    <build>     <defaultGoal>install</defaultGoal>      <plugins>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-compiler-plugin</artifactId>         <version>3.8.1</version>         <configuration>           <source>1.8</source>           <target>1.8</target>         </configuration>       </plugin>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-resources-plugin</artifactId>         <version>3.1.0</version>         <configuration>           <encoding>UTF-8</encoding>         </configuration>       </plugin>        <!-- Allows the example to be run via 'mvn compile exec:java' -->       <plugin>         <groupId>org.codehaus.mojo</groupId>         <artifactId>exec-maven-plugin</artifactId>         <version>1.6.0</version>         <configuration>           <mainClass>com.mastertheboss.camel.MainApp</mainClass>           <includePluginDependencies>false</includePluginDependencies>         </configuration>       </plugin>      </plugins>   </build>  </project>

Run the Main class and check from the logs that the files have been routed:

[1) thread #2 - file://src/data] route1                         INFO  UK message [1) thread #2 - file://src/data] route1                         INFO  Other message

Congratulations! you have just run your first Hello World Camel project!

Source code for Camel Hello world project: https://github.com/fmarchioni/masterspringboot/tree/master/camel/camel-helloworld

Generating an Hello World example using Spring configuration

If you want to create your Spring version of the HelloWorld Camel Example you can use the maven archetype:

mvn archetype:generate                   \   -DarchetypeGroupId=org.apache.camel.archetypes  \   -DarchetypeArtifactId=camel-archetype-spring   \   -DarchetypeVersion=3.7.0 \   -DgroupId=com.mastertheboss.camel \   -DartifactId=camel-helloworld-spring \   -Dversion=1.0-SNAPSHOT

The main difference is that the project will not include Java resources but the following camel-context.xml file with the definition of the Camel Context and the route:

<?xml version="1.0" encoding="UTF-8"?><!-- Configures the Camel Context--><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
   <camelContext xmlns="http://camel.apache.org/schema/spring">
      <!-- here is a sample which processes the input files          (leaving them in place - see the 'noop' flag)          then performs content based routing on the message using XPath -->
         <from uri="file:src/data?noop=true"/>
               <xpath>/person/city = 'London'</xpath>
               <log message="UK message"/>
               <to uri="file:target/messages/uk"/>
               <log message="Other message"/>
               <to uri="file:target/messages/others"/>

Here is the project tree:

src ├── data │   ├── message1.xml │   └── message2.xml ├── main │   ├── java │   │   └── com │   │       └── mastertheboss │   │           └── camel │   └── resources │       ├── log4j2.properties │       └── META-INF │           └── spring │               └── camel-context.xml └── test     ├── java     │   └── com     │       └── mastertheboss     │           └── camel     └── resources 

You can run the project with:

mvn install camel:run

Generating an Hello World example using Spring Boot

Finally, if you prefer to create a Camel Project using Java and Spring Boot, the following archetype will do:

mvn archetype:generate                   \   -DarchetypeGroupId=org.apache.camel.archetypes  \   -DarchetypeArtifactId=camel-archetype-spring-boot   \   -DarchetypeVersion=3.7.0             \   -DgroupId=myGroupId                  \   -DartifactId=demo

Your project will not include the XML configuration file, but the standard structure of a Spring Boot project:

src ├── main │   ├── java │   │   └── myGroupId │   │       ├── MySpringBean.java │   │       ├── MySpringBootApplication.java │   │       └── MySpringBootRouter.java │   └── resources │       ├── application.properties │       └── META-INF │           ├── LICENSE.txt │           └── NOTICE.txt └── test 

As for any Spring Boot project, you can run your Spring Boot camel application with:

mvn install spring-boot:run

 If you want to check a more complex example of Camel application with Spring Boot, see the following article: Camel with Spring Boot example | Masterspringboot