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
