[
https://issues.apache.org/jira/browse/CAMEL-26343?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26343 started by Andrea Cosentino.
------------------------------------------------
> camel-aws - set the AWS SDK HTTP client explicitly instead of the classpath
> lookup
> ----------------------------------------------------------------------------------
>
> Key: CAMEL-26343
> URL: https://issues.apache.org/jira/browse/CAMEL-26343
> Project: Camel
> Issue Type: Bug
> Components: camel-aws2
> Reporter: Andrea Cosentino
> Assignee: Andrea Cosentino
> Priority: Major
> Fix For: 4.22.3, 4.24.0
>
>
> Since CAMEL-23866 (4.22.0) the camel-aws components use the AWS SDK
> {{apache5-client}} instead of {{apache-client}}. {{AwsClientBuilderUtil}}
> sets an HTTP client on the SDK client builder only when a proxy or
> {{trustAllCertificates}} is configured. Otherwise the AWS SDK picks one with
> {{ServiceLoader}}: {{ClasspathSdkHttpServiceProvider}} loads every registered
> {{SdkHttpService}} and then ranks them, so one registration that cannot be
> loaded fails the whole lookup, even though the {{Apache5SdkHttpService}} that
> Camel ships is there.
> This happens under Kafka Connect plugin isolation. With Camel Kafka Connector
> 4.22.0 on {{confluentinc/cp-kafka-connect:8.2.4}}, the worker classpath has
> its own AWS SDK 2.29.39 with the classic {{apache-client}}. The plugin class
> loader also returns the worker's {{META-INF/services}} files, and
> {{ApacheSdkHttpService}}, which the plugin no longer ships, is loaded from
> the worker's class loader:
> {noformat}
> java.util.ServiceConfigurationError:
> software.amazon.awssdk.http.SdkHttpService:
> software.amazon.awssdk.http.apache.ApacheSdkHttpService not a subtype
> at java.base/java.util.ServiceLoader.fail(Unknown Source)
> ...
> at
> software.amazon.awssdk.core.internal.http.loader.ClasspathSdkHttpServiceProvider.loadService(ClasspathSdkHttpServiceProvider.java:75)
> ...
> at
> software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder.buildWithDefaults(DefaultSdkHttpClientBuilder.java:42)
> ...
> at
> software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:173)
> at
> org.apache.camel.component.aws.common.AwsClientBuilderUtil.buildClient(AwsClientBuilderUtil.java:131)
> at
> org.apache.camel.component.aws2.s3.client.AWS2S3ClientFactory.getS3Client(AWS2S3ClientFactory.java:38)
> at
> org.apache.camel.component.aws2.s3.AWS2S3Endpoint.doStart(AWS2S3Endpoint.java:139)
> {noformat}
> Every sync client built through {{AwsClientBuilderUtil}} without a proxy or
> {{trustAllCertificates}} is exposed; async clients go through the same lookup
> for {{SdkAsyncHttpService}}. Before 4.22.0 the components depended on
> {{apache-client}}, so the plugin had its own {{ApacheSdkHttpService}} and the
> worker's registration resolved to it, which hid the problem.
> Proposed fix: when no HTTP client is configured, {{AwsClientBuilderUtil}}
> sets {{Apache5HttpClient.builder()}} on sync clients and
> {{NettyNioAsyncHttpClient.builder()}} on async clients. These are the
> implementations the lookup selects when it succeeds, so nothing changes for a
> working setup. When an implementation is chosen with the AWS SDK setting
> {{software.amazon.awssdk.http.service.impl}} (or
> {{software.amazon.awssdk.http.async.service.impl}}), Camel keeps leaving the
> choice to the SDK.
> Reported in https://github.com/apache/camel-kafka-connector/issues/1849
> _Claude Code on behalf of Andrea Cosentino_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)