Apache Camel 4.x Upgrade Guide
This document is for helping you upgrade your Apache Camel application from Camel 4.x to 4.y. For example, if you are upgrading Camel 4.0 to 4.2, then you should follow the guides from both 4.0 to 4.1 and 4.1 to 4.2.
Upgrading Camel 4.0 to 4.1
camel-api
Added method newInstance(Class<T> type, Class<?> factoryClass, String factoryMethod)
to org.apache.camel.spi.Injector
.
Added isIgnoreLoadingError
and setIgnoreLoadingError
methods to org.apache.camel.spi.RoutesLoader
, and org.apache.camel.main.RoutesCollector
.
Added getDuration
method to org.apache.camel.StartupStep
.
XML and YAML DSL
Creating beans from script
In route templates (or kamelets), for advanced use cases, you are able to create beans from an inlined script.
The name of the script was defined in type
, but has been changed to a new scriptLanguage
attribute. And beanType
has been removed as you must use type
instead.
Before:
-
XML
-
YAML
<bean name="myBean" type="groovy" beanType="com.foo.MyBean">
<script>
<!-- groovy code here to create the bean -->
</script>
</bean>
- beans:
- name: "myClient"
beanType: "com.foo.MyBean"
type: "groovy"
script: |
# groovy script here
After:
-
XML
-
YAML
<bean name="myBean" type="com.foo.MyBean"
scriptLanguage="groovy">
<script>
<!-- groovy code here to create the bean -->
</script>
</bean>
- beans:
- name: "myClient"
type: "com.foo.MyBean"
scriptLanguage: "groovy"
script: |
# groovy script here
camel-scheduler
The scheduler
no longer includes header with the timestamp of when the exchange was fired. This means the exchange by default has no headers, and null
body.
The option includeMetadata
can be set to true
on the endpoint or component level, to turn on these additional metadata headers again.
camel-timer
The timer
no longer includes header firedTime
with the timestamp of when the exchange was fired. This means the exchange by default has no headers, and null
body.
The firedTime
header has been renamed to CamelTimerFireTime
.
The option includeMetadata
can be set to true
on the endpoint or component level, to turn on these additional metadata headers again.
camel-aws2-step-functions
The following Message Headers of camel-aws2-step-functions
component have been renamed to follow standard camel naming convention.
Old Name | New Name |
---|---|
CamelAwsStateMachineOperation | CamelAwsStepFunctionsOperation |
CamelAwsStateMachinesMaxResults | CamelAwsStepFunctionsStateMachinesMaxResults |
CamelAwsStepFunctionsStateMachineActivityName | CamelAwsStepFunctionsActivityName |
CamelAwsStepFunctionsStateMachineActivityArn | CamelAwsStepFunctionsActivityArn |
CamelAwsStateMachineActivitiesMaxResults | CamelAwsStepFunctionsActivitiesMaxResults |
CamelAwsStateMachineExecutionArn | CamelAwsStepFunctionsExecutionArn |
CamelAwsStateMachineExecutionName | CamelAwsStepFunctionsExecutionName |
CamelAwsStateMachineExecutionInput | CamelAwsStepFunctionsExecutionInput |
CamelAwsStateMachineExecutionTraceHeader | CamelAwsStepFunctionsExecutionTraceHeader |
CamelAwsStateMachineExecutionHistoryMaxResults | CamelAwsStepFunctionsExecutionHistoryMaxResults |
CamelAwsStateMachineExecutionHistoryIncludeExecutionData | CamelAwsStepFunctionsExecutionHistoryIncludeExecutionData |
CamelAwsStateMachineExecutionHistoryReverseOrder | CamelAwsStepFunctionsExecutionHistoryReverseOrder |
CamelAwsStateMachineExecutionMaxResults | CamelAwsStepFunctionsExecutionMaxResults |
This is applicable only if literal constant headers are used such as CamelAwsStateMachinesMaxResults
. If the headers are used from StepFunctions2Constants Interface like StepFunctions2Constants.STATE_MACHINES_MAX_RESULTS , then there is no change;
For Example before
from("direct:listActivities") .setHeader("CamelAwsStepFunctionsActivitiesMaxResults",5) .to("aws2-step-functions://test?awsSfnClient=#awsSfnClient&operation=listActivities")
Should be changed to
from("direct:listActivities") .setHeader("CamelAwsStepFunctionsActivitiesMaxResults",5) .to("aws2-step-functions://test?awsSfnClient=#awsSfnClient&operation=listActivities")
camel-aws2-sns
The queueUrl
parameter has been replaced by the queueArn
parameter
For Example before
from("direct:start") .to("aws2-sns://mytopic?subject=mySubject&autoCreateTopic=true&subscribeSNStoSQS=true&queueUrl=https://xxxx")
Should be changed to
from("direct:start") .to("aws2-sns://mytopic?subject=mySubject&autoCreateTopic=true&subscribeSNStoSQS=true&queueArn=arn:aws:sqs:xxxxx")
camel-pdf
The Camel-PDF component has been updated to Apache PDFBox 3.0.0, and the font parameter is now defined through the following enum values: COURIER,COURIER_BOLD,COURIER_OBLIQUE,COURIER_BOLD_OBLIQUE, HELVETICA,HELVETICA_BOLD,HELVETICA_OBLIQUE,HELVETICA_BOLD_OBLIQUE,TIMES_ROMAN,TIMES_BOLD,TIMES_ITALIC,TIMES_BOLD_ITALIC,SYMBOL and ZAPF_DINGBATS
camel-jbang
The pipe
command has been renamed to script
.
The --secrets-refresh
and --secret-refresh-providers
have been removed, since they were logically incorrect in the export command context. More information at CAMEL-19927 issue.
The generated XML route, created using the command camel init
, now uses <camel>
as the root tag instead of <routes>
.
camel-jetty / camel-servlet / camel-atmosphere-websocket / camel-http-common
By default, stack traces will not be included in HTTP responses, exceptions are muted. Stack traces can be included in HTTP responses by disabling muteException
. For example:
from("jetty:http://localhost:{{port}}/myapp/myservice?muteException=false")
When exceptions are muted stack traces may be logged by enabling logException
. For example
from("jetty:http://localhost:{{port}}/myapp/myservice?logException=true")
YAML DSL
The kebab-case style schema file, camel-yaml-dsl.json
has been removed from the distribution in favor of the camelCase style schema file, camelYamlDsl.json
. While the Camel runtime stays supporting kebab-case style also for the moment, it is recommended to migrate to camelCase style. Any tooling should encourage users to use camelCase style.
camel-tracing
The Tag
Enum containing constants for tagging spans has been deprecated. Instead, use constants from the TagConstants
Class that align to Open Telemetry v1.21.0 semantic conventions.
For example, instead of
span.setTag(Tag.URL_SCHEME, scheme);
use
span.setTag(TagConstants.URL_SCHEME, scheme);