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.
| The Camel Upgrade Recipes project provides automated assistance for some common migration tasks. Note that manual migration is still required. See the documentation page for details. |
Upgrading Camel 4.23 to 4.24
camel-jbang - camel validate and camel overview report the same endpoints no route consumes
camel validate source and camel overview now use the same rules for a direct:, seda: or disruptor: endpoint that a route sends to and no route consumes, so they report the same endpoints on the same project:
-
disruptor:endpoints are checked too, andcamel overviewno longer treatsdisruptor:qasseda:q(they are different endpoints at runtime);vm:anddirect-vm:, which do not exist in Camel 4, are no longer joined withseda:anddirect:. -
camel validatecounts apollorpollEnrichas consuming its endpoint, and atoDwithout an expression, anenrichwith a constant endpoint, a rest verb, and the dead letter channel of an error handler as sending to it. It reads the flows of anIntegrationresource, and stays quiet for aPipe. -
camel overviewstays quiet, ascamel validatedoes, when a route consumes an endpoint only known at runtime (from: direct:{{name}}), and no longer reports atowhose uri holds an expression.
So camel validate can report an endpoint it did not report before.
camel-hashicorp-vault - properties without engine use the secret engine
A hashicorp: property without an engine, such as {{hashicorp:mysecret}} or {{hashicorp:mysecret#field}}, now reads the secret from the secret engine. Before, it read from the engine of the hashicorp: property resolved before it (or from a null engine), and {{hashicorp:mysecret#field}} always resolved to no value. Properties with an engine, such as {{hashicorp:secret:mysecret#field}}, are not affected.
A hashicorp: property without an engine and with a version, such as {{hashicorp:mysecret@2}}, now reads version 2 of the secret mysecret in the secret engine. Before, the @2 was kept as part of the secret name.
A hashicorp: property with a field of a secret that does not exist, such as {{hashicorp:secret:missing#field}}, now resolves to no value, as it already did without a field, so its default value or an optional placeholder ({{?hashicorp:secret:missing#field}}) applies. Before, without a default value, it failed with a NullPointerException.