Getting started with Camel 3

Let’s have a look at what’s new in Camel 3 with an example project which shows how to run a Camel 3 standalone via the built-in Main class. Then, we will learn how to bootstrap a Camel application using the CamelContext.

Apache Camel 3 is a new family of products which include:

  • Camel 3: The core integration framework
  • Camel K: A lightweight Serverless Integration Platform Camel on Kubernetes & Knative
  • Camel Quarkus: Camel extensions for Quarkus Optimized JVM & Native compiled Java (GraalVM)



This contains all camel core dependencies (33 jars) and it’s what you will probably need when migrating from Camel 2.x



This contains only the core camel dependencies (12 jars).

Creating a sample Camel Java project.

To boostrap a Camel project we recommend using a Maven archetype. There are several available archetype, the most popular choices include:

  • camel-archetype-java – This archetype is used to create a new Maven project for Camel routes using Java DSL.
  • camel-archetype-main – This archetype is used to create a new Maven project for Camel routes running Camel standalone (camel-main).
  • camel-archetype-spring – This archetype is used to create a new Maven project for XML DSL routes using Spring.
  • camel-archetype-spring-boot – This archetype is used to create a new Maven project for Camel routes using Spring Boot.

In this tutorial we will be using the camel-archetype-java to generate a sample project:

mvn archetype:generate \ 
-DarchetypeGroupId=org.apache.camel.archetypes \ 
-DarchetypeArtifactId=camel-archetype-java \ 
-DarchetypeVersion=3.15.0 \ 
-DgroupId=com.masterspringboot.camel \ 
-DartifactId=camel-demo \ 

The project will be created with some sample classes. The first one is the Camel Main Class:

public class MainApp {

    public static void main(String... args) throws Exception {
        Main main = new Main();
        main.configure().addRoutesBuilder(new MyRouteBuilder());;


The Class org.apache.camel.main.Main allows to bootstrap the Camel Context within a standard Java standalone application. Within the Main class you can use Java DSL to add custom configuration and Routes. In our example, we will add the MyRouteBuilder to start a Route:

The Class MyRoute processes a set of input files (leaving them in place – see the ‘noop’ flag). Then performs content based routing on the message using XPath

public class MyRouteBuilder extends RouteBuilder {

    public void configure() {

                .when(xpath("/person/city = 'London'"))
                    .log("UK message")
                    .log("Other message")


You can run the Camel Main class with:

$ mvn install camel:run

Here’s the output:

Bootstrapping the Camel Context

Besides the Camel Main class, you can explicitly bootstrap the CamelContext to create new Camel Routes. In the following Class, we are creating a new Camel Context, then we add a Route to it. Finally, we call the non-blocking start method on it:

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public final class CamelBasic {

    public static void main(String[] args) throws Exception {
        // create a CamelContext
        try (CamelContext camel = new DefaultCamelContext()) {

            // add routes which can be inlined as anonymous inner class
            // (to keep all code in a single java file for this basic example)

            // start is not blocking

            // so run for 10 seconds

    static RouteBuilder createBasicRoute() {
        return new RouteBuilder() {
            public void configure() {
                        .log("Hello Camel");

To run the above example, all you need is the Camel BOM and the camel-core dependency:

            <!-- Add Camel BOM -->



To keep learning Camel, we recommend checking Camel with Spring Boot example