Apache camel 4.22.2 Release

New and Noteworthy

This release is the new Camel 4.22.2 LTS release.

Supported Java version

This version supports Java 17, 21 and 25.

Getting the Binaries using Maven

To use this release in your Apache Maven pom.xml, import the Camel Bill of Materials (BOM) and then include the camel-core and any other components needed without specifying the version.

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-bom</artifactId>
      <version>4.22.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-COMPONENT</artifactId>
  </dependency>
</dependencies>

To use this release in a Spring Boot application, use Spring Boot spring-boot-dependencies and Camel camel-spring-boot-bom Bill of Materials (BOM):

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version> SPRING BOOT VERSION HERE </version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-spring-boot-bom</artifactId>
      <version>4.22.2</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-COMPONENT-starter</artifactId>
  </dependency>
</dependencies>

Apache Camel

Git tag checkout

Release is tagged with camel-4.22.2 in the Git, to fetch it use:

git clone https://git-wip-us.apache.org/repos/asf/camel.git
cd camel
git checkout camel-4.22.2

Resolved issues

Here is a list of all the issues that have been resolved for this release

Bug (49)

CAMEL-25715
camel-jbang - camel cmd eval breaks an expression with a double quote or a slash
CAMEL-25638
camel-graphql - bind accessToken and basic credentials to the configured httpUri authority
CAMEL-25629
camel-jbang - java version enum should include 25
CAMEL-25620
camel-console: ConcurrentModificationException in DefaultDevConsoleRegistry.doStart when camel-cli-connector is enabled
CAMEL-25603
camel-pqc - key encapsulation operations share one KeyGenerator and KeyAgreement instance across concurrent exchanges without synchronization
CAMEL-25601
camel-vertx-websocket - a client consumer started while the WebSocket is already open registers no handlers
CAMEL-25582
camel-vertx-websocket - a consumeAsClient consumer starts overlapping reconnect attempts: after a slow handshake it holds up to 20 WebSockets and routes every message once per WebSocket; it also keeps reconnecting after its route is stopped
CAMEL-25559
camel-core - with the pooled exchange factory, an exchange that a consumer gives back without routing it is put into the pool twice, and the next two messages share one exchange
CAMEL-25558
camel-aws2-s3 - a listed object that cannot be got (deleted meanwhile, or a failed get) fails the poll and stays in the in-progress repository, so it is never consumed until a restart
CAMEL-25534
camel-mail - subject option description still says the Subject header takes precedence, but useHeaderSubject defaults to false
CAMEL-25533
camel-jbang - camel run ignores camel.server.port (and the other camel.server.* settings) for the HTTP server started for platform-http unless camel.server.enabled=true
CAMEL-25494
camel-yaml-io - YAML route dump writes routeConfiguration onException items without their onException key, which neither the schema nor the loader accept
CAMEL-25490
camel-jbang - camel validate normalize writes a top-level onException into the steps of every route, which the YAML DSL schema rejects
CAMEL-25486
camel-http - the OAuth2 token request with a resource indicator sends only the resource parameter
CAMEL-25452
camel-jbang - camel export ignores --resource-dir, the directories never reach the exported project
CAMEL-25437
camel-jbang - camel run --prop key=value with a space is silently ignored
CAMEL-25427
camel-support - on-demand route reload fails with FileNotFoundException after a route file is removed from the source dir
CAMEL-25418
camel-jbang - camel get vault does not list the Kubernetes config map names
CAMEL-25376
camel-netty-http - match security constraint roles by exact role name
CAMEL-25375
camel-undertow - Apply securityProvider, allowedRoles and handlers to WebSocket endpoints consistently with HTTP endpoints
CAMEL-25227
camel-azure-eventhubs: partition header conflict and no default header filter
CAMEL-25224
camel-xslt / camel-xslt-saxon: implicitly converted DOM sources select wrong XSLT context node
CAMEL-25222
Route dump - YAML with source locations loses the list dash of a choice when, and throwException given an exception instance is dumped empty
CAMEL-25164
camel-infinispan - the aggregation repositories recover a completed exchange without the message that completed the group
CAMEL-25116
camel-main - /q/download?classpath=true does not list project resources
CAMEL-25103
camel-vertx - Client authentication, cipher suites and protocols of SSLContextParameters are not applied
CAMEL-25086
camel-platform-http-starter: fails to start outside a servlet web application (ServerProperties/WebMvcProperties)
CAMEL-25085
Rest DSL: under json/xml binding a response without Content-Type ignores the verb's produces
CAMEL-25023
camel-util - IOHelper.copy counts copied bytes in an int, so zipFile/tarFile maxDecompressedSize values of 2 GiB or more are not enforced
CAMEL-25001
camel-core - Supervising route controller: an exhausted route stays unhealthy after it is started manually
CAMEL-25000
camel-ai-tool / camel-ai-resource - tools and resources are missing when a route sends a request as soon as it starts
CAMEL-24973
camel-util - URISupport.sanitizeUri does not follow the endpoint URI parser for RAW values, userinfo, dash-case option names and additional keywords
CAMEL-24940
camel-jbang/cli - autodetection of Kubernetes property placeholder functions (configmap:, secret:) stopped working in 4.22.1
CAMEL-24935
camel-pulsar - the producer replaces the message body with the MessageId
CAMEL-24932
camel-pulsar - the polling loop dies on a NullPointerException when a receive fails
CAMEL-24889
camel-debezium - the consumer is never told that the embedded engine has failed
CAMEL-24887
ManagedRouteGroupMBean exchange stats changed
CAMEL-24848
camel-mail - The useHeaderFrom and other useHeaderXXXXX options defaulted to false but the document said the default should be true
CAMEL-24816
camel-elasticsearch/camel-opensearch: minor robustness fixes (scroll clear NPE, id header clobber, size/from header bleed)
CAMEL-24814
camel-elasticsearch/camel-opensearch: BulkRequestAggregationStrategy returns the wrong exchange, breaking bulk aggregation
CAMEL-24811
camel-servlet - async=true without executorRef completes the AsyncContext before a truly-asynchronous route finishes
CAMEL-24799
camel-jbang: Installing Camel Kit by command name loses the requested plugin version
CAMEL-24776
camel-jbang run does not auto-load camel-kubernetes for secret property functions
CAMEL-24766
camel-huaweicloud-smn: empty-body guard checks the raw endpoint operation instead of the resolved one
CAMEL-24691
camel-saxon - align XQueryBuilder with secure XML parsing defaults
CAMEL-24594
RestBindingAdvice response marshalling failure is silently swallowed
CAMEL-24590
ManagedRouteGroupMBean.getFailuresHandled() / getLastExchangeFailureHandledTimestamp() return 0/null even though a member route recorded a handled failure
CAMEL-24440
camel-crypto - CryptoDataFormat validates the MAC after decrypting, reuses the cipher key for the HMAC, and has no per-message IV
CAMEL-24371
camel-a2a - fix WebhookUrlValidator address classification and host matching

Dependency upgrade (1)

CAMEL-25468
Upgrade Bouncy Castle to 1.86 on Camel 4.22.x

Improvement (28)

CAMEL-25622
camel-smpp - Add hostname verification for SSL connections
CAMEL-25605
camel-mina - Add hostname verification for TLS producer connections
CAMEL-25604
camel-mllp - Add hostname verification for TLS producer connections
CAMEL-25590
camel-lra-starter - expose the callbackSecret and allowedCoordinatorUrls options
CAMEL-25585
camel-chunk - message body and header values are expanded as Chunk template code instead of printed literally
CAMEL-25584
camel-lra - only join LRAs hosted by the configured LRA coordinator
CAMEL-25578
camel-lra - verify participant callbacks with an optional shared secret
CAMEL-25568
camel-oauth - make OAuthBearerTokenProcessor stateless and read credentials from HTTP request headers
CAMEL-25564
camel-telegram - verify the Bot API secret token on webhook updates
CAMEL-25528
camel-jbang - camel run ignores camel.jbang.dependencies in a properties file given on the command line, such as camel/application.properties
CAMEL-25445
camel-jbang-plugin-tui - sanitize 8-bit C1 control characters in displayed integration text
CAMEL-25412
camel-file - resolve symbolic links when enforcing jailStartingDirectory for the producer target and local consumer listing
CAMEL-25340
camel-spring-ws: apply the HeaderFilterStrategy to outbound SOAP headers
CAMEL-25225
camel-spring-ws: apply the HeaderFilterStrategy to producer response headers
CAMEL-25205
camel-jackson3xml - Add support to enable/disable features from Jackson feature enums
CAMEL-25197
camel-cli-connector - add a WebSocket transport so developer tools can drive running integrations
CAMEL-25162
camel-oauth - confine the reconstructed post-login URL to the configured redirect URI origin
CAMEL-25091
camel-kafka: expose by_duration as valid autoOffsetReset value (Kafka 4.0+)
CAMEL-25087
camel-coap - add a muteException consumer option
CAMEL-25054
camel-jackson - Add support to enable/disable features in qualified manner
CAMEL-24936
camel-netty: NettyConverter.toByteArray should copy only the readable bytes of the ByteBuf
CAMEL-24902
camel-keycloak: honor token expiry (exp) when caching introspection results
CAMEL-24901
camel-aws2-s3: restrict Simple expression evaluation of key/bucket to configured values
CAMEL-24894
camel-docling: make output path handling consistent with input path and custom-argument handling
CAMEL-24893
camel-docling: also constrain absolute paths in custom-argument path validation
CAMEL-24872
camel-oauth: Align token caching with effective profile configuration
CAMEL-24652
camel-servlet, camel-jetty, camel-platform-http-vertx - consolidate the fileNameExtWhitelist check and tighten the extension match
CAMEL-24650
camel-http-common: lift the multipart fileNameExtWhitelist check into DefaultHttpBinding

Task (2)

CAMEL-24900
camel-jcr - apply header filtering when mapping JCR node properties to Exchange headers
CAMEL-24895
camel-mustache, camel-chunk - align Exchange header constant names with Camel naming convention

Test (1)

CAMEL-24957
Fix flaky test MessageHistoryExceptionRouteTest

Keys

You can verify your download by following these procedures and using these KEYS.