Skip to content

Upgrade to Camel 4.18.0#691

Merged
jbonofre merged 52 commits intoapache:mainfrom
jbonofre:camel-4.18.0
Apr 6, 2026
Merged

Upgrade to Camel 4.18.0#691
jbonofre merged 52 commits intoapache:mainfrom
jbonofre:camel-4.18.0

Conversation

@jbonofre
Copy link
Copy Markdown
Member

No description provided.

@jbonofre jbonofre linked an issue Mar 18, 2026 that may be closed by this pull request
@jbonofre jbonofre added this to the 4.18.0 milestone Mar 18, 2026
jbonofre and others added 26 commits March 18, 2026 09:45
Force javax.xml.bind:jaxb-api to 2.3.1 in dependencyManagement to
avoid transitive resolution of beta 2.3.0-b161121.1438 from defunct
http://maven.java.net repositories blocked by Maven 3.8.1+.
…ap<String, String>

Camel 4.18.0 changed EndpointUriFactory.multiValuePrefixes() from Set<String>
to Map<String, String>. Updated the generated DirectVm and Vm endpoint URI
factories accordingly.
The camel-spring-ai component was split into camel-spring-ai-chat,
camel-spring-ai-embeddings, camel-spring-ai-tools, and
camel-spring-ai-vector-store in Camel 4.18.0. The monolithic artifact
no longer exists.
Replace auto-detect-version with explicit version properties for nimbusds,
ASM, opentelemetry-semconv, reactor-netty-incubator-quic, and
netty-incubator-codec-classes-quic. Add missing feature dependencies for
camel-aws-common, camel-micrometer-observability, camel-mina-sftp,
camel-opentelemetry-metrics, camel-test-junit6, camel-test-main-junit6,
and camel-test-spring-junit6. Update jackson2 to 2.20.1 with separate
annotations version, and bump generated component JSON versions.
- Add netty-nio-client to awssdk feature for AWS SDK Netty HTTP transport
- Add camel-aws-common dependency to all AWS/AWS2 features
- Add awssdk feature to AWS features missing it
- Wrap avro-ipc-netty and reactor-netty with relaxed netty version imports
- Wrap reactor-core with optional jdk.internal and micrometer imports
- Add cxf-rt-features-logging to camel-cxf feature
- Add missing jackson, http-client, azure, guava feature dependencies
- Add wrapped bundles for docling, github-api, graphql-java, groovy,
  IBM COS/Watson/WatsonX, iggy, langchain4j, Milo OPC UA, SSHD,
  stripe, openai, keycloak
- Fix protobuf4-version to 4.31.1 for Google Cloud features
- Fix snakeyaml-engine version for kubernetes
- Fix opentelemetry-semconv groupId
- Add micrometer-observation bundle for micrometer-observability
- Add spring-data-redis for camel-redis
- Add resilience4j and micrometer deps for resilience4j-micrometer
- Wrap various bundles with resolution:=optional imports
- Add missing AWS SDK service bundles (polly, rekognition, s3vectors,
  textract, transcribe)
- Wrap reactor-core in azure base feature with selective optional imports
- Add WSS4J bundles for CXF WS-Security resolution
- Add missing feature dependencies (jackson, guava, http-client,
  bouncycastle, caffeine) across multiple features
- Add missing bundles: elasticsearch-rest5-client, checker-qual,
  sshd-sftp, resilience4j-micrometer, micrometer-tracing,
  jolokia-core, keycloak-common/core/authz-client, spring-vault-core,
  proto-google-common-protos, google-genai, opentelemetry-sdk
  sub-modules, openai-java-core/client-okhttp, spring-test
- Fix camel-stitch netty import range in component pom.xml
- Fix version mismatches: protobuf4 bump to 4.33.4, snakeyaml-engine
  pinned to 2.10 for kubernetes, protobuf 3.x for google-functions
  and google-vertexai
- Wrap third-party bundles with optional imports where needed
  (infinispan, neo4j, ical4j, dapr-sdk, jackson-databind-nullable)
Replace docling-java with docling-core, docling-serve-api, and
docling-serve-client to provide the required ai.docling.core and
ai.docling.serve.api packages.
- Fix opentelemetry-semconv groupId (io.opentelemetry.semconv -> io.opentelemetry)
- Fix Eclipse Milo artifact IDs and add missing milo bundles (milo-stack-core,
  milo-transport, milo-dtd-manager, milo-dtd-core, jspecify)
- Fix ibm-watsonx-ai, iggy, and infinispan artifact coordinates
… infinispan

- Fix elasticsearch: use io.opentelemetry.semconv groupId for semconv 1.37.0
- Fix iggy: add missing commons-pool2 dependency bundle
- Fix infinispan-common: remove infinispan-query-dsl (dropped in Infinispan 16)
Testcontainers 2.0.3 renamed all modules from {name} to
testcontainers-{name}. Update all test POMs accordingly.
…n-annotations

jackson-annotations 2.20.1 doesn't exist; use the correct property
jackson2-annotations-version (2.20) instead of jackson2-version.
- Add explicit Event Hub entity config (eh1) so the emulator creates it
- Use log-based wait strategy instead of port-based to ensure emulator
  is fully ready before tests run
- Use acceptLicense() instead of env var
- Increase mock assertion wait time to 60s to allow for slow startup
The 2.0.1 emulator image consistently crashes with exit code 139
(SIGSEGV) on GitHub Actions runners.
…age-blob features

Mark non-netty imports as optional (resolution:=optional) for wrapped
reactor-netty-core and reactor-netty-http bundles to prevent unresolvable
optional dependencies (micrometer, brave, etc.) from blocking bundle resolution.
…rage-blob features

Remove dependency='true' from reactor-netty-core and reactor-netty-http
bundle entries so Karaf always installs them. With dependency='true', the
feature resolver was skipping these bundles, causing
NoClassDefFoundError: reactor/netty/http/client/HttpClient at runtime.
…storage-blob features

The previous Import-Package pattern (io.netty*;version="[4.1,5)") made all
io.netty sub-packages mandatory, causing OSGi resolution failures for
platform-specific packages like kqueue, epoll, io_uring, and haproxy codec.
Using *;resolution:=optional lets the resolver wire to the netty bundles
already declared in the feature without failing on missing optional transports.
The previous change (7def8e0) made all imports optional (*;resolution:=optional)
which prevented azure-core-http-netty from resolving reactor.netty.http.client.HttpClient
at runtime. This fix makes only platform-specific packages optional (kqueue, uring,
haproxy, http3, quic) while keeping io.netty and reactor imports mandatory so the
OSGi resolver properly wires the bundles.

Affected features: camel-azure-eventhubs, camel-azure-storage-blob, camel-stitch.
The wrap protocol with overwrite=merge and BND wildcard Import-Package
directives was preventing reactor-netty-http from resolving properly,
causing NoClassDefFoundError for reactor.netty.http.client.HttpClient
in the azure-eventhubs integration test. Use direct bundle references
instead, consistent with the camel-azure-storage-queue feature.
…ility

reactor-netty 1.3.3 requires Netty 4.2+. In Netty 4.2, netty-codec was
split into netty-codec-base and netty-codec-compression, and the incubator
modules (quic, io_uring) graduated to the main Netty project.
reactor-netty-core 1.3.3 mandatorily imports org.jspecify.annotations,
so the jspecify bundle must be present for runtime OSGi resolution.
reactor-netty-http 1.3.3 has mandatory Import-Package entries for
io.netty.handler.codec.http3 and io.netty.handler.codec.quic, but
these packages are not available in the azure Karaf features. This
prevents the bundle from resolving, causing azure-core-http-netty
to fail with ClassNotFoundException on reactor.netty.http.client.HttpClient.
…features

Instead of wrapping reactor-netty-http to make http3 and quic imports
optional, use the unwrapped bundle and provide the actual
netty-codec-http3 and netty-codec-classes-quic dependencies, matching
the approach used by camel-stitch.

This fixes the ClassNotFoundException for reactor.netty.http.client.HttpClient
in the azure-core-http-netty bundle caused by the wrap protocol not
correctly preserving Export-Package headers.
jbonofre and others added 14 commits March 28, 2026 07:28
…tures

The plain reactor-netty-http bundle from 1.3.3 has mandatory imports on
io.netty.handler.codec.http3 and io.netty.handler.codec.quic. Providing
the actual http3/quic bundles doesn't work because netty-codec-http3
itself requires javax.annotation (JSR-305) which isn't in these features.

Since the Azure features don't use HTTP/3 or QUIC, wrapping
reactor-netty-http to make those imports optional is the correct fix.
The Karaf feature resolver skips wrapped dependency bundles whose exports
it cannot determine at resolution time. This caused reactor-netty-core
and reactor-netty-http to not be installed, leading to
ClassNotFoundException for reactor.netty.http.client.HttpClient at
runtime and failing the camel-azure-eventhubs integration test.
The wrapped reactor-netty-http bundle imports io.micrometer.common which
is not available in the Karaf runtime. Mark io.micrometer imports as
optional to allow the bundle to resolve without micrometer present.
…ures

Instead of wrapping reactor-netty-http to make http3/quic imports
optional, provide the actual netty-codec-http3 and
netty-codec-classes-quic bundles so the original OSGi manifest
resolves correctly. This fixes ClassNotFoundException for
reactor.netty.http.client.HttpClient in azure-core-http-netty.
The Karaf feature resolver skips dependency bundles whose imports it
cannot determine are needed at resolution time. Since azure-core-http-netty
is a wrapped bundle, the resolver cannot see its imports and therefore
does not install reactor-netty-http and the netty codec bundles.

Removing dependency='true' makes these primary bundles that are always
installed with the feature, ensuring reactor-netty-http and the required
netty bundles are available at runtime.
The Karaf feature resolver cannot see imports of wrapped bundles at
resolution time, so it skips installing reactor-netty-http and other
dependency bundles. Adding explicit Import-Package for
reactor.netty.http.client and other key packages to the
azure-core-http-netty wrap directive makes these imports visible to
the resolver, which then correctly pulls in reactor-netty-http and
its transitive dependencies.

Also restores dependency='true' on netty/reactor bundles since they
will now be correctly resolved through the import chain.
Re-apply stability fixes that were lost in the revert (621e78c):
- Upgrade emulator to 2.2.0 to avoid SIGSEGV on GitHub Actions
- Add explicit Event Hub entity config (eh1)
- Use log-based wait strategy with 3-minute startup timeout
- Use acceptLicense() API instead of env var
- Increase mock assertion wait time to 60s
The EventHubs emulator container consistently fails to start within
the timeout on GitHub Actions runners.
Upgrade Azurite to 3.35.0 across all Azure itests for consistency
(storage-queue was using unpinned 'latest'). Simplify the EventHubs
emulator container configuration by relying on defaults and re-enable
the previously ignored test.
reactor-netty-http has mandatory imports for io.netty.handler.codec.http3,
io.netty.handler.codec.quic, and io.netty.handler.codec.haproxy. When all
bundles in a feature are marked dependency='true', the Karaf resolver may
fail to transitively resolve them, causing NoClassDefFoundError for
reactor/netty/http/client/HttpClient at runtime.

Apply the same wrap directive already used in camel-azure-storage-queue to
camel-azure-eventhubs, camel-azure-storage-blob, and camel-stitch features.
@jbonofre jbonofre mentioned this pull request Apr 1, 2026
jbonofre and others added 11 commits April 2, 2026 14:38
…y in OSGi

HV 9.1.0 sets the TCCL to its own classloader when discovering
ExpressionFactory. Adding DynamicImport for com.sun.el and
org.glassfish.expressly allows the HV classloader to see the
expressly EL implementation.
Override upstream ValidatorFactories to set the TCCL to Hibernate
Validator's bundle classloader before building the ValidatorFactory,
fixing the null classloader issue (HV000116/HV000183).  Also add
org.osgi.framework to HV DynamicImport-Package and wrap jakarta.el-api
with SPI-Consumer for ServiceLoader-based ExpressionFactory discovery.
…covery

HV 9.1.0 ResourceBundleMessageInterpolator.buildExpressionFactory() uses
ServiceLoader via the TCCL to discover ExpressionFactory.  Setting the
TCCL to HV's classloader is not sufficient because ServiceLoader needs to
find the META-INF/services/jakarta.el.ExpressionFactory descriptor which
lives in the Expressly bundle.

Resolve the Expressly bundle's classloader via HV's DynamicImport-Package
for org.glassfish.expressly and set it as the TCCL instead.
ServiceLoader-based EL discovery does not work in OSGi because no single
bundle classloader can find the Expressly META-INF/services descriptor.
Instead, directly instantiate the Expressly ExpressionFactoryImpl via
HV's DynamicImport-Package wiring and inject it into a custom
ResourceBundleMessageInterpolator, bypassing ServiceLoader entirely.
The 3-param ResourceBundleMessageInterpolator(ResourceBundleLocator,
boolean, ExpressionFactory) constructor in HV 9.1.0 silently ignores
the ExpressionFactory parameter and delegates to a constructor that
calls buildExpressionFactory() internally.  Use the 7-parameter
constructor which directly wires the provided ExpressionFactory into the
TermInterpolator, bypassing the broken ServiceLoader discovery.
The DefaultLocaleResolver is in org.hibernate.validator.internal which
is not exported by the HV bundle.  Use reflection to instantiate it
via HV's classloader, avoiding a direct package import that would fail
OSGi feature resolution.
ServiceLoader-based EL ExpressionFactory discovery does not work across
OSGi bundle boundaries, and DynamicImport-Package does not help because
the wrapped HV bundle cannot resolve the Expressly implementation class
at runtime.

Use ParameterMessageInterpolator as the default MessageInterpolator in
OSGi.  This is Hibernate Validator's recommended fallback for environments
where Jakarta EL is not available.  Parameter interpolation ({0}, {1})
still works; only EL expressions (${...}) are not supported.
In Debezium 3.4.1, AntlrDdlParser lives in the debezium-ddl-parser
JAR under io.debezium.antlr package. The wrap instruction only
exported io.debezium.ddl*, causing ClassNotFoundException at runtime
for both MySQL and Oracle connectors.
@jbonofre jbonofre merged commit 8d0247f into apache:main Apr 6, 2026
3 checks passed
@jbonofre jbonofre deleted the camel-4.18.0 branch April 6, 2026 06:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Upgrade to Camel 4.18.0

1 participant