This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch CAMEL-22052
in repository https://gitbox.apache.org/repos/asf/camel.git

commit aa8baf37eac3d9993dfa2be9c495a078323ccd3a
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri May 16 10:51:10 2025 +0200

    CAMEL-22052 - Camel-opensearch: Upgrade to 3.x
    
    Signed-off-by: Andrea Cosentino <[email protected]>
---
 .../component/opensearch/OpensearchComponent.java  |  4 +-
 .../opensearch/OpensearchConfiguration.java        |  2 +-
 .../component/opensearch/OpensearchProducer.java   | 47 ++++++++++++++++------
 .../integration/OpensearchClusterIndexIT.java      |  4 +-
 .../integration/OpensearchTestSupport.java         | 20 ++++-----
 parent/pom.xml                                     |  4 +-
 .../infra/opensearch/services/container.properties |  2 +-
 7 files changed, 52 insertions(+), 31 deletions(-)

diff --git 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
index afc8de15e98..57cd966dea0 100644
--- 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
+++ 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchComponent.java
@@ -26,7 +26,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
-import org.apache.http.HttpHost;
+import org.apache.hc.core5.http.HttpHost;
 import org.opensearch.client.RestClient;
 
 /**
@@ -103,7 +103,7 @@ public class OpensearchComponent extends DefaultComponent {
                 throw new IllegalArgumentException();
             }
             int port = split.length > 1 ? Integer.parseInt(split[1]) : 
OpensearchConstants.DEFAULT_PORT;
-            addressesTrAd.add(new HttpHost(hostname, port, 
config.isEnableSSL() ? "HTTPS" : "HTTP"));
+            addressesTrAd.add(new HttpHost(config.isEnableSSL() ? "HTTPS" : 
"HTTP", hostname, port));
         }
         return addressesTrAd;
     }
diff --git 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
index 87dbafc6b7f..2dcb149520c 100644
--- 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
+++ 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchConfiguration.java
@@ -25,7 +25,7 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
-import org.apache.http.HttpHost;
+import org.apache.hc.core5.http.HttpHost;
 
 @UriParams
 public class OpensearchConfiguration {
diff --git 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
index ac95285a176..cc7419279ac 100644
--- 
a/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
+++ 
b/components/camel-opensearch/src/main/java/org/apache/camel/component/opensearch/OpensearchProducer.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.cert.Certificate;
 import java.security.cert.CertificateFactory;
+import java.time.Duration;
 import java.util.concurrent.CompletableFuture;
 
 import javax.net.ssl.SSLContext;
@@ -36,11 +37,17 @@ import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.hc.client5.http.auth.AuthScope;
+import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
+import org.apache.hc.client5.http.config.ConnectionConfig;
+import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
+import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager;
+import 
org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
+import org.apache.hc.client5.http.ssl.ClientTlsStrategyBuilder;
+import org.apache.hc.core5.http.HttpHost;
+import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
+import org.apache.hc.core5.reactor.ssl.TlsDetails;
+import org.apache.hc.core5.util.Timeout;
 import org.opensearch.client.RestClient;
 import org.opensearch.client.RestClientBuilder;
 import org.opensearch.client.json.jackson.JacksonJsonpMapper;
@@ -472,18 +479,32 @@ class OpensearchProducer extends DefaultAsyncProducer {
         final RestClientBuilder builder = 
RestClient.builder(configuration.getHostAddressesList().toArray(new 
HttpHost[0]));
 
         builder.setRequestConfigCallback(requestConfigBuilder -> 
requestConfigBuilder
-                
.setConnectTimeout(configuration.getConnectionTimeout()).setSocketTimeout(configuration.getSocketTimeout()));
+                
.setConnectTimeout(Timeout.of(Duration.ofMillis(configuration.getConnectionTimeout()))));
         if (ObjectHelper.isNotEmpty(configuration.getUser()) && 
ObjectHelper.isNotEmpty(configuration.getPassword())) {
-            final CredentialsProvider credentialsProvider = new 
BasicCredentialsProvider();
-            credentialsProvider.setCredentials(AuthScope.ANY,
-                    new UsernamePasswordCredentials(configuration.getUser(), 
configuration.getPassword()));
+            final BasicCredentialsProvider credentialsProvider = new 
BasicCredentialsProvider();
+            credentialsProvider.setCredentials(new 
AuthScope(configuration.getHostAddressesList().get(0)),
+                    new UsernamePasswordCredentials(configuration.getUser(), 
configuration.getPassword().toCharArray()));
+
             builder.setHttpClientConfigCallback(httpClientBuilder -> {
                 
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                 if 
(ObjectHelper.isNotEmpty(configuration.getCertificatePath())) {
-                    httpClientBuilder.setSSLContext(createSslContextFromCa());
-                }
-                if 
(ObjectHelper.isNotEmpty(configuration.getHostnameVerifier())) {
-                    
httpClientBuilder.setSSLHostnameVerifier(configuration.getHostnameVerifier());
+                    final TlsStrategy tlsStrategy = 
ClientTlsStrategyBuilder.create()
+                            .setSslContext(createSslContextFromCa())
+                            
.setHostnameVerifier(configuration.getHostnameVerifier())
+                            .setTlsDetailsFactory(
+                                    sslEngine -> new 
TlsDetails(sslEngine.getSession(), sslEngine.getApplicationProtocol()))
+                            .build();
+
+                    final PoolingAsyncClientConnectionManager connectionManager
+                            = 
PoolingAsyncClientConnectionManagerBuilder.create()
+                                    .setTlsStrategy(tlsStrategy)
+                                    
.setDefaultConnectionConfig(ConnectionConfig.custom()
+                                            .setConnectTimeout(
+                                                    
Timeout.of(Duration.ofMillis(configuration.getConnectionTimeout())))
+                                            
.setSocketTimeout(Timeout.of(Duration.ofMillis(configuration.getSocketTimeout())))
+                                            .build())
+                                    .build();
+                    httpClientBuilder.setConnectionManager(connectionManager);
                 }
                 return httpClientBuilder;
             });
diff --git 
a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
 
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
index 2f663a68d6a..7b8a91c8547 100644
--- 
a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
+++ 
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchClusterIndexIT.java
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.opensearch.OpensearchConstants;
 import org.apache.camel.component.opensearch.OpensearchOperation;
-import org.apache.http.impl.client.BasicResponseHandler;
+import org.apache.hc.client5.http.impl.classic.BasicHttpClientResponseHandler;
 import org.junit.jupiter.api.Test;
 import org.opensearch.client.Request;
 import org.opensearch.client.opensearch.core.GetRequest;
@@ -66,7 +66,7 @@ class OpensearchClusterIndexIT extends OpensearchTestSupport {
         assertTrue(client.get(new 
GetRequest.Builder().index("facebook").id("4").build(), 
ObjectNode.class).found(),
                 "Index id 4 must exists");
 
-        final BasicResponseHandler responseHandler = new 
BasicResponseHandler();
+        final BasicHttpClientResponseHandler responseHandler = new 
BasicHttpClientResponseHandler();
         Request request = new Request("GET", "/_cluster/health?pretty");
         String body = 
responseHandler.handleEntity(restClient.performRequest(request).getEntity());
         assertStringContains(body, "\"number_of_data_nodes\" : 1");
diff --git 
a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
 
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
index 051068e6a6b..8278797d222 100644
--- 
a/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
+++ 
b/components/camel-opensearch/src/test/java/org/apache/camel/component/opensearch/integration/OpensearchTestSupport.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.opensearch.integration;
 
 import java.io.IOException;
+import java.net.URISyntaxException;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -33,11 +34,10 @@ import 
org.apache.camel.test.infra.core.api.ConfigurableContext;
 import org.apache.camel.test.infra.core.api.ConfigurableRoute;
 import org.apache.camel.test.infra.opensearch.services.OpenSearchService;
 import 
org.apache.camel.test.infra.opensearch.services.OpenSearchServiceFactory;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.hc.client5.http.auth.AuthScope;
+import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
+import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
+import org.apache.hc.core5.http.HttpHost;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Order;
@@ -72,13 +72,13 @@ public abstract class OpensearchTestSupport implements 
CamelTestSupportHelper, C
     private String prefix;
 
     @BeforeEach
-    public void beforeEach(TestInfo testInfo) {
+    public void beforeEach(TestInfo testInfo) throws URISyntaxException {
         HttpHost host
-                = new HttpHost(service.getOpenSearchHost(), service.getPort(), 
"http");
+                = new HttpHost("http", service.getOpenSearchHost(), 
service.getPort());
         final RestClientBuilder builder = RestClient.builder(host);
-        final CredentialsProvider credentialsProvider = new 
BasicCredentialsProvider();
-        credentialsProvider.setCredentials(AuthScope.ANY,
-                new UsernamePasswordCredentials(service.getUsername(), 
service.getPassword()));
+        final BasicCredentialsProvider credentialsProvider = new 
BasicCredentialsProvider();
+        credentialsProvider.setCredentials(new 
AuthScope(HttpHost.create(service.getOpenSearchHost())),
+                new UsernamePasswordCredentials(service.getUsername(), 
service.getPassword().toCharArray()));
         builder.setHttpClientConfigCallback(
                 httpClientBuilder -> {
                     
httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
diff --git a/parent/pom.xml b/parent/pom.xml
index 3f3a6024307..f4bbaff50e5 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -397,8 +397,8 @@
         <ognl-version>3.4.7</ognl-version>
         <openapi-generator-version>7.13.0</openapi-generator-version>
         <openjpa-version>4.1.0</openjpa-version>
-        <opensearch-rest-client-version>2.19.2</opensearch-rest-client-version>
-        <opensearch-java-client-version>2.23.0</opensearch-java-client-version>
+        <opensearch-rest-client-version>3.0.0</opensearch-rest-client-version>
+        <opensearch-java-client-version>3.0.0</opensearch-java-client-version>
         
<opensearch-testcontainers-version>2.1.3</opensearch-testcontainers-version>
         <openstack4j-version>3.12</openstack4j-version>
         <opentelemetry-version>1.50.0</opentelemetry-version>
diff --git 
a/test-infra/camel-test-infra-opensearch/src/main/resources/org/apache/camel/test/infra/opensearch/services/container.properties
 
b/test-infra/camel-test-infra-opensearch/src/main/resources/org/apache/camel/test/infra/opensearch/services/container.properties
index 6d1a62edf0a..f1977aff483 100644
--- 
a/test-infra/camel-test-infra-opensearch/src/main/resources/org/apache/camel/test/infra/opensearch/services/container.properties
+++ 
b/test-infra/camel-test-infra-opensearch/src/main/resources/org/apache/camel/test/infra/opensearch/services/container.properties
@@ -14,5 +14,5 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-opensearch.container=mirror.gcr.io/opensearchproject/opensearch:2.19.1
+opensearch.container=mirror.gcr.io/opensearchproject/opensearch:3.0.0
 opensearch.container.ppc64le=icr.io/ppc64le-oss/opensearch-ppc64le:2.12.0

Reply via email to