You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/03/17 11:40:30 UTC

[camel] 12/19: CAMEL-18995: camel-splunk-hec - Upgrade to HttpComponents 5.x

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

nfilotto pushed a commit to branch CAMEL-18995/upgrade-httpcomponents-5
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 432364bdd3539932f82d0f69cb6e273fb57bf711
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Mar 17 12:31:37 2023 +0100

    CAMEL-18995: camel-splunk-hec - Upgrade to HttpComponents 5.x
---
 components/camel-splunk-hec/pom.xml                |  6 +--
 .../component/splunkhec/SplunkHECProducer.java     | 60 +++++++++++++---------
 2 files changed, 39 insertions(+), 27 deletions(-)

diff --git a/components/camel-splunk-hec/pom.xml b/components/camel-splunk-hec/pom.xml
index 6fc08cd3681..380f8823b89 100644
--- a/components/camel-splunk-hec/pom.xml
+++ b/components/camel-splunk-hec/pom.xml
@@ -43,9 +43,9 @@
             <version>${jackson2-version}</version>
         </dependency>
         <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-            <version>${httpclient4-version}</version>
+            <groupId>org.apache.httpcomponents.client5</groupId>
+            <artifactId>httpclient5</artifactId>
+            <version>${httpclient-version}</version>
         </dependency>
         <dependency>
             <groupId>commons-validator</groupId>
diff --git a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECProducer.java b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECProducer.java
index f0438ad26cf..9caacf18e86 100644
--- a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECProducer.java
+++ b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECProducer.java
@@ -25,23 +25,25 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultProducer;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.EntityTemplate;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.hc.client5.http.classic.methods.HttpPost;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
+import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
+import org.apache.hc.core5.http.ContentType;
+import org.apache.hc.core5.http.config.RegistryBuilder;
+import org.apache.hc.core5.http.io.entity.EntityTemplate;
+import org.apache.hc.core5.ssl.SSLContextBuilder;
 
 /**
  * The Splunk HEC producer.
  */
 public class SplunkHECProducer extends DefaultProducer {
     private static final ObjectMapper MAPPER = new ObjectMapper();
-    private SplunkHECEndpoint endpoint;
+    private final SplunkHECEndpoint endpoint;
     private CloseableHttpClient httpClient;
 
     public SplunkHECProducer(SplunkHECEndpoint endpoint) {
@@ -53,14 +55,22 @@ public class SplunkHECProducer extends DefaultProducer {
     protected void doStart() throws Exception {
         super.doStart();
         HttpClientBuilder builder = HttpClients.custom()
-                .setUserAgent("Camel Splunk HEC/" + getEndpoint().getCamelContext().getVersion()).setMaxConnTotal(10);
+                .setUserAgent("Camel Splunk HEC/" + getEndpoint().getCamelContext().getVersion());
+        PoolingHttpClientConnectionManager connManager;
         if (endpoint.getConfiguration().isSkipTlsVerify()) {
             SSLContextBuilder sslbuilder = new SSLContextBuilder();
             sslbuilder.loadTrustMaterial(null, (chain, authType) -> true);
             SSLConnectionSocketFactory sslsf
                     = new SSLConnectionSocketFactory(sslbuilder.build(), NoopHostnameVerifier.INSTANCE);
-            builder.setSSLSocketFactory(sslsf);
+            RegistryBuilder<ConnectionSocketFactory> registryBuilder = RegistryBuilder.create();
+            registryBuilder.register("https", sslsf);
+
+            connManager = new PoolingHttpClientConnectionManager(registryBuilder.build());
+        } else {
+            connManager = new PoolingHttpClientConnectionManager();
         }
+        connManager.setMaxTotal(10);
+        builder.setConnectionManager(connManager);
         httpClient = builder.build();
     }
 
@@ -73,19 +83,21 @@ public class SplunkHECProducer extends DefaultProducer {
                                          + endpoint.getSplunkURL() + endpoint.getConfiguration().getSplunkEndpoint());
         httppost.addHeader("Authorization", " Splunk " + endpoint.getToken());
 
-        EntityTemplate entityTemplate = new EntityTemplate(outputStream -> MAPPER.writer().writeValue(outputStream, payload));
-        entityTemplate.setContentType(ContentType.APPLICATION_JSON.getMimeType());
+        EntityTemplate entityTemplate = new EntityTemplate(
+                -1, ContentType.APPLICATION_JSON, null, outputStream -> MAPPER.writer().writeValue(outputStream, payload));
 
         httppost.setEntity(entityTemplate);
-        try (CloseableHttpResponse response = httpClient.execute(httppost)) {
-            if (response.getStatusLine().getStatusCode() != 200) {
-                ByteArrayOutputStream output = new ByteArrayOutputStream();
-                response.getEntity().writeTo(output);
-
-                throw new RuntimeException(
-                        response.getStatusLine().toString() + "\n" + new String(output.toByteArray(), StandardCharsets.UTF_8));
-            }
-        }
+        httpClient.execute(
+                httppost,
+                response -> {
+                    if (response.getCode() != 200) {
+                        ByteArrayOutputStream output = new ByteArrayOutputStream();
+                        response.getEntity().writeTo(output);
+
+                        throw new RuntimeException(response + "\n" + output.toString(StandardCharsets.UTF_8));
+                    }
+                    return null;
+                });
     }
 
     @Override