IM 7.2.0 → 7.3.0 — Apache Camel 4.18 Migration (§6)

Apache Camel 4.1.0 → 4.18.1 — Breaking Changes

Parent doc: upgrade-migration-guide-to-im-7-3-0.md
Confluence mirror: IM 7.2 → 7.3.0 — Apache Camel 4.1.0 → 4.18.1 — Breaking Changes


6. Apache Camel 4.1.0 → 4.18.1 LTS

Impact: HIGH | Type: DSL, Properties, API, Behavior

This upgrade spans 17 minor versions, each with breaking changes. Organized by category.

Coverage by the PFIMCORE-2957 migration script

The script (in im-upgrade-service) covers 66 of 70 (~94%) customer-facing breaking changes from §6 below. The 4 uncovered items are inherently un-detectable behavioral defaults — no source-level signal to match.

Section

Items

Covered

Method

§6.1 Property prefixes

6

6

Property regex + case-flip transforms

§6.2 XML DSL

10

10

Regex + XML DOM walker

§6.3 YAML/kamelet

(out of scope)

IM uses XML routes only; convert kamelets manually if any

§6.4 Simple operators

5

5

Regex

§6.5 File defaults

3

3

Advisories

§6.6 Data formats

10

10

Regex + advisories

§6.7 Health checks

4

3

Advisories (1 inherent gap: SupervisingRouteController defaults)

§6.8 Exchange API

10

9

Regex (ACTIVE_SPAN) + 7 advisories (1 inherent gap: stream buffer size)

§6.9 Secrets manager

2

2

Regex (delimiter) + property advisory (engine)

§6.10 REST DSL

7

5

Bundled <rest> advisory (5/7 detected separately; 2 sub-items mentioned in advisory text but inherently un-detectable: OpenAPI generation timing + property placeholder eager resolution)

§6.11 Removed components

7

7

URI/element route advisories

§6.12 Deprecated components

5

5

URI/element route advisories

§6.13 Template/Script

1

1

Advisory (silent breaker)

§6.14 IM-internal

6

Out of scope (IM framework code, not customer integrations)

Total (customer-facing)

70

66 (~94%)


6.1 Property Prefix Changes

Old Prefix

New Prefix

Version

Notes

camel.springboot.*

camel.main.*

Deprecated 4.5, removed 4.13

All prefixed properties must migrate

camel.main.routeController*

camel.routecontroller.*

4.4

Route controller properties

camel.main.backlogTracing*

camel.trace.*

4.5

Backlog tracing

camel.main.debugger

camel.debug.enabled

4.2

Debugger toggle

camel.main.lightweight

(removed)

4.11

Option no longer supported

camel.server.*

camel.management.*

4.14

Server management

IM Impact — properties migrated in default-application.properties and application.properties:

  • camel.springboot.main-run-controllercamel.main.main-run-controller

  • camel.springboot.xml-routescamel.main.xml-routes

  • camel.springboot.xml-restscamel.main.xml-rests

  • camel.springboot.use-mdc-loggingcamel.main.use-mdc-logging

  • camel.springboot.stream-caching-spool-enabledcamel.main.stream-caching-spool-enabled

  • camel.springboot.shutdown-timeoutcamel.main.shutdown-timeout

  • camel.springboot.jmx-enabledcamel.main.jmx-enabled

  • camel.springboot.jmx-management-statistics-levelcamel.main.jmx-management-statistics-level

6.2 XML DSL Changes (affect customer routes)

Change

Version

Impact

Throttle EIP completely reworked

4.3

Customer routes using <throttle> MUST be rewritten

Resequence EIP attributes stream-configstreamConfig, batch-configbatchConfig

4.3

Customer routes using <resequence> may break

<when><onWhen> inside <intercept> and <interceptSendToEndpoint>

4.10

Customer routes may break

headerNamesource on <xpath> and <xquery> (must prefix with header:)

4.4

Customer routes may break

<xquery> typeresultType

4.4

Customer routes may break

<onFallback> must be last in <circuitBreaker>

4.10

Customer routes may break

Bean <property> elements must now be wrapped in a <properties> container

4.6

Customer routes defining beans inline may break

Load balancer names changed (see table below)

4.7

Customer routes may break

inheritErrorHandler attribute moved from <loadBalance> to <failoverLoadBalancer>

4.10

Customer routes using fail-over load balancer may break

bearerbearerToken in REST DSL

4.12

REST DSL routes

Throttle EIP Rework (4.3): Changed from "total requests per time period" to "concurrent requests" model.

XML
<!-- Old: 10 requests per 1000ms -->
<throttle><constant>10</constant></throttle>
<!-- New: 10 CONCURRENT requests (not per-second!) -->
<throttle><constant>10</constant></throttle>

The timePeriodMillis option should be removed. This is a fundamental semantic change.

XPath/XQuery headerName Change (4.4):

XML
<!-- Old -->
<xpath headerName="myHeader">/foo/bar</xpath>
<!-- New -->
<xpath source="header:myHeader">/foo/bar</xpath>

Load Balancer Renames (4.7):

Old Name

New Name

failOver

failoverLoadBalancer

random

randomLoadBalancer

roundRobin

roundRobinLoadBalancer

sticky

stickyLoadBalancer

topic

topicLoadBalancer

weighted

weightedLoadBalancer

6.3 YAML DSL / Kamelet Changes (affect customer kamelets)

Change

Version

Impact

Kebab-case removed entirely

4.13

Customer kamelets WILL break

streamCachingstreamCache

4.6

YAML routes

Bean property element renamed to properties (with simplified syntax)

4.6

YAML routes defining beans inline may break

typeFilter changed from list of elements to single comma-separated string

4.15

YAML data format config

routePolicyroutePolicyRef

4.18

YAML route config

noErrorHandler default: truefalse in kamelets

4.10

Kamelets now inherit route error handler

Kamelet endpoint parameters now parsed in raw mode

4.16

URI-encoding behavior change for sensitive parameters (passwords, keys)

Kamelet routes no longer registered as JMX MBeans by default

4.5

Kamelet visibility/metrics in JMX

Kebab-case → camelCase mapping:

Old (kebab-case)

New (camelCase)

set-header

setHeader

set-body

setBody

set-property

setProperty

remove-header

removeHeader

remove-headers

removeHeaders

remove-property

removeProperty

convert-body-to

convertBodyTo

to-d

toD

wire-tap

wireTap

do-try

doTry

do-catch

doCatch

do-finally

doFinally

dead-letter-channel

deadLetterChannel

no-error-handler

noErrorHandler

error-handler

errorHandler

IM Impact: All .kamelet.yaml files migrated (set-headersetHeader, set-bodysetBody).

6.4 Simple Language Operator Removals (affect customer routes)

Camel 4.18 removed these deprecated binary operators:

Old Operator

New Operator

not contains

!contains

not regex

!regex

not range

!range

starts with

startsWith

ends with

endsWith

Customer Action Required: Scan all XML route files for these operators.

6.5 File Component Behavior Changes (affect customer routes)

Change

Version

Impact

eagerMaxMessagesPerPoll default: falsetrue

4.13

File polling behavior changesmaxMessagesPerPoll now applied BEFORE sorting instead of after

idempotentEager default changed to true

4.7

Idempotent file consumers

File name header includes relative paths with recursive=true

4.10

File processing routes

Customer Action Required: If using maxMessagesPerPoll with sorting, explicitly set eagerMaxMessagesPerPoll=false.

6.6 Data Format Changes

Change

Version

Impact

camel-jackson default unmarshalType: HashMapLinkedHashMap

4.12

JSON/XML unmarshalling now preserves key order

Jackson option useWritercombineUnicodeSurrogates

4.9

Affects multi-byte character handling

CSV formatRef/formatNameformat

4.15

CSV data format config

CSV header changed from List<String> to comma-separated String

4.15

CSV header config

Flatpack parserFactoryRefparserFactory

4.15

Flatpack config

JAXB/SOAP namespacePrefixRefnamespacePrefix

4.15

JAXB/SOAP config

SOAP elementNameStrategyRefelementNameStrategy

4.15

SOAP config

Crypto algorithmParameterRefalgorithmParameterSpec, keyRefkey, initVectorRefinitVector

4.15

Crypto data format config

SwiftMx readConfigRefreadConfig, writeConfigRefwriteConfig

4.15

SwiftMx data format config

XML Security keyOrTrustStoreParametersRefkeyOrTrustStoreParameters

4.15

xmlSecurity data format config

6.7 Health Check Changes

Change

Version

Routes with auto-startup=false report as UP

4.7

SupervisingRouteController: UnhealthyOnExhausted and UnhealthyOnRestarting default to true

4.7

FTP producer health checks added

4.17

Health/metrics paths: /q/*/observe/*

4.14

6.8 Exchange API Changes

Change

Version

Exchange.getCreated() deprecated, use getClock()

4.4

Intercepted endpoint: header → exchange property

4.5

Exchange.BEAN_METHOD_NAME header removed

4.11

Exchange.ACTIVE_SPANExchange.OTEL_ACTIVE_SPAN

4.9

DefaultExchangeHolder includes exchange variables

4.8

HeaderFilterStrategy case-insensitive by default

4.12

Stream buffer size: 4096 → 16384 bytes

4.8

WireTap deep-copies StreamCache bodies

4.7

WireTap Exchange.CORRELATION_ID no longer set on the copied exchange

4.4

JMS default header filter strategy now removes Camel… headers — use ClassicJmsHeaderFilterStrategy for legacy behavior

4.9

6.9 Secrets Manager Syntax Change (4.9)

# Old
{{hashicorp:secret:database/username}}
{{aws:database/username}}
# New
{{hashicorp:secret:database#username}}
{{aws:database#username}}

Additionally (Camel 4.7): the camel.vault.hashicorp.engine property and CAMEL_HASHICORP_VAULT_ENGINE environment variable were removed. Use the new hashicorp:engine:secret:… URI syntax instead — the engine is now part of the secret reference, not configured separately.

6.10 REST DSL Changes

Change

Version

inlineRoutes defaults to true

4.5

useXForwardHeaders defaults to false

4.5

Property placeholders in REST DSL now resolved eagerly at endpoint build time

4.5

Swagger 2.0 support removed, only OpenAPI v3

4.5

OpenAPI specification now generated once at startup instead of on-demand per request

4.5

REST OpenAPI Atlassian swagger-request-validator removed — validator no longer checks for missing JSON required nodes

4.6

Contract-first uses individual routers per endpoint

4.18

6.11 Removed Camel Components

Component

Removed In

camel-facebook

4.4

camel-hdfs

4.4

camel-groovy-dsl

4.9

camel-js-dsl

4.9

camel-jsh-dsl

4.9

camel-kotlin-dsl

4.9

camel-etcd3

4.11

6.12 Deprecated Camel Components

Component

Deprecated In

camel-cloud

4.7

camel-univocity-parsers

4.8

camel-stomp

4.17

camel-olingo2

4.18

camel-olingo4

4.18

6.13 Template / Script Component Security (4.13 — BREAKING)

Camel 4.13 introduced a security-driven default change: most language and template components no longer permit headers to drive the template/script content unless the endpoint explicitly opts in.

Change

Affected components

Header-driven templates now require allowTemplateFromHeader=true on the endpoint

All template components (e.g., velocity, freemarker, mustache, mvel, string-template, chunk, jolt, xslt, xslt-saxon)

Header-driven scripts now require allowTemplateFromHeader=true

Language/script components (e.g., language, groovy, mvel, python, js)

Customer impact: Any customer route or kamelet that relies on a header (for example CamelTemplateBody, CamelTemplateResource, CamelLanguageScript, or any custom header) to feed template/script content will silently stop processing the header and fall back to the configured static content. Routes do not throw — output is just wrong.

Customer action: Search for any ?allowTemplateFromHeader= parameters that may need adjustment, and add ?allowTemplateFromHeader=true to any endpoint URI where header-driven templates/scripts are intentional.

6.14 IM-Specific Camel Code Changes

Internal-only — customers can skip this section. These items live inside IM's own framework code (pricefx-integration module) and were applied in PFIMCORE-2862 before IM 7.3.0 shipped. They are listed here for IM framework developers validating the upgrade. No customer action required.

  • XmlWithNamespaceSplitter: Tokenizer API changed — TokenizeLanguageTokenizerExpression + ExpressionReifier.

  • CxfPayloadProcessor: CXF payload handling changed — CxfPayload import from org.apache.camel.component.cxf.common.

  • New serializeCxfPayload() method for explicit DOM serialization.

  • RouteDeploymentError: Error message format changed — "because of Multiple consumers""Multiple consumers".

  • PfxEventConsumer: Custom exponential backoff removed — Camel 4.x has built-in backoff via ScheduledPollConsumer.

  • JSch/Groovy exclusions removed from camel-jsch, camel-ftp, camel-groovy — Camel 4.18 manages these internally.