Apache Camel 3.x Upgrade Guide

This document is for helping you upgrade your Apache Camel application from Camel 3.x to 3.y. For example if you are upgrading Camel 3.0 to 3.2, then you should follow the guides from both 3.0 to 3.1 and 3.1 to 3.2.

Upgrading Camel 3.2 to 3.3

camel-jackson

The dependency on jackson-module-jaxb-annotations and the option enableJaxbAnnotationModule have been removed. To enable support for JAXB annotations, users have to:

  • explicit add jackson-module-jaxb-annotations

  • configure the JacksonDataFormat and/or the JacksonTypeConverters module classes, example:

    JacksonDataFormat
    JacksonDataFormat formatPojo = new JacksonDataFormat(TestJAXBPojo.class);
    formatPojo.setModuleClassNames(JaxbAnnotationModule.class.getName());
    JacksonTypeConverters
    context.getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
    context.getGlobalOptions().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");
    context.getGlobalOptions().put(JacksonConstants.TYPE_CONVERTER_MODULE_CLASS_NAMES, JaxbAnnotationModule.class.getName());

this change affects also the Java DSL and as consequence the enableJaxbAnnotationModule option for the Json DataFormat definition has been removed.

Template components

The template components which supports using a header to specify a dynamic resource to use as template, instead of the configured template on the endpoint is now enabled out of the box. If you want to use this feature then you must turn on allowTemplateFromHeader=true on either the endpoint or component level.

This applies to the following templating components: camel-freemarker, camel-velocity, camel-mvel, camel-mustache, camel-string-template, camel-chunk, camel-jolt, camel-jslt, camel-robotframework.

SupervisingRouteController

The SupervisingRouteController has been refactored and its configuration has been simplified. And when configuring from spring boot, then the auto configuration parameters has been changed from camel.supervising.controller into the general camel.springboot which allows to share the same configuration across runtimes so its the same in Spring Boot, Camel Main, Camel K, Camel Quarkus, etc.

Camel Karaf

The following components is no longer supported in OSGi and has been removed from the Camel Karaf features file: camel-undertow, camel-jgroups, camel-jgroups-raft, camel-infinspan.

camel-maven-plugin

The embedded goal has been removed (was never really in use). Use run goal instead.

API changes

The dump model classes in package org.apache.camel.support.dump has been removed as they were not in use by Camel.

In relation to the dump model classes removal, in camel-karaf the following commands were removed: context-info, route-info, route-profile and route-step.

camel-main

The following methods have been relocated from org.apache.camel.main.BaseMainSupport to org.apache.camel.main.MainConfigurationProperties:

  • getConfigurationClasses

  • setConfigurationClasses

  • addConfigurationClass

  • addConfiguration

  • getConfigurations

  • setConfigurations

  • getRouteBuilderClasses

  • setRouteBuilderClasses

  • getRouteBuilders

  • getRoutesBuilders

  • setRoutesBuilders

  • addRoutesBuilder

This means that as example, the following snippet:

Main main = new Main();
main.addRoutesBuilder(....)

Should become

Main main = new Main();
main.configure().addRoutesBuilder(....)