You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/11 06:23:54 UTC

(camel) branch main updated: CAMEL-20166: Polished

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new ab6f7914ef7 CAMEL-20166: Polished
ab6f7914ef7 is described below

commit ab6f7914ef72aa365bacd345fd9c62b28bc82a60
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Dec 11 07:23:42 2023 +0100

    CAMEL-20166: Polished
---
 .../components/elasticsearch-rest-client.json      |  14 +-
 .../ElasticsearchRestClientEndpointUriFactory.java |   3 +-
 .../rest/client/elasticsearch-rest-client.json     |  14 +-
 .../docs/elasticsearch-rest-client-component.adoc  |   2 +-
 .../client/ElasticSearchRestClientConstant.java    |   4 -
 .../client/ElasticsearchRestClientEndpoint.java    |  45 +-
 .../client/ElasticsearchRestClientProducer.java    |  84 +---
 .../src/test/resources/log4j2.properties           |  16 +-
 .../component/ComponentsBuilderFactory.java        |  14 +
 ...ticsearchRestClientComponentBuilderFactory.java | 123 ++++++
 .../src/generated/resources/metadata.json          |  22 +
 .../builder/endpoint/EndpointBuilderFactory.java   |   1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |   1 +
 .../builder/endpoint/StaticEndpointBuilders.java   |  45 ++
 ...sticsearchRestClientEndpointBuilderFactory.java | 471 +++++++++++++++++++++
 15 files changed, 731 insertions(+), 128 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/elasticsearch-rest-client.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/elasticsearch-rest-client.json
index 423d67dd692..23bf39a30ca 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/elasticsearch-rest-client.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/elasticsearch-rest-client.json
@@ -3,7 +3,7 @@
     "kind": "component",
     "name": "elasticsearch-rest-client",
     "title": "Elasticsearch Low level Rest Client",
-    "description": "ElasticsearchRestClient component which allows you to interface with Elasticsearch or OpenSearch using the Java Low level Rest Client",
+    "description": "Perform queries and other operations on Elasticsearch or OpenSearch (uses low-level client).",
     "deprecated": false,
     "firstVersion": "4.3.0",
     "label": "search",
@@ -28,17 +28,17 @@
   "properties": {
     "clusterName": { "index": 0, "kind": "path", "displayName": "Cluster Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Cluster Name" },
     "connectionTimeout": { "index": 1, "kind": "parameter", "displayName": "Connection Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "description": "Connection timeout" },
-    "hostAddressesList": { "index": 2, "kind": "parameter", "displayName": "Host Addresses List", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "List of host Adresses, separeted by comma" },
+    "hostAddressesList": { "index": 2, "kind": "parameter", "displayName": "Host Addresses List", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "List of host Addresses, multiple hosts can be separated by comma." },
     "indexName": { "index": 3, "kind": "parameter", "displayName": "Index Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Index Name" },
-    "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation", "enum": [ "INDEX_OR_UPDATE", "GET_BY_ID", "DELETE", "CREATE_INDEX", "DELETE_INDEX", "SEARCH" ], "deprecated": false, "autowired": false, "secret": false, "description": "Operation" },
+    "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation", "enum": [ "INDEX_OR_UPDATE", "GET_BY_ID", "DELETE", "CREATE_INDEX", "DELETE_INDEX", "SEARCH" ], "deprecated": false, "autowired": false, "secret": true, "description": "Operation" },
     "socketTimeout": { "index": 5, "kind": "parameter", "displayName": "Socket Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "description": "Socket timeout" },
     "lazyStartProducer": { "index": 6, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...]
     "enableSniffer": { "index": 7, "kind": "parameter", "displayName": "Enable Sniffer", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enabling Sniffer" },
     "restClient": { "index": 8, "kind": "parameter", "displayName": "Rest Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.elasticsearch.client.RestClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "description": "Rest Client of type org.elasticsearch.client.RestClient. This is only for advanced usage" },
-    "sniffAfterFailureDelay": { "index": 9, "kind": "parameter", "displayName": "Sniff After Failure Delay", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer After Failure Delay" },
-    "snifferInterval": { "index": 10, "kind": "parameter", "displayName": "Sniffer Interval", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer Interval" },
-    "certificatePath": { "index": 11, "kind": "parameter", "displayName": "Certificate Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Certifcate Path" },
+    "sniffAfterFailureDelay": { "index": 9, "kind": "parameter", "displayName": "Sniff After Failure Delay", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer after failure delay (in millis)" },
+    "snifferInterval": { "index": 10, "kind": "parameter", "displayName": "Sniffer Interval", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer interval (in millis)" },
+    "certificatePath": { "index": 11, "kind": "parameter", "displayName": "Certificate Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Certificate Path" },
     "password": { "index": 12, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Password" },
-    "user": { "index": 13, "kind": "parameter", "displayName": "User", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "User" }
+    "user": { "index": 13, "kind": "parameter", "displayName": "User", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Username" }
   }
 }
diff --git a/components/camel-elasticsearch-rest-client/src/generated/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpointUriFactory.java b/components/camel-elasticsearch-rest-client/src/generated/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpointUriFactory.java
index 3aa525691a4..f4c1fa1feda 100644
--- a/components/camel-elasticsearch-rest-client/src/generated/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpointUriFactory.java
+++ b/components/camel-elasticsearch-rest-client/src/generated/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpointUriFactory.java
@@ -37,7 +37,8 @@ public class ElasticsearchRestClientEndpointUriFactory extends org.apache.camel.
         props.add("socketTimeout");
         props.add("user");
         PROPERTY_NAMES = Collections.unmodifiableSet(props);
-        Set<String> secretProps = new HashSet<>(2);
+        Set<String> secretProps = new HashSet<>(3);
+        secretProps.add("operation");
         secretProps.add("password");
         secretProps.add("user");
         SECRET_PROPERTY_NAMES = Collections.unmodifiableSet(secretProps);
diff --git a/components/camel-elasticsearch-rest-client/src/generated/resources/org/apache/camel/component/elasticsearch/rest/client/elasticsearch-rest-client.json b/components/camel-elasticsearch-rest-client/src/generated/resources/org/apache/camel/component/elasticsearch/rest/client/elasticsearch-rest-client.json
index 423d67dd692..23bf39a30ca 100644
--- a/components/camel-elasticsearch-rest-client/src/generated/resources/org/apache/camel/component/elasticsearch/rest/client/elasticsearch-rest-client.json
+++ b/components/camel-elasticsearch-rest-client/src/generated/resources/org/apache/camel/component/elasticsearch/rest/client/elasticsearch-rest-client.json
@@ -3,7 +3,7 @@
     "kind": "component",
     "name": "elasticsearch-rest-client",
     "title": "Elasticsearch Low level Rest Client",
-    "description": "ElasticsearchRestClient component which allows you to interface with Elasticsearch or OpenSearch using the Java Low level Rest Client",
+    "description": "Perform queries and other operations on Elasticsearch or OpenSearch (uses low-level client).",
     "deprecated": false,
     "firstVersion": "4.3.0",
     "label": "search",
@@ -28,17 +28,17 @@
   "properties": {
     "clusterName": { "index": 0, "kind": "path", "displayName": "Cluster Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Cluster Name" },
     "connectionTimeout": { "index": 1, "kind": "parameter", "displayName": "Connection Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "description": "Connection timeout" },
-    "hostAddressesList": { "index": 2, "kind": "parameter", "displayName": "Host Addresses List", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "List of host Adresses, separeted by comma" },
+    "hostAddressesList": { "index": 2, "kind": "parameter", "displayName": "Host Addresses List", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "List of host Addresses, multiple hosts can be separated by comma." },
     "indexName": { "index": 3, "kind": "parameter", "displayName": "Index Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Index Name" },
-    "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation", "enum": [ "INDEX_OR_UPDATE", "GET_BY_ID", "DELETE", "CREATE_INDEX", "DELETE_INDEX", "SEARCH" ], "deprecated": false, "autowired": false, "secret": false, "description": "Operation" },
+    "operation": { "index": 4, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation", "enum": [ "INDEX_OR_UPDATE", "GET_BY_ID", "DELETE", "CREATE_INDEX", "DELETE_INDEX", "SEARCH" ], "deprecated": false, "autowired": false, "secret": true, "description": "Operation" },
     "socketTimeout": { "index": 5, "kind": "parameter", "displayName": "Socket Timeout", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 30000, "description": "Socket timeout" },
     "lazyStartProducer": { "index": 6, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produc [...]
     "enableSniffer": { "index": 7, "kind": "parameter", "displayName": "Enable Sniffer", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enabling Sniffer" },
     "restClient": { "index": 8, "kind": "parameter", "displayName": "Rest Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.elasticsearch.client.RestClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "description": "Rest Client of type org.elasticsearch.client.RestClient. This is only for advanced usage" },
-    "sniffAfterFailureDelay": { "index": 9, "kind": "parameter", "displayName": "Sniff After Failure Delay", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer After Failure Delay" },
-    "snifferInterval": { "index": 10, "kind": "parameter", "displayName": "Sniffer Interval", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer Interval" },
-    "certificatePath": { "index": 11, "kind": "parameter", "displayName": "Certificate Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Certifcate Path" },
+    "sniffAfterFailureDelay": { "index": 9, "kind": "parameter", "displayName": "Sniff After Failure Delay", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer after failure delay (in millis)" },
+    "snifferInterval": { "index": 10, "kind": "parameter", "displayName": "Sniffer Interval", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 60000, "description": "Sniffer interval (in millis)" },
+    "certificatePath": { "index": 11, "kind": "parameter", "displayName": "Certificate Path", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Certificate Path" },
     "password": { "index": 12, "kind": "parameter", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Password" },
-    "user": { "index": 13, "kind": "parameter", "displayName": "User", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "User" }
+    "user": { "index": 13, "kind": "parameter", "displayName": "User", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Username" }
   }
 }
diff --git a/components/camel-elasticsearch-rest-client/src/main/docs/elasticsearch-rest-client-component.adoc b/components/camel-elasticsearch-rest-client/src/main/docs/elasticsearch-rest-client-component.adoc
index 40a63725936..dd8d647b05f 100644
--- a/components/camel-elasticsearch-rest-client/src/main/docs/elasticsearch-rest-client-component.adoc
+++ b/components/camel-elasticsearch-rest-client/src/main/docs/elasticsearch-rest-client-component.adoc
@@ -2,7 +2,7 @@
 :doctitle: Elasticsearch Low level Rest Client
 :shortname: elasticsearch-rest-client
 :artifactid: camel-elasticsearch-rest-client
-:description: ElasticsearchRestClient component which allows you to interface with Elasticsearch or OpenSearch using the Java Low level Rest Client
+:description: Perform queries and other operations on Elasticsearch or OpenSearch (uses low-level client).
 :since: 4.3
 :supportlevel: Preview
 :tabs-sync-option:
diff --git a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticSearchRestClientConstant.java b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticSearchRestClientConstant.java
index cf96401e26e..9784e9a3583 100644
--- a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticSearchRestClientConstant.java
+++ b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticSearchRestClientConstant.java
@@ -21,20 +21,16 @@ import org.apache.camel.spi.Metadata;
 public class ElasticSearchRestClientConstant {
 
     @Metadata(description = " ID of the object to index or retrieve or delete", javaType = "String")
-
     public static final String ID = "ID";
 
     @Metadata(description = "The JSON Query to perform for search", javaType = "String")
-
     public static final String SEARCH_QUERY = "SEARCH_QUERY";
 
     @Metadata(description = "Advanced - The JSON Index Settings and/or Mappings Query to perform to create an index",
               javaType = "String")
-
     public static final String INDEX_SETTINGS = "INDEX_SETTINGS";
 
     @Metadata(description = "The Index name", javaType = "String")
-
     public static final String INDEX_NAME = "INDEX_NAME";
 
     public static final int SOCKET_CONNECTION_TIMEOUT = 30000;
diff --git a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpoint.java b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpoint.java
index 246c1ffab2a..c39d9c49759 100644
--- a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpoint.java
+++ b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientEndpoint.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.elasticsearch.rest.client;
 
-import java.util.List;
-
 import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
@@ -31,9 +29,7 @@ import org.apache.camel.util.ObjectHelper;
 import org.elasticsearch.client.RestClient;
 
 /**
- * ElasticsearchRestClient component which allows you to interface with Elasticsearch or OpenSearch using the Java Low
- * level Rest Client
- * <p>
+ * Perform queries and other operations on Elasticsearch or OpenSearch (uses low-level client).
  */
 @UriEndpoint(firstVersion = "4.3.0", scheme = "elasticsearch-rest-client",
              title = "Elasticsearch Low level Rest Client",
@@ -43,7 +39,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     @UriPath
     @Metadata(required = true)
     private String clusterName;
-    @UriParam
+    @UriParam(secret = true)
     ElasticsearchRestClientOperation operation;
 
     @UriParam(label = "advanced")
@@ -52,13 +48,11 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     @UriParam
     String indexName;
-
     @UriParam
     String hostAddressesList;
 
     @UriParam(defaultValue = "" + ElasticSearchRestClientConstant.SOCKET_CONNECTION_TIMEOUT)
     private int connectionTimeout = ElasticSearchRestClientConstant.SOCKET_CONNECTION_TIMEOUT;
-
     @UriParam(defaultValue = "" + ElasticSearchRestClientConstant.SOCKET_CONNECTION_TIMEOUT)
     private int socketTimeout = ElasticSearchRestClientConstant.SOCKET_CONNECTION_TIMEOUT;
 
@@ -72,7 +66,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     @UriParam(label = "advanced")
     private boolean enableSniffer;
-
     @UriParam(label = "advanced", defaultValue = "" + ElasticSearchRestClientConstant.SNIFFER_INTERVAL_AND_FAILURE_DELAY)
     private int snifferInterval = ElasticSearchRestClientConstant.SNIFFER_INTERVAL_AND_FAILURE_DELAY;
     @UriParam(label = "advanced", defaultValue = "" + ElasticSearchRestClientConstant.SNIFFER_INTERVAL_AND_FAILURE_DELAY)
@@ -109,8 +102,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Operation
-     *
-     * @return
      */
     public ElasticsearchRestClientOperation getOperation() {
         return operation;
@@ -122,8 +113,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Rest Client of type org.elasticsearch.client.RestClient. This is only for advanced usage
-     *
-     * @return
      */
     public RestClient getRestClient() {
         return restClient;
@@ -135,8 +124,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Index Name
-     *
-     * @return
      */
     public String getIndexName() {
         return indexName;
@@ -147,9 +134,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * List of host Adresses, separeted by comma
-     *
-     * @return
+     * List of host Addresses, multiple hosts can be separated by comma.
      */
     public String getHostAddressesList() {
         return hostAddressesList;
@@ -161,8 +146,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Connection timeout
-     *
-     * @return
      */
     public int getConnectionTimeout() {
         return connectionTimeout;
@@ -174,8 +157,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Socket timeout
-     *
-     * @return
      */
     public int getSocketTimeout() {
         return socketTimeout;
@@ -186,9 +167,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * User
-     *
-     * @return
+     * Username
      */
     public String getUser() {
         return user;
@@ -200,8 +179,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Password
-     *
-     * @return
      */
     public String getPassword() {
         return password;
@@ -212,9 +189,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * Certifcate Path
-     *
-     * @return
+     * Certificate Path
      */
     public String getCertificatePath() {
         return certificatePath;
@@ -226,8 +201,6 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
 
     /**
      * Enabling Sniffer
-     *
-     * @return
      */
     public boolean isEnableSniffer() {
         return enableSniffer;
@@ -238,9 +211,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * Sniffer Interval
-     *
-     * @return
+     * Sniffer interval (in millis)
      */
     public int getSnifferInterval() {
         return snifferInterval;
@@ -251,9 +222,7 @@ public class ElasticsearchRestClientEndpoint extends DefaultEndpoint {
     }
 
     /**
-     * Sniffer After Failure Delay
-     *
-     * @return
+     * Sniffer after failure delay (in millis)
      */
     public int getSniffAfterFailureDelay() {
         return sniffAfterFailureDelay;
diff --git a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientProducer.java b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientProducer.java
index 4bf7042130d..053e734df32 100644
--- a/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientProducer.java
+++ b/components/camel-elasticsearch-rest-client/src/main/java/org/apache/camel/component/elasticsearch/rest/client/ElasticsearchRestClientProducer.java
@@ -35,8 +35,10 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
+import org.apache.camel.InvalidPayloadException;
 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.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
@@ -62,8 +64,8 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
     public static final String GET = "GET";
 
     private ElasticsearchRestClientEndpoint endpoint;
-
     private RestClient restClient;
+    private boolean createdRestClient;
 
     public ElasticsearchRestClientProducer(ElasticsearchRestClientEndpoint endpoint) {
         super(endpoint);
@@ -93,28 +95,34 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
         }
 
         Request request = generateRequest(exchange, indexName);
-
         performRequest(exchange, callback, request);
     }
 
     @Override
     protected void doStart() throws Exception {
-        // create RestClient
+        super.doStart();
+
         restClient = this.endpoint.getRestClient();
         if (restClient == null) {
-            createClient();
+            restClient = createClient();
+            createdRestClient = true;
         }
+    }
 
+    @Override
+    protected void doStop() throws Exception {
+        super.doStop();
+
+        if (createdRestClient && restClient != null) {
+            IOHelper.close(restClient);
+            restClient = null;
+        }
     }
 
     /**
      * Generate REST Request depending on content of Exchange
-     *
-     * @param  exchange
-     * @param  indexName
-     * @return
      */
-    private Request generateRequest(Exchange exchange, String indexName) {
+    private Request generateRequest(Exchange exchange, String indexName) throws Exception {
         return switch (this.endpoint.getOperation()) {
             case CREATE_INDEX -> createIndexRequest(indexName, exchange);
             case DELETE_INDEX -> deleteIndexRequest(indexName);
@@ -127,10 +135,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Async request to Elasticsearch or equivalent Server
-     *
-     * @param exchange
-     * @param callback
-     * @param request
      */
     private void performRequest(
             Exchange exchange, AsyncCallback callback, Request request) {
@@ -165,8 +169,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
                     /**
                      * Generate response Body of the Exchange, depending on operation Type
-                     *
-                     * @param doc
                      */
                     private void populateExchange(JsonObject doc) {
                         switch (endpoint.getOperation()) {
@@ -188,9 +190,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /***
      * Generate the Request for operation CREATE_INDEX
-     *
-     * @param  indexName
-     * @return
      */
     private Request createIndexRequest(String indexName, Exchange exchange) {
         var endpoint = String.format("/%s", indexName);
@@ -205,29 +204,17 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /***
      * Generate the Request for operation DELETE_INDEX
-     *
-     * @param  indexName
-     * @return
      */
     private Request deleteIndexRequest(String indexName) {
         var endpoint = String.format("/%s", indexName);
         return new Request(DELETE, endpoint);
-
     }
 
     /**
      * Generate the Request for operation INDEX_OR_UPDATE
-     *
-     * @param  indexName
-     * @param  exchange
-     * @return
      */
-    private Request indexRequest(String indexName, Exchange exchange) {
-        var jsonBody = exchange.getMessage().getBody(String.class);
-        if (jsonBody == null) {
-            throw new IllegalArgumentException(
-                    "Document is mandatory");
-        }
+    private Request indexRequest(String indexName, Exchange exchange) throws InvalidPayloadException {
+        var jsonBody = exchange.getMessage().getMandatoryBody(String.class);
 
         var endpoint = String.format("/%s/_doc", indexName);
 
@@ -245,10 +232,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Generate the Request for operation GET_BY_ID
-     *
-     * @param  indexName
-     * @param  exchange
-     * @return
      */
     private Request getById(String indexName, Exchange exchange) {
         var id = exchange.getMessage().getBody(String.class);
@@ -265,10 +248,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Generate the Request for DELETE
-     *
-     * @param  indexName
-     * @param  exchange
-     * @return
      */
     private Request delete(String indexName, Exchange exchange) {
         var id = exchange.getMessage().getBody(String.class);
@@ -285,10 +264,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Generate the Request for operation SEARCH
-     *
-     * @param  indexName
-     * @param  exchange
-     * @return
      */
     private Request search(String indexName, Exchange exchange) {
         var endpoint = String.format("/%s/_search", indexName);
@@ -313,9 +288,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * creates an Elasticsearch Json Query based on matches
-     *
-     * @param  queryParameters
-     * @return
      */
     private String createQueryFromMap(Map<String, String> queryParameters) {
         ObjectMapper objectMapper = new ObjectMapper();
@@ -339,8 +311,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /***
      * Extract ACK value from Response Body from API server
-     *
-     * @return
      */
     boolean extractAck(JsonObject doc) {
         return doc.getBoolean("acknowledged");
@@ -348,9 +318,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Extract Deleted from Response Body from API Server
-     *
-     * @param  doc
-     * @return
      */
     boolean extractDeleted(JsonObject doc) {
         return "deleted".equals(doc.getString("result"));
@@ -358,9 +325,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Extract ID value from Response Body from API server
-     *
-     * @param  doc
-     * @return
      */
     String extractID(JsonObject doc) {
         return doc.getString("_id");
@@ -368,9 +332,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Extract Document from response
-     *
-     * @param  doc
-     * @return
      */
     String extractDocument(JsonObject doc) {
         // check if document exists
@@ -387,9 +348,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Extract Document from response
-     *
-     * @param  doc
-     * @return
      */
     String extractSearch(JsonObject doc) {
         Map<String, Object> hitsLevel1 = doc.getMap("hits");
@@ -404,9 +362,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
     /**
      * Creates Rest Client from information in the Endpoint
-     *
-     * @return
-     * @throws Exception
      */
     private RestClient createClient() throws Exception {
         final RestClientBuilder builder = RestClient.builder(getHttpHosts());
@@ -430,7 +385,6 @@ public class ElasticsearchRestClientProducer extends DefaultAsyncProducer {
 
         // initiate Sniffer
         if (this.endpoint.isEnableSniffer()) {
-
             Sniffer.builder(restClient)
                     .setSniffIntervalMillis(this.endpoint.getSnifferInterval())
                     .setSniffAfterFailureDelayMillis(this.endpoint.getSniffAfterFailureDelay())
diff --git a/components/camel-elasticsearch-rest-client/src/test/resources/log4j2.properties b/components/camel-elasticsearch-rest-client/src/test/resources/log4j2.properties
index d9f0508a6ff..c0ebd070182 100644
--- a/components/camel-elasticsearch-rest-client/src/test/resources/log4j2.properties
+++ b/components/camel-elasticsearch-rest-client/src/test/resources/log4j2.properties
@@ -15,9 +15,15 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-appender.out.type = Console
-appender.out.name = out
-appender.out.layout.type = PatternLayout
-appender.out.layout.pattern = [%30.30t] %-30.30c{1} %-5p %m%n
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-elasticsearch-rest-client-test.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.stdout.type = Console
+appender.stdout.name = stdout
+appender.stdout.layout.type = PatternLayout
+appender.stdout.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
 rootLogger.level = INFO
-rootLogger.appenderRef.out.ref = out
+rootLogger.appenderRef.file.ref = file
+
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index f419b69c24a..67c0fa65e68 100644
--- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -1259,6 +1259,20 @@ public interface ComponentsBuilderFactory {
     static org.apache.camel.builder.component.dsl.ElasticsearchComponentBuilderFactory.ElasticsearchComponentBuilder elasticsearch() {
         return org.apache.camel.builder.component.dsl.ElasticsearchComponentBuilderFactory.elasticsearch();
     }
+    /**
+     * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+     * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+     * low-level client).
+     * 
+     * Category: search
+     * Since: 4.3
+     * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+     * 
+     * @return the dsl builder
+     */
+    static org.apache.camel.builder.component.dsl.ElasticsearchRestClientComponentBuilderFactory.ElasticsearchRestClientComponentBuilder elasticsearchRestClient() {
+        return org.apache.camel.builder.component.dsl.ElasticsearchRestClientComponentBuilderFactory.elasticsearchRestClient();
+    }
     /**
      * Etcd v3 (camel-etcd3)
      * Get, set, delete or watch keys in etcd key-value store.
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ElasticsearchRestClientComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ElasticsearchRestClientComponentBuilderFactory.java
new file mode 100644
index 00000000000..fa2b84f8813
--- /dev/null
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/ElasticsearchRestClientComponentBuilderFactory.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder.component.dsl;
+
+import javax.annotation.processing.Generated;
+import org.apache.camel.Component;
+import org.apache.camel.builder.component.AbstractComponentBuilder;
+import org.apache.camel.builder.component.ComponentBuilder;
+import org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientComponent;
+
+/**
+ * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+ * low-level client).
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.ComponentDslMojo")
+public interface ElasticsearchRestClientComponentBuilderFactory {
+
+    /**
+     * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+     * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+     * low-level client).
+     * 
+     * Category: search
+     * Since: 4.3
+     * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+     * 
+     * @return the dsl builder
+     */
+    static ElasticsearchRestClientComponentBuilder elasticsearchRestClient() {
+        return new ElasticsearchRestClientComponentBuilderImpl();
+    }
+
+    /**
+     * Builder for the Elasticsearch Low level Rest Client component.
+     */
+    interface ElasticsearchRestClientComponentBuilder
+            extends
+                ComponentBuilder<ElasticsearchRestClientComponent> {
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientComponentBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Whether autowiring is enabled. This is used for automatic autowiring
+         * options (the option must be marked as autowired) by looking up in the
+         * registry to find if there is a single instance of matching type,
+         * which then gets configured on the component. This can be used for
+         * automatic configuring JDBC data sources, JMS connection factories,
+         * AWS Clients, etc.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: true
+         * Group: advanced
+         * 
+         * @param autowiredEnabled the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientComponentBuilder autowiredEnabled(
+                boolean autowiredEnabled) {
+            doSetProperty("autowiredEnabled", autowiredEnabled);
+            return this;
+        }
+    }
+
+    class ElasticsearchRestClientComponentBuilderImpl
+            extends
+                AbstractComponentBuilder<ElasticsearchRestClientComponent>
+            implements
+                ElasticsearchRestClientComponentBuilder {
+        @Override
+        protected ElasticsearchRestClientComponent buildConcreteComponent() {
+            return new ElasticsearchRestClientComponent();
+        }
+        @Override
+        protected boolean setPropertyOnComponent(
+                Component component,
+                String name,
+                Object value) {
+            switch (name) {
+            case "lazyStartProducer": ((ElasticsearchRestClientComponent) component).setLazyStartProducer((boolean) value); return true;
+            case "autowiredEnabled": ((ElasticsearchRestClientComponent) component).setAutowiredEnabled((boolean) value); return true;
+            default: return false;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/dsl/camel-componentdsl/src/generated/resources/metadata.json b/dsl/camel-componentdsl/src/generated/resources/metadata.json
index fa05780da7f..e0f91340a49 100644
--- a/dsl/camel-componentdsl/src/generated/resources/metadata.json
+++ b/dsl/camel-componentdsl/src/generated/resources/metadata.json
@@ -2036,6 +2036,28 @@
     "producerOnly": true,
     "lenientProperties": false
   },
+  "ElasticsearchRestClientComponentBuilderFactory": {
+    "kind": "component",
+    "name": "elasticsearch-rest-client",
+    "title": "Elasticsearch Low level Rest Client",
+    "description": "Perform queries and other operations on Elasticsearch or OpenSearch (uses low-level client).",
+    "deprecated": false,
+    "firstVersion": "4.3.0",
+    "label": "search",
+    "javaType": "org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-elasticsearch-rest-client",
+    "version": "4.3.0-SNAPSHOT",
+    "scheme": "elasticsearch-rest-client",
+    "extendsScheme": "",
+    "syntax": "elasticsearch-rest-client:clusterName",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": true,
+    "lenientProperties": false
+  },
   "Etcd3ComponentBuilderFactory": {
     "kind": "component",
     "name": "etcd3",
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index 83664133d54..6253eacabd7 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -96,6 +96,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory.EKS2Builders,
             org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory.EhcacheBuilders,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory.ElasticsearchBuilders,
+            org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory.ElasticsearchRestClientBuilders,
             org.apache.camel.builder.endpoint.dsl.Etcd3EndpointBuilderFactory.Etcd3Builders,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory.EventBuilders,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory.EventHubsBuilders,
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
index 497aa5f1a81..6853aeae15e 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
@@ -93,6 +93,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.EKS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EhcacheEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Etcd3EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.EventHubsEndpointBuilderFactory,
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index ac2197a8196..ae31400d075 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -4326,6 +4326,51 @@ public class StaticEndpointBuilders {
             String path) {
         return org.apache.camel.builder.endpoint.dsl.ElasticsearchEndpointBuilderFactory.endpointBuilder(componentName, path);
     }
+    /**
+     * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+     * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+     * low-level client).
+     * 
+     * Category: search
+     * Since: 4.3
+     * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+     * 
+     * Syntax: <code>elasticsearch-rest-client:clusterName</code>
+     * 
+     * Path parameter: clusterName (required)
+     * Cluster Name
+     * 
+     * @param path clusterName
+     * @return the dsl builder
+     */
+    public static org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory.ElasticsearchRestClientEndpointBuilder elasticsearchRestClient(
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory.endpointBuilder("elasticsearch-rest-client", path);
+    }
+    /**
+     * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+     * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+     * low-level client).
+     * 
+     * Category: search
+     * Since: 4.3
+     * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+     * 
+     * Syntax: <code>elasticsearch-rest-client:clusterName</code>
+     * 
+     * Path parameter: clusterName (required)
+     * Cluster Name
+     * 
+     * @param componentName to use a custom component name for the endpoint
+     * instead of the default name
+     * @param path clusterName
+     * @return the dsl builder
+     */
+    public static org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory.ElasticsearchRestClientEndpointBuilder elasticsearchRestClient(
+            String componentName,
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.ElasticsearchRestClientEndpointBuilderFactory.endpointBuilder(componentName, path);
+    }
     /**
      * Etcd v3 (camel-etcd3)
      * Get, set, delete or watch keys in etcd key-value store.
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ElasticsearchRestClientEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ElasticsearchRestClientEndpointBuilderFactory.java
new file mode 100644
index 00000000000..e45cb7b92e3
--- /dev/null
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/ElasticsearchRestClientEndpointBuilderFactory.java
@@ -0,0 +1,471 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.builder.endpoint.dsl;
+
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.function.*;
+import java.util.stream.*;
+import javax.annotation.processing.Generated;
+import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.builder.EndpointProducerBuilder;
+import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
+
+/**
+ * Perform queries and other operations on Elasticsearch or OpenSearch (uses
+ * low-level client).
+ * 
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface ElasticsearchRestClientEndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint for the Elasticsearch Low level Rest Client
+     * component.
+     */
+    public interface ElasticsearchRestClientEndpointBuilder
+            extends
+                EndpointProducerBuilder {
+        default AdvancedElasticsearchRestClientEndpointBuilder advanced() {
+            return (AdvancedElasticsearchRestClientEndpointBuilder) this;
+        }
+        /**
+         * Connection timeout.
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 30000
+         * Group: producer
+         * 
+         * @param connectionTimeout the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder connectionTimeout(
+                int connectionTimeout) {
+            doSetProperty("connectionTimeout", connectionTimeout);
+            return this;
+        }
+        /**
+         * Connection timeout.
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 30000
+         * Group: producer
+         * 
+         * @param connectionTimeout the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder connectionTimeout(
+                String connectionTimeout) {
+            doSetProperty("connectionTimeout", connectionTimeout);
+            return this;
+        }
+        /**
+         * List of host Addresses, multiple hosts can be separated by comma.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param hostAddressesList the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder hostAddressesList(
+                String hostAddressesList) {
+            doSetProperty("hostAddressesList", hostAddressesList);
+            return this;
+        }
+        /**
+         * Index Name.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param indexName the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder indexName(
+                String indexName) {
+            doSetProperty("indexName", indexName);
+            return this;
+        }
+        /**
+         * Operation.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param operation the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder operation(
+                org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * Operation.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.apache.camel.component.elasticsearch.rest.client.ElasticsearchRestClientOperation&lt;/code&gt; type.
+         * 
+         * Group: producer
+         * 
+         * @param operation the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder operation(
+                String operation) {
+            doSetProperty("operation", operation);
+            return this;
+        }
+        /**
+         * Socket timeout.
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 30000
+         * Group: producer
+         * 
+         * @param socketTimeout the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder socketTimeout(
+                int socketTimeout) {
+            doSetProperty("socketTimeout", socketTimeout);
+            return this;
+        }
+        /**
+         * Socket timeout.
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 30000
+         * Group: producer
+         * 
+         * @param socketTimeout the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder socketTimeout(
+                String socketTimeout) {
+            doSetProperty("socketTimeout", socketTimeout);
+            return this;
+        }
+        /**
+         * Certificate Path.
+         * 
+         * This option can also be loaded from an existing file, by prefixing
+         * with file: or classpath: followed by the location of the file.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: security
+         * 
+         * @param certificatePath the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder certificatePath(
+                String certificatePath) {
+            doSetProperty("certificatePath", certificatePath);
+            return this;
+        }
+        /**
+         * Password.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: security
+         * 
+         * @param password the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder password(String password) {
+            doSetProperty("password", password);
+            return this;
+        }
+        /**
+         * Username.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: security
+         * 
+         * @param user the value to set
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder user(String user) {
+            doSetProperty("user", user);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the Elasticsearch Low level Rest Client
+     * component.
+     */
+    public interface AdvancedElasticsearchRestClientEndpointBuilder
+            extends
+                EndpointProducerBuilder {
+        default ElasticsearchRestClientEndpointBuilder basic() {
+            return (ElasticsearchRestClientEndpointBuilder) this;
+        }
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param lazyStartProducer the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Enabling Sniffer.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: advanced
+         * 
+         * @param enableSniffer the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder enableSniffer(
+                boolean enableSniffer) {
+            doSetProperty("enableSniffer", enableSniffer);
+            return this;
+        }
+        /**
+         * Enabling Sniffer.
+         * 
+         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
+         * type.
+         * 
+         * Default: false
+         * Group: advanced
+         * 
+         * @param enableSniffer the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder enableSniffer(
+                String enableSniffer) {
+            doSetProperty("enableSniffer", enableSniffer);
+            return this;
+        }
+        /**
+         * Rest Client of type org.elasticsearch.client.RestClient. This is only
+         * for advanced usage.
+         * 
+         * The option is a:
+         * &lt;code&gt;org.elasticsearch.client.RestClient&lt;/code&gt; type.
+         * 
+         * Group: advanced
+         * 
+         * @param restClient the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder restClient(
+                org.elasticsearch.client.RestClient restClient) {
+            doSetProperty("restClient", restClient);
+            return this;
+        }
+        /**
+         * Rest Client of type org.elasticsearch.client.RestClient. This is only
+         * for advanced usage.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;org.elasticsearch.client.RestClient&lt;/code&gt; type.
+         * 
+         * Group: advanced
+         * 
+         * @param restClient the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder restClient(
+                String restClient) {
+            doSetProperty("restClient", restClient);
+            return this;
+        }
+        /**
+         * Sniffer after failure delay (in millis).
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 60000
+         * Group: advanced
+         * 
+         * @param sniffAfterFailureDelay the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder sniffAfterFailureDelay(
+                int sniffAfterFailureDelay) {
+            doSetProperty("sniffAfterFailureDelay", sniffAfterFailureDelay);
+            return this;
+        }
+        /**
+         * Sniffer after failure delay (in millis).
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 60000
+         * Group: advanced
+         * 
+         * @param sniffAfterFailureDelay the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder sniffAfterFailureDelay(
+                String sniffAfterFailureDelay) {
+            doSetProperty("sniffAfterFailureDelay", sniffAfterFailureDelay);
+            return this;
+        }
+        /**
+         * Sniffer interval (in millis).
+         * 
+         * The option is a: &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 60000
+         * Group: advanced
+         * 
+         * @param snifferInterval the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder snifferInterval(
+                int snifferInterval) {
+            doSetProperty("snifferInterval", snifferInterval);
+            return this;
+        }
+        /**
+         * Sniffer interval (in millis).
+         * 
+         * The option will be converted to a &lt;code&gt;int&lt;/code&gt; type.
+         * 
+         * Default: 60000
+         * Group: advanced
+         * 
+         * @param snifferInterval the value to set
+         * @return the dsl builder
+         */
+        default AdvancedElasticsearchRestClientEndpointBuilder snifferInterval(
+                String snifferInterval) {
+            doSetProperty("snifferInterval", snifferInterval);
+            return this;
+        }
+    }
+
+    public interface ElasticsearchRestClientBuilders {
+        /**
+         * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+         * Perform queries and other operations on Elasticsearch or OpenSearch
+         * (uses low-level client).
+         * 
+         * Category: search
+         * Since: 4.3
+         * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+         * 
+         * Syntax: <code>elasticsearch-rest-client:clusterName</code>
+         * 
+         * Path parameter: clusterName (required)
+         * Cluster Name
+         * 
+         * @param path clusterName
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder elasticsearchRestClient(
+                String path) {
+            return ElasticsearchRestClientEndpointBuilderFactory.endpointBuilder("elasticsearch-rest-client", path);
+        }
+        /**
+         * Elasticsearch Low level Rest Client (camel-elasticsearch-rest-client)
+         * Perform queries and other operations on Elasticsearch or OpenSearch
+         * (uses low-level client).
+         * 
+         * Category: search
+         * Since: 4.3
+         * Maven coordinates: org.apache.camel:camel-elasticsearch-rest-client
+         * 
+         * Syntax: <code>elasticsearch-rest-client:clusterName</code>
+         * 
+         * Path parameter: clusterName (required)
+         * Cluster Name
+         * 
+         * @param componentName to use a custom component name for the endpoint
+         * instead of the default name
+         * @param path clusterName
+         * @return the dsl builder
+         */
+        default ElasticsearchRestClientEndpointBuilder elasticsearchRestClient(
+                String componentName,
+                String path) {
+            return ElasticsearchRestClientEndpointBuilderFactory.endpointBuilder(componentName, path);
+        }
+    }
+    static ElasticsearchRestClientEndpointBuilder endpointBuilder(
+            String componentName,
+            String path) {
+        class ElasticsearchRestClientEndpointBuilderImpl extends AbstractEndpointBuilder implements ElasticsearchRestClientEndpointBuilder, AdvancedElasticsearchRestClientEndpointBuilder {
+            public ElasticsearchRestClientEndpointBuilderImpl(String path) {
+                super(componentName, path);
+            }
+        }
+        return new ElasticsearchRestClientEndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file