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 2022/03/16 20:41:20 UTC

[camel] branch main updated: CAMEL-17792: Add documentation about the message headers (A) (#7212)

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

nfilotto 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 cb9d185  CAMEL-17792: Add documentation about the message headers (A) (#7212)
cb9d185 is described below

commit cb9d18559c2a482445be47ff28d423e1ddcdb7e9
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Wed Mar 16 21:37:25 2022 +0100

    CAMEL-17792: Add documentation about the message headers (A) (#7212)
---
 .../org/apache/camel/component/ahc/ahc.json        |  13 ++
 .../camel-ahc/src/main/docs/ahc-component.adoc     |  29 +---
 .../apache/camel/component/ahc/AhcConstants.java   |  32 ++++
 .../apache/camel/component/ahc/AhcEndpoint.java    |   2 +-
 .../camel/component/ahc/DefaultAhcBinding.java     |  16 +-
 .../camel/component/ahc/helper/AhcHelper.java      |   9 +-
 .../apache/camel/component/arangodb/arangodb.json  |  10 ++
 .../src/main/docs/arangodb-component.adoc          |  26 +--
 .../component/arangodb/ArangoDbConstants.java      |  16 ++
 .../camel/component/arangodb/ArangoDbEndpoint.java |   2 +-
 .../apache/camel/component/asterisk/asterisk.json  |   6 +
 .../src/main/docs/asterisk-component.adoc          |   3 +
 .../component/asterisk/AsteriskConstants.java      |  11 ++
 .../camel/component/asterisk/AsteriskEndpoint.java |   2 +-
 .../apache/camel/component/atlasmap/atlasmap.json  |   5 +
 .../src/main/docs/atlasmap-component.adoc          |   3 +
 .../component/atlasmap/AtlasMapConstants.java      |   8 +
 .../camel/component/atlasmap/AtlasMapEndpoint.java |   2 +-
 .../org/apache/camel/component/atmos/atmos.json    |   8 +
 .../camel-atmos/src/main/docs/atmos-component.adoc |   6 +-
 .../camel/component/atmos/AtmosEndpoint.java       |   3 +-
 .../camel/component/atmos/dto/AtmosDelResult.java  |   6 +-
 .../atmos/dto/AtmosFileDownloadResult.java         |   6 +-
 .../component/atmos/dto/AtmosFileUploadResult.java |   6 +-
 .../camel/component/atmos/dto/AtmosMoveResult.java |   6 +-
 .../camel/component/atmos/util/AtmosConstants.java |  19 ++
 .../component/atmos/util/AtmosResultHeader.java    |  27 ---
 .../consumer/AtmosConsumerGetSingleTest.java       |   4 +-
 .../integration/producer/AtmosProducerDelTest.java |   4 +-
 .../producer/AtmosProducerGetFolderTest.java       |   4 +-
 .../producer/AtmosProducerGetSingleTest.java       |   4 +-
 .../producer/AtmosProducerMoveTest.java            |   4 +-
 .../AtmosProducerPutFolderWithRemotePathTest.java  |   4 +-
 .../producer/AtmosProducerPutSingleFileTest.java   |   4 +-
 ...mosProducerPutSingleFileWithRemotePathTest.java |   4 +-
 .../atmosphere/websocket/atmosphere-websocket.json |   6 +
 .../main/docs/atmosphere-websocket-component.adoc  |   3 +
 .../atmosphere/websocket/WebsocketConstants.java   |   9 +
 .../atmosphere/websocket/WebsocketEndpoint.java    |   3 +-
 .../org/apache/camel/component/atom/atom.json      |   3 +
 .../camel-atom/src/main/docs/atom-component.adoc   |  13 +-
 .../apache/camel/component/atom/AtomConstants.java |   4 +
 .../apache/camel/component/atom/AtomEndpoint.java  |   2 +-
 .../org/apache/camel/component/avro/avro.json      |   3 +
 .../src/main/docs/avro-component.adoc              |  17 +-
 .../apache/camel/component/avro/AvroConstants.java |   4 +
 .../apache/camel/component/avro/AvroEndpoint.java  |   2 +-
 .../aws/secretsmanager/aws-secrets-manager.json    |  10 ++
 .../main/docs/aws-secrets-manager-component.adoc   |   4 +
 .../secretsmanager/SecretsManagerConstants.java    |  10 ++
 .../aws/secretsmanager/SecretsManagerEndpoint.java |   3 +-
 .../camel/component/aws2/athena/aws2-athena.json   |  24 +++
 .../src/main/docs/aws2-athena-component.adoc       |  91 +---------
 .../component/aws2/athena/Athena2Constants.java    |  83 ++++++++-
 .../component/aws2/athena/Athena2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/cw/aws2-cw.json    |  10 ++
 .../src/main/docs/aws2-cw-component.adoc           |  25 +--
 .../camel/component/aws2/cw/Cw2Constants.java      |  10 ++
 .../camel/component/aws2/cw/Cw2Endpoint.java       |   2 +-
 .../apache/camel/component/aws2/ddb/aws2-ddb.json  |  34 ++++
 .../src/main/docs/aws2-ddb-component.adoc          | 192 +--------------------
 .../camel/component/aws2/ddb/Ddb2Constants.java    |  75 ++++++++
 .../camel/component/aws2/ddb/Ddb2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/ec2/aws2-ec2.json  |  17 ++
 .../src/main/docs/aws2-ec2-component.adoc          |  30 +---
 .../camel/component/aws2/ec2/AWS2EC2Constants.java |  21 +++
 .../camel/component/aws2/ec2/AWS2EC2Endpoint.java  |   3 +-
 .../apache/camel/component/aws2/ecs/aws2-ecs.json  |   5 +
 .../src/main/docs/aws2-ecs-component.adoc          |  15 +-
 .../camel/component/aws2/ecs/ECS2Constants.java    |   5 +
 .../camel/component/aws2/ecs/ECS2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/eks/aws2-eks.json  |   8 +
 .../src/main/docs/aws2-eks-component.adoc          |  21 +--
 .../camel/component/aws2/eks/EKS2Constants.java    |   9 +
 .../camel/component/aws2/eks/EKS2Endpoint.java     |   3 +-
 .../aws2/eventbridge/aws2-eventbridge.json         |   9 +
 .../src/main/docs/aws2-eventbridge-component.adoc  |   5 +-
 .../aws2/eventbridge/EventbridgeConstants.java     |   9 +
 .../aws2/eventbridge/EventbridgeEndpoint.java      |   3 +-
 .../apache/camel/component/aws2/iam/aws2-iam.json  |   8 +
 .../src/main/docs/aws2-iam-component.adoc          |  24 +--
 .../camel/component/aws2/iam/IAM2Constants.java    |   9 +
 .../camel/component/aws2/iam/IAM2Endpoint.java     |   3 +-
 .../aws2/firehose/aws2-kinesis-firehose.json       |   5 +
 .../camel/component/aws2/kinesis/aws2-kinesis.json |   7 +
 .../src/main/docs/aws2-kinesis-component.adoc      |  42 +----
 .../main/docs/aws2-kinesis-firehose-component.adoc |  16 +-
 .../aws2/firehose/KinesisFirehose2Constants.java   |   7 +
 .../aws2/firehose/KinesisFirehose2Endpoint.java    |   3 +-
 .../component/aws2/kinesis/Kinesis2Constants.java  |  11 ++
 .../component/aws2/kinesis/Kinesis2Consumer.java   |   2 +-
 .../component/aws2/kinesis/Kinesis2Endpoint.java   |   2 +-
 .../apache/camel/component/aws2/kms/aws2-kms.json  |   7 +
 .../src/main/docs/aws2-kms-component.adoc          |  17 +-
 .../camel/component/aws2/kms/KMS2Constants.java    |   7 +
 .../camel/component/aws2/kms/KMS2Endpoint.java     |   3 +-
 .../camel/component/aws2/lambda/aws2-lambda.json   |  32 ++++
 .../src/main/docs/aws2-lambda-component.adoc       |  75 +-------
 .../component/aws2/lambda/Lambda2Constants.java    |  82 ++++++++-
 .../component/aws2/lambda/Lambda2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/mq/aws2-mq.json    |  13 ++
 .../src/main/docs/aws2-mq-component.adoc           |  29 +---
 .../camel/component/aws2/mq/MQ2Constants.java      |  16 ++
 .../camel/component/aws2/mq/MQ2Endpoint.java       |   2 +-
 .../apache/camel/component/aws2/msk/aws2-msk.json  |   9 +
 .../src/main/docs/aws2-msk-component.adoc          |  23 +--
 .../camel/component/aws2/msk/MSK2Constants.java    |  10 ++
 .../camel/component/aws2/msk/MSK2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/s3/aws2-s3.json    |  27 +++
 .../src/main/docs/aws2-s3-component.adoc           | 112 +-----------
 .../camel/component/aws2/s3/AWS2S3Constants.java   |  74 ++++++++
 .../camel/component/aws2/s3/AWS2S3Consumer.java    |   2 +-
 .../camel/component/aws2/s3/AWS2S3Endpoint.java    |   3 +-
 .../apache/camel/component/aws2/ses/aws2-ses.json  |  24 ++-
 .../src/main/docs/aws2-ses-component.adoc          |  30 +---
 .../component/aws2/ses/Ses2Configuration.java      |   9 +-
 .../camel/component/aws2/ses/Ses2Constants.java    |  12 ++
 .../camel/component/aws2/ses/Ses2Endpoint.java     |   2 +-
 .../apache/camel/component/aws2/sns/aws2-sns.json  |   5 +
 .../src/main/docs/aws2-sns-component.adoc          |  21 +--
 .../camel/component/aws2/sns/Sns2Constants.java    |   7 +
 .../camel/component/aws2/sns/Sns2Endpoint.java     |   2 +-
 .../apache/camel/component/aws2/sqs/aws2-sqs.json  |  10 ++
 .../src/main/docs/aws2-sqs-component.adoc          |  31 +---
 .../camel/component/aws2/sqs/Sqs2Constants.java    |  15 ++
 .../camel/component/aws2/sqs/Sqs2Endpoint.java     |   3 +-
 .../apache/camel/component/aws2/sts/aws2-sts.json  |   6 +
 .../src/main/docs/aws2-sts-component.adoc          |   8 +-
 .../camel/component/aws2/sts/STS2Constants.java    |   6 +
 .../camel/component/aws2/sts/STS2Endpoint.java     |   3 +-
 .../component/aws2/translate/aws2-translate.json   |   6 +
 .../src/main/docs/aws2-translate-component.adoc    |  20 +--
 .../aws2/translate/Translate2Constants.java        |   6 +
 .../aws2/translate/Translate2Endpoint.java         |   2 +-
 .../component/azure/eventhubs/azure-eventhubs.json |   9 +
 .../src/main/docs/azure-eventhubs-component.adoc   |  24 +--
 .../azure/eventhubs/EventHubsConstants.java        |  29 ++++
 .../azure/eventhubs/EventHubsConsumer.java         |   2 +-
 .../azure/eventhubs/EventHubsEndpoint.java         |   3 +-
 .../azure/servicebus/azure-servicebus.json         |  27 +++
 .../src/main/docs/azure-servicebus-component.adoc  |  44 +----
 .../azure/servicebus/ServiceBusConstants.java      |  47 +++++
 .../azure/servicebus/ServiceBusEndpoint.java       |   3 +-
 .../azure/storage/blob/azure-storage-blob.json     |  64 +++++++
 .../main/docs/azure-storage-blob-component.adoc    |  82 +--------
 .../azure/storage/blob/BlobConstants.java          | 164 +++++++++++++++++-
 .../component/azure/storage/blob/BlobEndpoint.java |   3 +-
 .../storage/datalake/azure-storage-datalake.json   |  63 +++++++
 .../docs/azure-storage-datalake-component.adoc     |  80 +--------
 .../azure/storage/datalake/DataLakeConstants.java  | 124 +++++++++++++
 .../azure/storage/datalake/DataLakeEndpoint.java   |   2 +-
 .../azure/storage/queue/azure-storage-queue.json   |  18 ++
 .../main/docs/azure-storage-queue-component.adoc   |  34 +---
 .../azure/storage/queue/QueueConstants.java        |  39 +++++
 .../azure/storage/queue/QueueEndpoint.java         |   3 +-
 155 files changed, 1721 insertions(+), 1187 deletions(-)

diff --git a/components/camel-ahc/src/generated/resources/org/apache/camel/component/ahc/ahc.json b/components/camel-ahc/src/generated/resources/org/apache/camel/component/ahc/ahc.json
index f8686b0..789a166 100644
--- a/components/camel-ahc/src/generated/resources/org/apache/camel/component/ahc/ahc.json
+++ b/components/camel-ahc/src/generated/resources/org/apache/camel/component/ahc/ahc.json
@@ -32,6 +32,19 @@
     "sslContextParameters": { "kind": "property", "displayName": "Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a org.apache.camel.support.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL\/TLS configuration options provided through [...]
     "useGlobalSslContextParameters": { "kind": "property", "displayName": "Use Global Ssl Context Parameters", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable usage of global SSL context parameters." }
   },
+  "headers": {
+    "CamelHttpResponseCode": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP response code from the external server. Is 200 for OK." },
+    "CamelHttpResponseText": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Http response status text" },
+    "Content-Length": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content length of the response" },
+    "CamelHttpMethod": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http method to execute" },
+    "Content-Encoding": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as `gzip`." },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP content type. Is set on both the IN and OUT message to provide a content type, such as `text\/html`" },
+    "Location": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The redirect location" },
+    "CamelHttpUri": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "URI to call. Will override existing URI set directly on the endpoint." },
+    "CamelHttpPath": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Request URI's path, the header will be used to build the request URI with the HTTP_URI. If the path is start with \"\/\", http producer will try to find the relative path based on the Exchange.HTTP_BASE_URI header or the `exchange.getFromEndpoint().g [...]
+    "CamelHttpBaseUri": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The base of the path to append to the URI" },
+    "CamelHttpQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "*Camel 2.11 onwards:* URI parameters. Will override existing URI parameters set directly on the endpoint." }
+  },
   "properties": {
     "httpUri": { "kind": "path", "displayName": "Http Uri", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.net.URI", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The URI to use such as http:\/\/hostname:port\/path" },
     "bridgeEndpoint": { "kind": "parameter", "displayName": "Bridge Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the option is true, then the Exchange.HTTP_URI header is ignored, and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back." },
diff --git a/components/camel-ahc/src/main/docs/ahc-component.adoc b/components/camel-ahc/src/main/docs/ahc-component.adoc
index 991e266..b81be90 100644
--- a/components/camel-ahc/src/main/docs/ahc-component.adoc
+++ b/components/camel-ahc/src/main/docs/ahc-component.adoc
@@ -59,32 +59,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Message Headers
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Name |Type |Description
-|`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.
-
-|`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
-with the HTTP_URI. If the path is start with "/", http producer will try
-to find the relative path based on the Exchange.HTTP_BASE_URI header or
-the `exchange.getFromEndpoint().getEndpointUri();`
-
-|`Exchange.HTTP_QUERY` |`String` |*Camel 2.11 onwards:* URI parameters. Will override existing URI
-parameters set directly on the endpoint.
-
-|`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.
-
-|`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.
-
-|`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
-a content type, such as `text/html`.
-
-|`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
-provide a content encoding, such as `gzip`.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Message Body
 
diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcConstants.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcConstants.java
index f900a5b..8660327 100644
--- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcConstants.java
+++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcConstants.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.ahc;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 /**
  *
  */
@@ -23,6 +26,35 @@ public final class AhcConstants {
 
     public static final String CONTENT_TYPE_JAVA_SERIALIZED_OBJECT = "application/x-java-serialized-object";
     public static final String CONTENT_TYPE_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded";
+    @Metadata(description = "The HTTP response code from the external server. Is 200 for OK.",
+              javaType = "int")
+    public static final String HTTP_RESPONSE_CODE = Exchange.HTTP_RESPONSE_CODE;
+    @Metadata(description = "The Http response status text", javaType = "java.lang.String")
+    public static final String HTTP_RESPONSE_TEXT = Exchange.HTTP_RESPONSE_TEXT;
+    @Metadata(description = "The content length of the response", javaType = "int")
+    public static final String CONTENT_LENGTH = Exchange.CONTENT_LENGTH;
+    @Metadata(description = "The http method to execute", javaType = "java.lang.String")
+    public static final String HTTP_METHOD = Exchange.HTTP_METHOD;
+    @Metadata(description = "The HTTP content encoding. Is set on both the IN and OUT message to provide a content encoding, such as `gzip`.",
+              javaType = "java.lang.String")
+    public static final String CONTENT_ENCODING = Exchange.CONTENT_ENCODING;
+    @Metadata(description = "The HTTP content type. Is set on both the IN and OUT message to provide a content type, such as `text/html`",
+              javaType = "java.lang.String")
+    public static final String CONTENT_TYPE = Exchange.CONTENT_TYPE;
+    @Metadata(description = "The redirect location", javaType = "java.lang.String")
+    public static final String LOCATION = "Location";
+    @Metadata(description = "URI to call. Will override existing URI set directly on the endpoint.",
+              javaType = "java.lang.String")
+    public static final String HTTP_URI = Exchange.HTTP_URI;
+    @Metadata(description = "Request URI's path, the header will be used to build the request URI with the HTTP_URI. " +
+                            "If the path is start with \"/\", http producer will try to find the relative path based on the Exchange.HTTP_BASE_URI header or the `exchange.getFromEndpoint().getEndpointUri()`.",
+              javaType = "java.lang.String")
+    public static final String HTTP_PATH = Exchange.HTTP_PATH;
+    @Metadata(description = "The base of the path to append to the URI", javaType = "java.lang.String")
+    public static final String HTTP_BASE_URI = Exchange.HTTP_BASE_URI;
+    @Metadata(description = "*Camel 2.11 onwards:* URI parameters. Will override existing URI parameters set directly on the endpoint.",
+              javaType = "java.lang.String")
+    public static final String HTTP_QUERY = Exchange.HTTP_QUERY;
 
     private AhcConstants() {
     }
diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcEndpoint.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcEndpoint.java
index 61b70ec..bf1a4f8 100644
--- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcEndpoint.java
+++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/AhcEndpoint.java
@@ -47,7 +47,7 @@ import org.asynchttpclient.DefaultAsyncHttpClientConfig;
  * Call external HTTP services using <a href="http://github.com/sonatype/async-http-client">Async Http Client</a>.
  */
 @UriEndpoint(firstVersion = "2.8.0", scheme = "ahc", title = "Async HTTP Client (AHC)", syntax = "ahc:httpUri",
-             producerOnly = true, category = { Category.HTTP }, lenientProperties = true)
+             producerOnly = true, category = { Category.HTTP }, lenientProperties = true, headersClass = AhcConstants.class)
 public class AhcEndpoint extends DefaultEndpoint implements AsyncEndpoint, HeaderFilterStrategyAware {
 
     private AsyncHttpClient client;
diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java
index 3c9f906..0af6c5c 100644
--- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java
+++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/DefaultAhcBinding.java
@@ -92,7 +92,7 @@ public class DefaultAhcBinding implements AhcBinding {
 
     protected String extractMethod(Exchange exchange) {
         // prefer method from header
-        String method = exchange.getIn().getHeader(Exchange.HTTP_METHOD, String.class);
+        String method = exchange.getIn().getHeader(AhcConstants.HTTP_METHOD, String.class);
         if (method != null) {
             return method;
         }
@@ -254,8 +254,8 @@ public class DefaultAhcBinding implements AhcBinding {
         // to avoid overriding existing headers with old values
         // Just filter the http protocol headers 
         MessageHelper.copyHeaders(exchange.getIn(), exchange.getMessage(), httpProtocolHeaderFilterStrategy, false);
-        exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, responseStatus.getStatusCode());
-        exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_TEXT, responseStatus.getStatusText());
+        exchange.getMessage().setHeader(AhcConstants.HTTP_RESPONSE_CODE, responseStatus.getStatusCode());
+        exchange.getMessage().setHeader(AhcConstants.HTTP_RESPONSE_TEXT, responseStatus.getStatusText());
     }
 
     @Override
@@ -293,13 +293,13 @@ public class DefaultAhcBinding implements AhcBinding {
         os.close();
         InputStream is = new ByteArrayInputStream(os.toByteArray());
 
-        String contentEncoding = exchange.getMessage().getHeader(Exchange.CONTENT_ENCODING, String.class);
+        String contentEncoding = exchange.getMessage().getHeader(AhcConstants.CONTENT_ENCODING, String.class);
         if (!exchange.getProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.FALSE, Boolean.class)) {
             is = GZIPHelper.uncompressGzip(contentEncoding, is);
         }
 
         // Honor the character encoding
-        String contentType = exchange.getMessage().getHeader(Exchange.CONTENT_TYPE, String.class);
+        String contentType = exchange.getMessage().getHeader(AhcConstants.CONTENT_TYPE, String.class);
         if (contentType != null) {
             // find the charset and set it to the Exchange
             AhcHelper.setCharsetFromContentType(contentType, exchange);
@@ -340,7 +340,7 @@ public class DefaultAhcBinding implements AhcBinding {
             Object body, int statusCode, String statusText) {
         Exception answer;
 
-        if (endpoint.isTransferException() && body != null && body instanceof Exception) {
+        if (endpoint.isTransferException() && body instanceof Exception) {
             // if the response was a serialized exception then use that
             return (Exception) body;
         }
@@ -354,7 +354,7 @@ public class DefaultAhcBinding implements AhcBinding {
         Map<String, String> headers = extractResponseHeaders(exchange);
 
         if (statusCode >= 300 && statusCode < 400) {
-            String redirectLocation = exchange.getMessage().getHeader("Location", String.class);
+            String redirectLocation = exchange.getMessage().getHeader(AhcConstants.LOCATION, String.class);
             if (redirectLocation != null) {
                 answer = new AhcOperationFailedException(url, statusCode, statusText, redirectLocation, headers, copy);
             } else {
@@ -383,6 +383,6 @@ public class DefaultAhcBinding implements AhcBinding {
 
     private void populateResponse(Exchange exchange, Object body, int contentLength) {
         exchange.getMessage().setBody(body);
-        exchange.getMessage().setHeader(Exchange.CONTENT_LENGTH, contentLength);
+        exchange.getMessage().setHeader(AhcConstants.CONTENT_LENGTH, contentLength);
     }
 }
diff --git a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java
index 30a3eb9..d1d4e40 100644
--- a/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java
+++ b/components/camel-ahc/src/main/java/org/apache/camel/component/ahc/helper/AhcHelper.java
@@ -28,6 +28,7 @@ import java.net.URISyntaxException;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.RuntimeExchangeException;
+import org.apache.camel.component.ahc.AhcConstants;
 import org.apache.camel.component.ahc.AhcEndpoint;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.URISupport;
@@ -104,7 +105,7 @@ public final class AhcHelper {
     private static String doCreateURL(Exchange exchange, AhcEndpoint endpoint) {
         String uri = null;
         if (!(endpoint.isBridgeEndpoint())) {
-            uri = exchange.getIn().getHeader(Exchange.HTTP_URI, String.class);
+            uri = exchange.getIn().getHeader(AhcConstants.HTTP_URI, String.class);
         }
         if (uri == null) {
             uri = endpoint.getHttpUri().toASCIIString();
@@ -114,7 +115,7 @@ public final class AhcHelper {
         uri = resolvePlaceholdersInURI(exchange, uri);
 
         // append HTTP_PATH to HTTP_URI if it is provided in the header
-        String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class);
+        String path = exchange.getIn().getHeader(AhcConstants.HTTP_PATH, String.class);
         if (path != null) {
             if (path.startsWith("/")) {
                 URI baseURI;
@@ -156,7 +157,7 @@ public final class AhcHelper {
 
     private static URI getBaseURI(Exchange exchange) throws URISyntaxException {
         URI baseURI;
-        String baseURIString = exchange.getIn().getHeader(Exchange.HTTP_BASE_URI, String.class);
+        String baseURIString = exchange.getIn().getHeader(AhcConstants.HTTP_BASE_URI, String.class);
         if (baseURIString == null) {
             if (exchange.getFromEndpoint() != null) {
                 baseURIString = exchange.getFromEndpoint().getEndpointUri();
@@ -189,7 +190,7 @@ public final class AhcHelper {
     public static URI createURI(Exchange exchange, String url, AhcEndpoint endpoint) throws URISyntaxException {
         URI uri = new URI(url);
         // is a query string provided in the endpoint URI or in a header (header overrules endpoint)
-        String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);
+        String queryString = exchange.getIn().getHeader(AhcConstants.HTTP_QUERY, String.class);
         if (queryString == null) {
             queryString = endpoint.getHttpUri().getRawQuery();
         }
diff --git a/components/camel-arangodb/src/generated/resources/org/apache/camel/component/arangodb/arangodb.json b/components/camel-arangodb/src/generated/resources/org/apache/camel/component/arangodb/arangodb.json
index 83ac4e2..2c26b51 100644
--- a/components/camel-arangodb/src/generated/resources/org/apache/camel/component/arangodb/arangodb.json
+++ b/components/camel-arangodb/src/generated/resources/org/apache/camel/component/arangodb/arangodb.json
@@ -35,6 +35,16 @@
     "password": { "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.arangodb.ArangoDbConfiguration", "configurationField": "configuration", "description": "ArangoDB password. If user and password are default, this field is Optional." },
     "user": { "kind": "property", "displayName": "User", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.arangodb.ArangoDbConfiguration", "configurationField": "configuration", "description": "ArangoDB user. If user and password are default, this field is Optional." }
   },
+  "headers": {
+    "CamelArangoDbMultiUpdate": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "Indicates if there are multiple documents to update. If set to `true`, the body of the message must be a `Collection` of documents to update." },
+    "CamelArangoDbMultiInsert": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "Indicates if there are multiple documents to insert. If set to `true`, the body of the message must be a `Collection` of documents to insert." },
+    "CamelArangoDbMultiDelete": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "Indicates if there are multiple documents to delete. If set to `true`, the body of the message must be a `Collection` of key of documents to delete." },
+    "key": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Arango key to use for the operation." },
+    "ResultClassType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.Class", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "BaseDocument.class or BaseEdgeDocument.class", "description": "The type of the result of the operation." },
+    "CamelArangoDbAqlQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The AQL query to execute." },
+    "CamelArangoDbAqlParameters": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key\/value pairs defining the variables to bind the query to." },
+    "CamelArangoDbAqlOptions": { "kind": "header", "displayName": "", "group": "advanced", "label": "advanced", "required": false, "javaType": "com.arangodb.model.AqlQueryOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The additional options that will be passed to the query API." }
+  },
   "properties": {
     "database": { "kind": "path", "displayName": "Database", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "database name" },
     "documentCollection": { "kind": "parameter", "displayName": "Document Collection", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.arangodb.ArangoDbConfiguration", "configurationField": "configuration", "description": "Collection name, when using ArangoDb as a Document Database. Set the documentCollection name when  [...]
diff --git a/components/camel-arangodb/src/main/docs/arangodb-component.adoc b/components/camel-arangodb/src/main/docs/arangodb-component.adoc
index 61835c8..e58cdd4 100644
--- a/components/camel-arangodb/src/main/docs/arangodb-component.adoc
+++ b/components/camel-arangodb/src/main/docs/arangodb-component.adoc
@@ -49,6 +49,10 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 == Examples
 
 === Producer Examples
@@ -64,9 +68,9 @@ from("direct:insert")
 And you can set as body a BaseDocument class 
 
 --------------------------------------------------------------------------------
-        BaseDocument myObject = new BaseDocument();
-        myObject.addAttribute("a", "Foo");
-        myObject.addAttribute("b", 42);
+BaseDocument myObject = new BaseDocument();
+myObject.addAttribute("a", "Foo");
+myObject.addAttribute("b", 42);
 --------------------------------------------------------------------------------
 
 ==== Query a collection
@@ -80,14 +84,14 @@ from("direct:query")
 And you can invoke an AQL Query in this way
 
 --------------------------------------------------------------------------------
-        String query = "FOR t IN " + COLLECTION_NAME + " FILTER t.value == @value";
-        Map<String, Object> bindVars = new MapBuilder().put("value", "hello")
-                .get();
-
-        Exchange result = template.request("direct:query", exchange -> {
-            exchange.getMessage().setHeader(AQL_QUERY, query);
-            exchange.getMessage().setHeader(AQL_QUERY_BIND_PARAMETERS, bindVars);
-        });
+String query = "FOR t IN " + COLLECTION_NAME + " FILTER t.value == @value";
+Map<String, Object> bindVars = new MapBuilder().put("value", "hello")
+        .get();
+
+Exchange result = template.request("direct:query", exchange -> {
+    exchange.getMessage().setHeader(AQL_QUERY, query);
+    exchange.getMessage().setHeader(AQL_QUERY_BIND_PARAMETERS, bindVars);
+});
 --------------------------------------------------------------------------------
 
 
diff --git a/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbConstants.java b/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbConstants.java
index 9630fd2..47758a9 100644
--- a/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbConstants.java
+++ b/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbConstants.java
@@ -16,14 +16,30 @@
  */
 package org.apache.camel.component.arangodb;
 
+import org.apache.camel.spi.Metadata;
+
 public final class ArangoDbConstants {
+    @Metadata(description = "Indicates if there are multiple documents to update. If set to `true`, the body of the message must be a `Collection` of documents to update.",
+              javaType = "java.lang.Boolean", defaultValue = "false")
     public static final String MULTI_UPDATE = "CamelArangoDbMultiUpdate";
+    @Metadata(description = "Indicates if there are multiple documents to insert. If set to `true`, the body of the message must be a `Collection` of documents to insert.",
+              javaType = "java.lang.Boolean", defaultValue = "false")
     public static final String MULTI_INSERT = "CamelArangoDbMultiInsert";
+    @Metadata(description = "Indicates if there are multiple documents to delete. If set to `true`, the body of the message must be a `Collection` of key of documents to delete.",
+              javaType = "java.lang.Boolean", defaultValue = "false")
     public static final String MULTI_DELETE = "CamelArangoDbMultiDelete";
+    @Metadata(description = "The Arango key to use for the operation.", javaType = "java.lang.String")
     public static final String ARANGO_KEY = "key";
+    @Metadata(description = "The type of the result of the operation.", javaType = "java.lang.Class",
+              defaultValue = "BaseDocument.class or BaseEdgeDocument.class")
     public static final String RESULT_CLASS_TYPE = "ResultClassType";
+    @Metadata(description = "The AQL query to execute.", javaType = "java.lang.String")
     public static final String AQL_QUERY = "CamelArangoDbAqlQuery";
+    @Metadata(description = "The key/value pairs defining the variables to bind the query to.",
+              javaType = "java.util.Map")
     public static final String AQL_QUERY_BIND_PARAMETERS = "CamelArangoDbAqlParameters";
+    @Metadata(label = "advanced", description = "The additional options that will be passed to the query API.",
+              javaType = "com.arangodb.model.AqlQueryOptions")
     public static final String AQL_QUERY_OPTIONS = "CamelArangoDbAqlOptions";
 
     private ArangoDbConstants() {
diff --git a/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbEndpoint.java b/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbEndpoint.java
index c0b48c8..65c6fbc 100644
--- a/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbEndpoint.java
+++ b/components/camel-arangodb/src/main/java/org/apache/camel/component/arangodb/ArangoDbEndpoint.java
@@ -32,7 +32,7 @@ import org.apache.camel.util.ObjectHelper;
  * Perform operations on ArangoDb when used as a Document Database, or as a Graph Database
  */
 @UriEndpoint(firstVersion = "3.5.0", scheme = "arangodb", title = "ArangoDb", syntax = "arangodb:database",
-             category = { Category.DATABASE, Category.NOSQL }, producerOnly = true)
+             category = { Category.DATABASE, Category.NOSQL }, producerOnly = true, headersClass = ArangoDbConstants.class)
 public class ArangoDbEndpoint extends DefaultEndpoint {
     private ArangoDB arango;
 
diff --git a/components/camel-asterisk/src/generated/resources/org/apache/camel/component/asterisk/asterisk.json b/components/camel-asterisk/src/generated/resources/org/apache/camel/component/asterisk/asterisk.json
index 7bdc2ca..cc83ace 100644
--- a/components/camel-asterisk/src/generated/resources/org/apache/camel/component/asterisk/asterisk.json
+++ b/components/camel-asterisk/src/generated/resources/org/apache/camel/component/asterisk/asterisk.json
@@ -26,6 +26,12 @@
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
   },
+  "headers": {
+    "CamelAsteriskEventName": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "Simple name of the event", "description": "The name of the Asterisk event." },
+    "CamelAsteriskExtension": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The extension to query in case of an `ExtensionStateAction`." },
+    "CamelAsteriskContext": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the context that contains the extension to query in case of an `ExtensionStateAction`." },
+    "CamelAsteriskAction": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.asterisk.AsteriskAction", "enum": [ "QUEUE_STATUS", "SIP_PEERS", "EXTENSION_STATE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Asterisk action to do." }
+  },
   "properties": {
     "name": { "kind": "path", "displayName": "Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of component" },
     "hostname": { "kind": "parameter", "displayName": "Hostname", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The hostname of the asterisk server" },
diff --git a/components/camel-asterisk/src/main/docs/asterisk-component.adoc b/components/camel-asterisk/src/main/docs/asterisk-component.adoc
index 88c10c3..94a74e6 100644
--- a/components/camel-asterisk/src/main/docs/asterisk-component.adoc
+++ b/components/camel-asterisk/src/main/docs/asterisk-component.adoc
@@ -49,6 +49,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Action
 
diff --git a/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskConstants.java b/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskConstants.java
index b93d85c..6dd62d7 100644
--- a/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskConstants.java
+++ b/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskConstants.java
@@ -16,10 +16,21 @@
  */
 package org.apache.camel.component.asterisk;
 
+import org.apache.camel.spi.Metadata;
+
 public final class AsteriskConstants {
+    @Metadata(label = "consumer", description = "The name of the Asterisk event.", javaType = "java.lang.String",
+              defaultValue = "Simple name of the event")
     public static final String EVENT_NAME = "CamelAsteriskEventName";
+    @Metadata(label = "producer", description = "The extension to query in case of an `ExtensionStateAction`.",
+              javaType = "java.lang.String")
     public static final String EXTENSION = "CamelAsteriskExtension";
+    @Metadata(label = "producer",
+              description = "The name of the context that contains the extension to query in case of an `ExtensionStateAction`.",
+              javaType = "java.lang.String")
     public static final String CONTEXT = "CamelAsteriskContext";
+    @Metadata(label = "producer", description = "The Asterisk action to do.",
+              javaType = "org.apache.camel.component.asterisk.AsteriskAction")
     public static final String ACTION = "CamelAsteriskAction";
 
     private AsteriskConstants() {
diff --git a/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskEndpoint.java b/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskEndpoint.java
index 4f192b8..f8f689d 100644
--- a/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskEndpoint.java
+++ b/components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskEndpoint.java
@@ -31,7 +31,7 @@ import org.apache.camel.util.ObjectHelper;
  * Interact with Asterisk PBX Server.
  */
 @UriEndpoint(firstVersion = "2.18.0", scheme = "asterisk", title = "Asterisk", syntax = "asterisk:name",
-             category = { Category.VOIP })
+             category = { Category.VOIP }, headersClass = AsteriskConstants.class)
 public class AsteriskEndpoint extends DefaultEndpoint {
     @UriPath(description = "Name of component")
     @Metadata(required = true)
diff --git a/components/camel-atlasmap/src/generated/resources/org/apache/camel/component/atlasmap/atlasmap.json b/components/camel-atlasmap/src/generated/resources/org/apache/camel/component/atlasmap/atlasmap.json
index bc0e07a..6ffd2614 100644
--- a/components/camel-atlasmap/src/generated/resources/org/apache/camel/component/atlasmap/atlasmap.json
+++ b/components/camel-atlasmap/src/generated/resources/org/apache/camel/component/atlasmap/atlasmap.json
@@ -27,6 +27,11 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
     "propertiesFile": { "kind": "property", "displayName": "Properties File", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The URI of the properties file which is used for AtlasContextFactory initialization." }
   },
+  "headers": {
+    "CamelAtlasResourceUri": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The new resource URI to use." },
+    "CamelAtlasMapping": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Atlas mapping to use." },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type that is set according to the datasource (json or xml)." }
+  },
   "properties": {
     "resourceUri": { "kind": "path", "displayName": "Resource Uri", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will [...]
     "allowContextMapAll": { "kind": "parameter", "displayName": "Allow Context Map All", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. [...]
diff --git a/components/camel-atlasmap/src/main/docs/atlasmap-component.adoc b/components/camel-atlasmap/src/main/docs/atlasmap-component.adoc
index f44ce2b..29ddf9b 100644
--- a/components/camel-atlasmap/src/main/docs/atlasmap-component.adoc
+++ b/components/camel-atlasmap/src/main/docs/atlasmap-component.adoc
@@ -66,6 +66,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Examples
 
diff --git a/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapConstants.java b/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapConstants.java
index c948fb6..5537cdb 100644
--- a/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapConstants.java
+++ b/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapConstants.java
@@ -16,15 +16,23 @@
  */
 package org.apache.camel.component.atlasmap;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 /**
  * AtlasMap Constants.
  */
 public final class AtlasMapConstants {
 
+    @Metadata(description = "The new resource URI to use.", javaType = "java.lang.String")
     public static final String ATLAS_RESOURCE_URI = "CamelAtlasResourceUri";
+    @Metadata(description = "The Atlas mapping to use.", javaType = "java.lang.String")
     public static final String ATLAS_MAPPING = "CamelAtlasMapping";
     public static final String ATLAS_SOURCE_MAP = "CamelAtlasSourceMap";
     public static final String ATLAS_TARGET_MAP = "CamelAtlasTargetMap";
+    @Metadata(description = "The content type that is set according to the datasource (json or xml).",
+              javaType = "java.lang.String")
+    public static final String CONTENT_TYPE = Exchange.CONTENT_TYPE;
 
     private AtlasMapConstants() {
     }
diff --git a/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapEndpoint.java b/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapEndpoint.java
index 92be69d..bbc84a9 100644
--- a/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapEndpoint.java
+++ b/components/camel-atlasmap/src/main/java/org/apache/camel/component/atlasmap/AtlasMapEndpoint.java
@@ -49,7 +49,7 @@ import static io.atlasmap.api.AtlasContextFactory.Format.JSON;
  * Transforms the message using an AtlasMap transformation.
  */
 @UriEndpoint(firstVersion = "3.7.0", scheme = "atlasmap", title = "AtlasMap", syntax = "atlasmap:resourceUri",
-             producerOnly = true, category = { Category.TRANSFORMATION })
+             producerOnly = true, category = { Category.TRANSFORMATION }, headersClass = AtlasMapConstants.class)
 public class AtlasMapEndpoint extends ResourceEndpoint {
 
     public static final String CONTENT_TYPE_JSON = "application/json";
diff --git a/components/camel-atmos/src/generated/resources/org/apache/camel/component/atmos/atmos.json b/components/camel-atmos/src/generated/resources/org/apache/camel/component/atmos/atmos.json
index bef0175..1a3f9de 100644
--- a/components/camel-atmos/src/generated/resources/org/apache/camel/component/atmos/atmos.json
+++ b/components/camel-atmos/src/generated/resources/org/apache/camel/component/atmos/atmos.json
@@ -30,6 +30,14 @@
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "The secret key to pass to the Atmos client (should be base64 encoded)" },
     "sslValidation": { "kind": "property", "displayName": "Ssl Validation", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the Atmos client should perform SSL validation" }
   },
+  "headers": {
+    "DOWNLOADED_FILE": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the remote path downloaded in case of a single file." },
+    "DOWNLOADED_FILES": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the remote paths downloaded in case of multiple files (one per line)." },
+    "UPLOADED_FILE": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the remote path uploaded in case of a single file." },
+    "UPLOADED_FILES": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the remote paths uploaded in case of multiple files (one per line)." },
+    "DELETED_PATH": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The remote path deleted on Atmos." },
+    "MOVED_PATH": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The moved path." }
+  },
   "properties": {
     "name": { "kind": "path", "displayName": "Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.atmos.AtmosConfiguration", "configurationField": "configuration", "description": "Atmos name" },
     "operation": { "kind": "path", "displayName": "Operation", "group": "common", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.atmos.util.AtmosOperation", "enum": [ "put", "del", "search", "get", "move" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.atmos.AtmosConfiguration", "configurationField": "configuration", "description": "Operation to perform" },
diff --git a/components/camel-atmos/src/main/docs/atmos-component.adoc b/components/camel-atmos/src/main/docs/atmos-component.adoc
index ec613d3..324ef8f 100644
--- a/components/camel-atmos/src/main/docs/atmos-component.adoc
+++ b/components/camel-atmos/src/main/docs/atmos-component.adoc
@@ -31,7 +31,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Dependencies
 
@@ -73,7 +75,7 @@ exchange
 
 [source,text]
 -------------------------------
-DOWNLOADED_FILE, DOWNLOADED_FILES, UPLOADED_FILE, UPLOADED_FILES, FOUND_FILES, DELETED_PATH, MOVED_PATH
+DOWNLOADED_FILE, DOWNLOADED_FILES, UPLOADED_FILE, UPLOADED_FILES, DELETED_PATH, MOVED_PATH
 -------------------------------
 
 == Examples
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/AtmosEndpoint.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/AtmosEndpoint.java
index 3318f6d..b125161 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/AtmosEndpoint.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/AtmosEndpoint.java
@@ -26,6 +26,7 @@ import org.apache.camel.component.atmos.integration.producer.AtmosDelProducer;
 import org.apache.camel.component.atmos.integration.producer.AtmosGetProducer;
 import org.apache.camel.component.atmos.integration.producer.AtmosMoveProducer;
 import org.apache.camel.component.atmos.integration.producer.AtmosPutProducer;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.atmos.util.AtmosException;
 import org.apache.camel.component.atmos.util.AtmosOperation;
 import org.apache.camel.spi.UriEndpoint;
@@ -38,7 +39,7 @@ import static org.apache.camel.component.atmos.util.AtmosConstants.POLL_CONSUMER
  * Integrate with EMC's ViPR object data services using the Atmos Client.
  */
 @UriEndpoint(firstVersion = "2.15.0", scheme = "atmos", title = "Atmos", syntax = "atmos:name/operation",
-             category = { Category.CLOUD, Category.FILE })
+             category = { Category.CLOUD, Category.FILE }, headersClass = AtmosConstants.class)
 public class AtmosEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosDelResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosDelResult.java
index c959dac..0058321 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosDelResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosDelResult.java
@@ -17,19 +17,19 @@
 package org.apache.camel.component.atmos.dto;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 
 public class AtmosDelResult extends AtmosResult {
 
     /**
-     * Object payload contained in Exchange Exchange Body is populated with the remote path deleted on atmos.
+     * Object payload contained in Exchange Body is populated with the remote path deleted on atmos.
      * 
      * @param exchange
      */
     @Override
     public void populateExchange(Exchange exchange) {
         String remotePath = (String) resultEntries;
-        exchange.getIn().setHeader(AtmosResultHeader.DELETED_PATH.name(), remotePath);
+        exchange.getIn().setHeader(AtmosConstants.DELETED_PATH, remotePath);
         exchange.getIn().setBody(remotePath);
     }
 }
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileDownloadResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileDownloadResult.java
index 5e726e7..b6d494f 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileDownloadResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileDownloadResult.java
@@ -20,7 +20,7 @@ import java.io.ByteArrayOutputStream;
 import java.util.Map;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 
 public class AtmosFileDownloadResult extends AtmosResult {
 
@@ -45,14 +45,14 @@ public class AtmosFileDownloadResult extends AtmosResult {
                 pathExtracted = entry.getKey();
                 baosExtracted = entry.getValue();
             }
-            exchange.getIn().setHeader(AtmosResultHeader.DOWNLOADED_FILE.name(), pathExtracted);
+            exchange.getIn().setHeader(AtmosConstants.DOWNLOADED_FILE, pathExtracted);
             exchange.getIn().setBody(baosExtracted);
         } else {
             StringBuffer pathsExtracted = new StringBuffer();
             for (Map.Entry<String, ByteArrayOutputStream> entry : map.entrySet()) {
                 pathsExtracted.append(entry.getKey() + "\n");
             }
-            exchange.getIn().setHeader(AtmosResultHeader.DOWNLOADED_FILES.name(), pathsExtracted.toString());
+            exchange.getIn().setHeader(AtmosConstants.DOWNLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
         }
     }
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
index 65506f5..9b29212 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosFileUploadResult.java
@@ -19,8 +19,8 @@ package org.apache.camel.component.atmos.dto;
 import java.util.Map;
 
 import org.apache.camel.Exchange;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.atmos.util.AtmosResultCode;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
 
 public class AtmosFileUploadResult extends AtmosResult {
 
@@ -44,14 +44,14 @@ public class AtmosFileUploadResult extends AtmosResult {
                 pathExtracted = entry.getKey();
                 codeExtracted = entry.getValue();
             }
-            exchange.getIn().setHeader(AtmosResultHeader.UPLOADED_FILE.name(), pathExtracted);
+            exchange.getIn().setHeader(AtmosConstants.UPLOADED_FILE, pathExtracted);
             exchange.getIn().setBody(codeExtracted.name());
         } else {
             StringBuffer pathsExtracted = new StringBuffer();
             for (Map.Entry<String, AtmosResultCode> entry : map.entrySet()) {
                 pathsExtracted.append(entry.getKey() + "\n");
             }
-            exchange.getIn().setHeader(AtmosResultHeader.UPLOADED_FILES.name(), pathsExtracted.toString());
+            exchange.getIn().setHeader(AtmosConstants.UPLOADED_FILES, pathsExtracted.toString());
             exchange.getIn().setBody(map);
         }
     }
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
index 6a7d9b2..f162e4f 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/dto/AtmosMoveResult.java
@@ -17,19 +17,19 @@
 package org.apache.camel.component.atmos.dto;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 
 public class AtmosMoveResult extends AtmosResult {
 
     /**
-     * Object payload contained in Exchange Exchange Header and Body contains the moved path
+     * Object payload contained in Exchange Header and Body contains the moved path
      * 
      * @param exchange
      */
     @Override
     public void populateExchange(Exchange exchange) {
         String movedPath = (String) resultEntries;
-        exchange.getIn().setHeader(AtmosResultHeader.MOVED_PATH.name(), movedPath);
+        exchange.getIn().setHeader(AtmosConstants.MOVED_PATH, movedPath);
         exchange.getIn().setBody(movedPath);
     }
 }
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosConstants.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosConstants.java
index 64b0b67..c1f6df5 100644
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosConstants.java
+++ b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosConstants.java
@@ -16,11 +16,30 @@
  */
 package org.apache.camel.component.atmos.util;
 
+import org.apache.camel.spi.Metadata;
+
 public final class AtmosConstants {
 
     public static final String ATMOS_FILE_SEPARATOR = "/";
     public static final long POLL_CONSUMER_DELAY = 60 * 60 * 1000L;
 
+    @Metadata(description = "The name of the remote path downloaded in case of a single file.", javaType = "java.lang.String")
+    public static final String DOWNLOADED_FILE = "DOWNLOADED_FILE";
+    @Metadata(description = "The name of the remote paths downloaded in case of multiple files (one per line).",
+              javaType = "java.lang.String")
+    public static final String DOWNLOADED_FILES = "DOWNLOADED_FILES";
+    @Metadata(label = "producer", description = "The name of the remote path uploaded in case of a single file.",
+              javaType = "java.lang.String")
+    public static final String UPLOADED_FILE = "UPLOADED_FILE";
+    @Metadata(label = "producer",
+              description = "The name of the remote paths uploaded in case of multiple files (one per line).",
+              javaType = "java.lang.String")
+    public static final String UPLOADED_FILES = "UPLOADED_FILES";
+    @Metadata(label = "producer", description = "The remote path deleted on Atmos.", javaType = "java.lang.String")
+    public static final String DELETED_PATH = "DELETED_PATH";
+    @Metadata(label = "producer", description = "The moved path.", javaType = "java.lang.String")
+    public static final String MOVED_PATH = "MOVED_PATH";
+
     private AtmosConstants() {
     }
 
diff --git a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosResultHeader.java b/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosResultHeader.java
deleted file mode 100644
index da6a362..0000000
--- a/components/camel-atmos/src/main/java/org/apache/camel/component/atmos/util/AtmosResultHeader.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.component.atmos.util;
-
-public enum AtmosResultHeader {
-    DOWNLOADED_FILE,
-    DOWNLOADED_FILES,
-    UPLOADED_FILE,
-    UPLOADED_FILES,
-    FOUND_FILES,
-    DELETED_PATH,
-    MOVED_PATH;
-}
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
index 5ad2c1c..cb2b8ac 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/consumer/AtmosConsumerGetSingleTest.java
@@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -42,7 +42,7 @@ public class AtmosConsumerGetSingleTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.DOWNLOADED_FILE.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.DOWNLOADED_FILE);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
index a026e51..a113110 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerDelTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -48,7 +48,7 @@ public class AtmosProducerDelTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.DELETED_PATH.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.DELETED_PATH);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
index 598e85b..c6371ca 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetFolderTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
@@ -52,7 +52,7 @@ public class AtmosProducerGetFolderTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.DOWNLOADED_FILES.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.DOWNLOADED_FILES);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
index c1196de..ea1dbb7 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerGetSingleTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -49,7 +49,7 @@ public class AtmosProducerGetSingleTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.DOWNLOADED_FILE.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.DOWNLOADED_FILE);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
index 34e546c..e33aa30 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerMoveTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -49,7 +49,7 @@ public class AtmosProducerMoveTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.MOVED_PATH.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.MOVED_PATH);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
index 5a996de..02ac594 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutFolderWithRemotePathTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -48,7 +48,7 @@ public class AtmosProducerPutFolderWithRemotePathTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.UPLOADED_FILES.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.UPLOADED_FILES);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
index f367c1c..9f0a612 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -49,7 +49,7 @@ public class AtmosProducerPutSingleFileTest extends AtmosTestSupport {
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.UPLOADED_FILE.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.UPLOADED_FILE);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
index 074d6da..98df0b3 100644
--- a/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
+++ b/components/camel-atmos/src/test/java/org/apache/camel/component/atmos/integration/producer/AtmosProducerPutSingleFileWithRemotePathTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.atmos.integration.AtmosTestSupport;
-import org.apache.camel.component.atmos.util.AtmosResultHeader;
+import org.apache.camel.component.atmos.util.AtmosConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
@@ -49,7 +49,7 @@ public class AtmosProducerPutSingleFileWithRemotePathTest extends AtmosTestSuppo
 
         List<Exchange> exchanges = mock.getReceivedExchanges();
         Exchange exchange = exchanges.get(0);
-        Object header = exchange.getIn().getHeader(AtmosResultHeader.UPLOADED_FILE.name());
+        Object header = exchange.getIn().getHeader(AtmosConstants.UPLOADED_FILE);
         Object body = exchange.getIn().getBody();
         assertNotNull(header);
         assertNotNull(body);
diff --git a/components/camel-atmosphere-websocket/src/generated/resources/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json b/components/camel-atmosphere-websocket/src/generated/resources/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json
index 2e3e8bf..b56b410 100644
--- a/components/camel-atmosphere-websocket/src/generated/resources/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json
+++ b/components/camel-atmosphere-websocket/src/generated/resources/org/apache/camel/component/atmosphere/websocket/atmosphere-websocket.json
@@ -36,6 +36,12 @@
     "httpConfiguration": { "kind": "property", "displayName": "Http Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.http.common.HttpConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use the shared HttpConfiguration as base configuration." },
     "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }
   },
+  "headers": {
+    "websocket.connectionKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The connection key." },
+    "websocket.connectionKey.list": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.util.List", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of connection keys." },
+    "websocket.eventType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of event received. It can be `ONOPEN_EVENT_TYPE`, `ONERROR_EVENT_TYPE` or `ONCLOSE_EVENT_TYPE`." },
+    "websocket.errorType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of error that occurred. It can be `MESSAGE_NOT_SENT_ERROR_TYPE`." }
+  },
   "properties": {
     "servicePath": { "kind": "path", "displayName": "Service Path", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of websocket endpoint" },
     "chunked": { "kind": "parameter", "displayName": "Chunked", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response" },
diff --git a/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc b/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
index 2265aab..1f0e94d 100644
--- a/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
+++ b/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
@@ -54,6 +54,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Reading and Writing Data over Websocket
 
diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConstants.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConstants.java
index c36cbc0..dadeb52 100644
--- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConstants.java
+++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketConstants.java
@@ -16,15 +16,24 @@
  */
 package org.apache.camel.component.atmosphere.websocket;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  *
  */
 public final class WebsocketConstants {
 
+    @Metadata(description = "The connection key.", javaType = "java.lang.String")
     public static final String CONNECTION_KEY = "websocket.connectionKey";
+    @Metadata(description = "The list of connection keys.", javaType = "java.util.List")
     public static final String CONNECTION_KEY_LIST = "websocket.connectionKey.list";
     public static final String SEND_TO_ALL = "websocket.sendToAll";
+    @Metadata(label = "consumer",
+              description = "The type of event received. It can be `ONOPEN_EVENT_TYPE`, `ONERROR_EVENT_TYPE` or `ONCLOSE_EVENT_TYPE`.",
+              javaType = "int")
     public static final String EVENT_TYPE = "websocket.eventType";
+    @Metadata(label = "consumer", description = "The type of error that occurred. It can be `MESSAGE_NOT_SENT_ERROR_TYPE`.",
+              javaType = "int")
     public static final String ERROR_TYPE = "websocket.errorType";
 
     public static final int ONOPEN_EVENT_TYPE = 1;
diff --git a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
index bb7232c..2ec6316 100644
--- a/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
+++ b/components/camel-atmosphere-websocket/src/main/java/org/apache/camel/component/atmosphere/websocket/WebsocketEndpoint.java
@@ -34,7 +34,8 @@ import org.apache.camel.spi.UriPath;
  */
 @UriEndpoint(firstVersion = "2.14.0", scheme = "atmosphere-websocket", extendsScheme = "servlet",
              title = "Atmosphere Websocket",
-             syntax = "atmosphere-websocket:servicePath", category = { Category.WEBSOCKET })
+             syntax = "atmosphere-websocket:servicePath", category = { Category.WEBSOCKET },
+             headersClass = WebsocketConstants.class)
 @Metadata(excludeProperties = "httpUri,contextPath,cookieHandler,connectionClose,authMethod,authMethodPriority,authUsername,authPassword,authDomain,authHost,"
                               + "copyHeaders,httpMethod,ignoreResponseBody,preserveHostHeader,throwExceptionOnFailure,okStatusCodeRange,"
                               + "proxyAuthScheme,proxyAuthMethod,proxyAuthUsername,proxyAuthPassword,proxyAuthHost,proxyAuthPort,proxyAuthDomain,"
diff --git a/components/camel-atom/src/generated/resources/org/apache/camel/component/atom/atom.json b/components/camel-atom/src/generated/resources/org/apache/camel/component/atom/atom.json
index d3dc064..180a953 100644
--- a/components/camel-atom/src/generated/resources/org/apache/camel/component/atom/atom.json
+++ b/components/camel-atom/src/generated/resources/org/apache/camel/component/atom/atom.json
@@ -25,6 +25,9 @@
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
   },
+  "headers": {
+    "CamelAtomFeed": { "kind": "header", "displayName": "", "group": "consumer", "label": "", "required": false, "javaType": "org.apache.abdera.model.Feed", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "When consuming the `org.apache.abdera.model.Feed` object is set to this header." }
+  },
   "properties": {
     "feedUri": { "kind": "path", "displayName": "Feed Uri", "group": "consumer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The URI to the feed to poll." },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
diff --git a/components/camel-atom/src/main/docs/atom-component.adoc b/components/camel-atom/src/main/docs/atom-component.adoc
index 05a25a6..2eac69f 100644
--- a/components/camel-atom/src/main/docs/atom-component.adoc
+++ b/components/camel-atom/src/main/docs/atom-component.adoc
@@ -75,16 +75,9 @@ Depending on the `splitEntries` flag Camel will either return one
 Camel can set the `Feed` object on the In header (see `feedHeader`
 option to disable this):
 
-== Message Headers
-
-Camel atom uses these headers.
-
-[width="100%",cols="10%,90%",options="header",]
-|=======================================================================
-|Header |Description
-|`CamelAtomFeed` |When consuming the `org.apache.abdera.model.Feed` object is set to this
-header.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Examples
 
diff --git a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConstants.java b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConstants.java
index 4b4f0b5..93713ce 100644
--- a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConstants.java
+++ b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConstants.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.atom;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Atom constants
  */
@@ -24,6 +26,8 @@ public final class AtomConstants {
     /**
      * Header key for the {@link org.apache.abdera.model.Feed} object is stored on the in message on the exchange.
      */
+    @Metadata(description = "When consuming the `org.apache.abdera.model.Feed` object is set to this header.",
+              javaType = "org.apache.abdera.model.Feed")
     public static final String ATOM_FEED = "CamelAtomFeed";
 
     private AtomConstants() {
diff --git a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java
index 3031ccee..ec7f71b 100644
--- a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java
+++ b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java
@@ -31,7 +31,7 @@ import org.apache.camel.spi.UriEndpoint;
  * Poll Atom RSS feeds.
  */
 @UriEndpoint(firstVersion = "1.2.0", scheme = "atom", title = "Atom", syntax = "atom:feedUri", consumerOnly = true,
-             category = { Category.RSS }, lenientProperties = true)
+             category = { Category.RSS }, lenientProperties = true, headersClass = AtomConstants.class)
 public class AtomEndpoint extends FeedEndpoint {
 
     public AtomEndpoint() {
diff --git a/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json
index dd09d1b..69c0c2f 100644
--- a/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json
+++ b/components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/org/apache/camel/component/avro/avro.json
@@ -33,6 +33,9 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.avro.AvroConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use a shared AvroConfiguration to configure options once" }
   },
+  "headers": {
+    "CamelAvroMessageName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the message to send. In consumer overrides message name from URI (if any)" }
+  },
   "properties": {
     "transport": { "kind": "path", "displayName": "Transport", "group": "common", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.avro.AvroTransport", "enum": [ "http", "netty" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.avro.AvroConfiguration", "configurationField": "configuration", "description": "Transport to use, can be either http or netty" },
     "port": { "kind": "path", "displayName": "Port", "group": "common", "label": "", "required": true, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.avro.AvroConfiguration", "configurationField": "configuration", "description": "Port number to use" },
diff --git a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
index 9f6a299..9964189 100644
--- a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
+++ b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc
@@ -140,23 +140,16 @@ The response will be added in the body of the "out" message.
 In a similar manner when using camel avro consumers for avro ipc, the
 requests parameters will be placed inside the "in" message body of the
 created exchange and once the exchange is processed the body of the
-"out" message will be send as a response.
+"out" message will be sent as a response.
 
 *Note:* By default consumer parameters are wrapped into array. If you've
 got only one parameter, *since 2.12* you can use `singleParameter` URI
-option to receive it direcly in the "in" message body without array
+option to receive it directly in the "in" message body without array
 wrapping.
 
-
-== Avro RPC Headers
-
-[width="100%",cols="20%,80%",options="header",]
-|=======================================================================
-|Name |Description
-
-|`CamelAvroMessageName` |The name of the message to send. In consumer overrides message name from
-URI (if any)
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Examples
 
diff --git a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java
index 7a2b31d..c16282a 100644
--- a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java
+++ b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroConstants.java
@@ -16,12 +16,16 @@
  */
 package org.apache.camel.component.avro;
 
+import org.apache.camel.spi.Metadata;
+
 public final class AvroConstants {
 
     public static final String AVRO_NETTY_TRANSPORT = "netty";
     public static final String AVRO_HTTP_TRANSPORT = "http";
     public static final String AVRO_MESSAGE_NAME_SEPARATOR = "/";
 
+    @Metadata(description = "The name of the message to send. In consumer overrides message name from URI (if any)",
+              javaType = "String")
     public static final String AVRO_MESSAGE_NAME = "CamelAvroMessageName";
 
     private AvroConstants() {
diff --git a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
index b5d555c..944099f 100644
--- a/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
+++ b/components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
@@ -35,7 +35,7 @@ import org.apache.camel.support.DefaultEndpoint;
  * Produce or consume Apache Avro RPC services.
  */
 @UriEndpoint(firstVersion = "2.10.0", scheme = "avro", title = "Avro RPC", syntax = "avro:transport:host:port/messageName",
-             category = { Category.RPC })
+             category = { Category.RPC }, headersClass = AvroConstants.class)
 public abstract class AvroEndpoint extends DefaultEndpoint implements AsyncEndpoint {
 
     @UriParam
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
index 7c1f7a4..2ee00fd 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
+++ b/components/camel-aws/camel-aws-secrets-manager/src/generated/resources/org/apache/camel/component/aws/secretsmanager/aws-secrets-manager.json
@@ -40,6 +40,16 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsSecretsManagerOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsSecretsManagerMaxResults": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of results to include in the response." },
+    "CamelAwsSecretsManagerSecretName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the secret." },
+    "CamelAwsSecretsManagerSecretDescription": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The description of the secret." },
+    "CamelAwsSecretsManagerSecretId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN or name of the secret." },
+    "CamelAwsSecretsManagerLambdaRotationFunctionArn": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ARN of the Lambda rotation function that can rotate the secret." },
+    "CamelAwsSecretsManagerSecretVersionId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique identifier of the version of the secret." },
+    "CamelAwsSecretsManagerSecretReplicationRegions": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A comma separated list of Regions in which to replicate the secret." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Logical name" },
     "binaryPayload": { "kind": "parameter", "displayName": "Binary Payload", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws.secretsmanager.SecretsManagerConfiguration", "configurationField": "configuration", "description": "Set if the secret is binary or not" },
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc b/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
index 70042ff..0bb1193 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/docs/aws-secrets-manager-component.adoc
@@ -157,6 +157,10 @@ For the moment we are not considering the rotation function, if any will be appl
 
 The only requirement is adding the camel-aws-secrets-manager jar to your Camel application.
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 === Secrets Manager Producer operations
 
 Camel-AWS-Secrets-manager component provides the following operation on the producer side:
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
index 495dd7d..ad3d0e5 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerConstants.java
@@ -16,16 +16,26 @@
  */
 package org.apache.camel.component.aws.secretsmanager;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS Secrets Manager module
  */
 public interface SecretsManagerConstants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsSecretsManagerOperation";
+    @Metadata(description = "The number of results to include in the response.", javaType = "Integer")
     String MAX_RESULTS = "CamelAwsSecretsManagerMaxResults";
+    @Metadata(description = "The name of the secret.", javaType = "String")
     String SECRET_NAME = "CamelAwsSecretsManagerSecretName";
+    @Metadata(description = "The description of the secret.", javaType = "String")
     String SECRET_DESCRIPTION = "CamelAwsSecretsManagerSecretDescription";
+    @Metadata(description = "The ARN or name of the secret.", javaType = "String")
     String SECRET_ID = "CamelAwsSecretsManagerSecretId";
+    @Metadata(description = "The ARN of the Lambda rotation function that can rotate the secret.", javaType = "String")
     String LAMBDA_ROTATION_FUNCTION_ARN = "CamelAwsSecretsManagerLambdaRotationFunctionArn";
+    @Metadata(description = "The unique identifier of the version of the secret.", javaType = "String")
     String SECRET_VERSION_ID = "CamelAwsSecretsManagerSecretVersionId";
+    @Metadata(description = "A comma separated list of Regions in which to replicate the secret.", javaType = "String")
     String SECRET_REPLICATION_REGIONS = "CamelAwsSecretsManagerSecretReplicationRegions";
 }
diff --git a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerEndpoint.java b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerEndpoint.java
index 327046b..b93c491 100644
--- a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerEndpoint.java
+++ b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerEndpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
  * Manage AWS Secrets Manager services using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.9.0", scheme = "aws-secrets-manager", title = "AWS Secrets Manager",
-             syntax = "aws-secrets-manager:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws-secrets-manager:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = SecretsManagerConstants.class)
 public class SecretsManagerEndpoint extends ScheduledPollEndpoint {
 
     private SecretsManagerClient secretsManagerClient;
diff --git a/components/camel-aws/camel-aws2-athena/src/generated/resources/org/apache/camel/component/aws2/athena/aws2-athena.json b/components/camel-aws/camel-aws2-athena/src/generated/resources/org/apache/camel/component/aws2/athena/aws2-athena.json
index 053e4a0..65d93c4 100644
--- a/components/camel-aws/camel-aws2-athena/src/generated/resources/org/apache/camel/component/aws2/athena/aws2-athena.json
+++ b/components/camel-aws/camel-aws2-athena/src/generated/resources/org/apache/camel/component/aws2/athena/aws2-athena.json
@@ -53,6 +53,30 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
     "clientRequestToken": { "kind": "property", "displayName": "Client Request Token", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.athena.Athena2Configuration", "configurationField": "configuration", "description": "A unique string to ensure issues queries are idempotent. It is unlikely you will need to set this." }
   },
+  "headers": {
+    "CamelAwsAthenaOperation": { "kind": "header", "displayName": "", "group": "all", "label": "all", "required": false, "javaType": "org.apache.camel.component.aws2.athena.Athena2Operations", "enum": [ "getQueryExecution", "getQueryResults", "listQueryExecutions", "startQueryExecution" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "startQueryExecution", "description": "The operation to perform. Permitted values are getQueryExecution, [...]
+    "CamelAwsAthenaDatabase": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Athena database to use." },
+    "CamelAwsAthenaQueryExecutionId": { "kind": "header", "displayName": "", "group": "getQueryExecution getQueryResults startQueryExecution", "label": "getQueryExecution getQueryResults startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The unique ID identifying the query execution." },
+    "CamelAwsAthenaWorkGroup": { "kind": "header", "displayName": "", "group": "listQueryExecutions startQueryExecution", "label": "listQueryExecutions startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The workgroup to use for running the query." },
+    "CamelAwsAthenaNextToken": { "kind": "header", "displayName": "", "group": "getQueryResults listQueryExecutions", "label": "getQueryResults listQueryExecutions", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Pagination token to use in the case where the response from the previous request was truncated." },
+    "CamelAwsAthenaMaxResults": { "kind": "header", "displayName": "", "group": "getQueryResults listQueryExecutions", "label": "getQueryResults listQueryExecutions", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Max number of results to return for the given operation (if supported by the Athena API endpoint).\nIf not set, will use the Athena API default for the given operation." },
+    "CamelAwsAthenaIncludeTrace": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Include useful trace information at the beginning of queries as an SQL comment (prefixed with \"--\")." },
+    "CamelAwsAthenaOutputLocation": { "kind": "header", "displayName": "", "group": "getQueryExecution getQueryResults startQueryExecution", "label": "getQueryExecution getQueryResults startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The location in Amazon S3 where query results are stored, such as s3:\/\/path\/to\/query\/bucket\/.\nEnsure this value ends with a forward slash (' [...]
+    "CamelAwsAthenaOutputType": { "kind": "header", "displayName": "", "group": "getQueryResults", "label": "getQueryResults", "required": false, "javaType": "org.apache.camel.component.aws2.athena.Athena2OutputType", "enum": [ "StreamList", "SelectList", "S3Pointer" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "How query results should be returned.  One of\nStreamList (default - return a GetQueryResultsIterable that can page through  [...]
+    "CamelAwsAthenaQueryExecutionState": { "kind": "header", "displayName": "", "group": "getQueryExecution getQueryResults startQueryExecution", "label": "getQueryExecution getQueryResults startQueryExecution", "required": false, "javaType": "software.amazon.awssdk.services.athena.model.QueryExecutionState", "enum": [ "QUEUED", "RUNNING", "SUCCEEDED", "FAILED", "CANCELLED", "null" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sta [...]
+    "CamelAwsAthenaClientRequestToken": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A unique string to ensure issues queries are idempotent.  It is unlikely you will need to set this." },
+    "CamelAwsAthenaQueryString": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The SQL query to run.  Except for simple queries, prefer setting this as the `body` of the\nExchange or as this header to avoid having to deal with URL encoding issues." },
+    "CamelAwsAthenaEncryptionOption": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "software.amazon.awssdk.services.athena.model.EncryptionOption", "enum": [ "SSE_S3", "SSE_KMS", "CSE_KMS", "null" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The encryption type to use when storing query results in S3." },
+    "CamelAwsAthenaKmsKey": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID." },
+    "CamelAwsAthenaWaitTimeout": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Optional max wait time in millis to wait for a successful query completion.\nSee the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more." },
+    "CamelAwsAthenaInitialDelay": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Milliseconds before the first poll for query execution status.\nSee the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more." },
+    "CamelAwsAthenaDelay": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Milliseconds before the next poll for query execution status.\nSee the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more." },
+    "CamelAwsAthenaMaxAttempts": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Maximum number of times to attempt a query.  Set to 1 to disable retries.\nSee the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more." },
+    "CamelAwsAthenaRetry": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Optional comma separated list of error types to retry the query for.  Use\n'retryable' to retry all retryable failure conditions (e.g. generic errors and resources exhausted),\n'generic' to retry 'GENERIC_INTERNAL_ERROR' fai [...]
+    "CamelAwsAthenaResetWaitTimeoutOnRetry": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Reset the waitTimeout countdown in the event of a query retry.\nIf set to true, potential max time spent waiting for queries is equal to waitTimeout x maxAttempts.\nSee the section 'Waiting for Query Compl [...]
+    "CamelAwsAthenaStartQueryExecutionAttempts": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Total number of attempts made to run the query.  Will be greater than 1 if the query is retried." },
+    "CamelAwsAthenaStartQueryExecutionElapsedMillis": { "kind": "header", "displayName": "", "group": "startQueryExecution", "label": "startQueryExecution", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Total time in millis taken in startQueryExecution (mostly relevant when waiting for query completion within startQueryExecution)." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "producer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.athena.Athena2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "accessKey": { "kind": "parameter", "displayName": "Access Key", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.athena.Athena2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key." },
diff --git a/components/camel-aws/camel-aws2-athena/src/main/docs/aws2-athena-component.adoc b/components/camel-aws/camel-aws2-athena/src/main/docs/aws2-athena-component.adoc
index 18e945f..96cf586 100644
--- a/components/camel-aws/camel-aws2-athena/src/main/docs/aws2-athena-component.adoc
+++ b/components/camel-aws/camel-aws2-athena/src/main/docs/aws2-athena-component.adoc
@@ -79,94 +79,9 @@ from("direct:start")
     .to("mock:result");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the Athena producer
-
-Message headers listed here override the corresponding
-query parameters listed in "Query Parameters".
-
-[width="100%",cols="5%,5%,10%,75%,5%",options="header",]
-|=======================================================================
-|Operation |Header |Type |Description |Required
-
-|All |`CamelAwsAthenaOperation` |`String` |The operation to perform. Permitted values are getQueryExecution, getQueryResults, listQueryExecutions, startQueryExecution. Default is startQueryExecution. | No
-
-|startQueryExecution |`CamelAwsAthenaDatabase` |`String` |The Athena database to use. | No
-
-|getQueryExecution, getQueryResults |`CamelAwsAthenaQueryExecutionId` |`String` |The unique ID identifying the query execution. | No
-
-|listQueryExecutions, startQueryExecution |`CamelAwsAthenaWorkGroup` |`String` |The workgroup to use for running the query. | No
-
-|getQueryResults, listQueryExecutions |`CamelAwsAthenaNextToken` |`String` |Pagination token to use in the case where the response from the previous request was truncated. | No
-
-|getQueryResults, listQueryExecutions |`CamelAwsAthenaMaxResults` |`Integer` |Max number of results to return for the given operation (if supported by the Athena API endpoint).
-If not set, will use the Athena API default for the given operation. | No
-
-|startQueryExecution |`CamelAwsAthenaIncludeTrace` |`boolean` |Include useful trace information at the beginning of queries as an SQL comment (prefixed with "--"). | No
-
-|startQueryExecution |`CamelAwsAthenaOutputLocation` |`String` |The location in Amazon S3 where query results are stored, such as s3://path/to/query/bucket/.
-Ensure this value ends with a forward slash ('/'). | No
-
-|getQueryResults |`CamelAwsAthenaOutputType` |`Athena2OutputType` |How query results should be returned.  One of
-StreamList (default - return a GetQueryResultsIterable that can page through all results),
-SelectList (returns at most 1,000 rows at a time, plus a NextToken value as a header than can be used for manual pagination of results),
-S3Pointer (return an S3 path pointing to the results). | No
-
-|startQueryExecution |`CamelAwsAthenaClientRequestToken` |`String` |A unique string to ensure issues queries are idempotent.  It is unlikely you will need to set this. | No
-
-|startQueryExecution |`CamelAwsAthenaQueryString` |`String` |The SQL query to run.  Except for simple queries, prefer setting this as the `body` of the
-Exchange or as this header to avoid having to deal with URL encoding issues. | No
-
-|startQueryExecution |`CamelAwsAthenaEncryptionOption` |`String` |The encryption type to use when storing query results in S3.  One of SSE_S3, SSE_KMS, or CSE_KMS. | No
-
-|startQueryExecution |`CamelAwsAthenaKmsKey` |`String` |For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID. | No
-
-|startQueryExecution |`CamelAwsAthenaWaitTimeout` |`long` |Optional max wait time in millis to wait for a successful query completion.
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|startQueryExecution |`CamelAwsAthenaInitialDelay` |`long` |Milliseconds before the first poll for query execution status.
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|startQueryExecution |`CamelAwsAthenaDelay` |`long` |Milliseconds before the next poll for query execution status.
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|startQueryExecution |`CamelAwsAthenaMaxAttempts` |`int` |Maximum number of times to attempt a query.  Set to 1 to disable retries.
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|startQueryExecution |`CamelAwsAthenaRetry` |`String` |Optional comma separated list of error types to retry the query for.  Use
-'retryable' to retry all retryable failure conditions (e.g. generic errors and resources exhausted),
-'generic' to retry 'GENERIC_INTERNAL_ERROR' failures,
-'exhausted' to retry queries that have exhausted resource limits,
-'always' to always retry regardless of failure condition, or
-'never' or null to never retry (default).
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|startQueryExecution |`CamelAwsAthenaResetWaitTimeoutOnRetry` |`boolean` |Reset the waitTimeout countdown in the event of a query retry.
-If set to true, potential max time spent waiting for queries is equal to waitTimeout x maxAttempts.
-See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more. | No
-
-|=======================================================================
-
-=== Message headers set by the Athena producer
-
-[width="100%",cols="5%,5%,10%,80%",options="header",]
-|=======================================================================
-|Operation |Header |Type |Description
-
-|getQueryExecution, getQueryResults, startQueryExecution |`CamelAwsAthenaQueryExecutionId` |`String` |The unique ID identifying the query execution.
-
-|getQueryExecution, getQueryResults, startQueryExecution |`CamelAwsAthenaQueryExecutionState` |`software.amazon.awssdk.services.athena.model.QueryExecutionState` |The state of the query execution.  One of `QUEUED`, `RUNNING`, `SUCCEEDED`, `FAILED`, `CANCELLED`.
-
-|getQueryExecution, getQueryResults, startQueryExecution |`CamelAwsAthenaOutputLocation` |`String` |The location in Amazon S3 where query results are stored, such as s3://path/to/query/bucket/.
-
-|getQueryExecution, getQueryResults, startQueryExecution |`CamelAwsAthenaQueryExecutionId` |`String` |The unique ID identifying the query execution.
-
-|getQueryResults, listQueryExecutions |`CamelAwsAthenaNextToken` |`String` |Pagination token to use in the case where the response from the previous request was truncated.
-
-|startQueryExecution |`CamelAwsAthenaStartQueryExecutionAttempts` |`int` |Total number of attempts made to run the query.  Will be greater than 1 if the query is retried.
-
-|startQueryExecution |`CamelAwsAthenaStartQueryExecutionElapsedMillis` |`long` |Total time in millis taken in startQueryExecution (mostly relevant when waiting for query completion within startQueryExecution).
-
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Static credentials vs Default Credential Provider
 
diff --git a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Constants.java b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Constants.java
index 7a73470..e051097 100644
--- a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Constants.java
+++ b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Constants.java
@@ -16,37 +16,116 @@
  */
 package org.apache.camel.component.aws2.athena;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS Athena module SDK v2.
  */
 public interface Athena2Constants {
 
     // common
+    @Metadata(label = "all",
+              description = "The operation to perform. Permitted values are getQueryExecution, getQueryResults, listQueryExecutions, startQueryExecution.",
+              javaType = "org.apache.camel.component.aws2.athena.Athena2Operations", defaultValue = "startQueryExecution")
     String OPERATION = "CamelAwsAthenaOperation";
+    @Metadata(label = "startQueryExecution", description = "The Athena database to use.", javaType = "String")
     String DATABASE = "CamelAwsAthenaDatabase";
+    @Metadata(label = "getQueryExecution getQueryResults startQueryExecution",
+              description = "The unique ID identifying the query execution.", javaType = "String")
     String QUERY_EXECUTION_ID = "CamelAwsAthenaQueryExecutionId";
+    @Metadata(label = "listQueryExecutions startQueryExecution", description = "The workgroup to use for running the query.",
+              javaType = "String")
     String WORK_GROUP = "CamelAwsAthenaWorkGroup";
+    @Metadata(label = "getQueryResults listQueryExecutions",
+              description = "Pagination token to use in the case where the response from the previous request was truncated.",
+              javaType = "String")
     String NEXT_TOKEN = "CamelAwsAthenaNextToken";
+    @Metadata(label = "getQueryResults listQueryExecutions",
+              description = "Max number of results to return for the given operation (if supported by the Athena API endpoint).\n"
+                            +
+                            "If not set, will use the Athena API default for the given operation.",
+              javaType = "Integer")
     String MAX_RESULTS = "CamelAwsAthenaMaxResults";
+    @Metadata(label = "startQueryExecution",
+              description = "Include useful trace information at the beginning of queries as an SQL comment (prefixed with \"--\").",
+              javaType = "boolean")
     String INCLUDE_TRACE = "CamelAwsAthenaIncludeTrace";
+    @Metadata(label = "getQueryExecution getQueryResults startQueryExecution",
+              description = "The location in Amazon S3 where query results are stored, such as s3://path/to/query/bucket/.\n" +
+                            "Ensure this value ends with a forward slash ('/').",
+              javaType = "String")
     String OUTPUT_LOCATION = "CamelAwsAthenaOutputLocation";
+    @Metadata(label = "getQueryResults", description = "How query results should be returned.  One of\n" +
+                                                       "StreamList (default - return a GetQueryResultsIterable that can page through all results),\n"
+                                                       +
+                                                       "SelectList (returns at most 1,000 rows at a time, plus a NextToken value as a header than can be used for manual pagination of results),\n"
+                                                       +
+                                                       "S3Pointer (return an S3 path pointing to the results).",
+              javaType = "org.apache.camel.component.aws2.athena.Athena2OutputType")
     String OUTPUT_TYPE = "CamelAwsAthenaOutputType";
+    @Metadata(label = "getQueryExecution getQueryResults startQueryExecution",
+              description = "The state of the query execution.",
+              javaType = "software.amazon.awssdk.services.athena.model.QueryExecutionState")
     String QUERY_EXECUTION_STATE = "CamelAwsAthenaQueryExecutionState"; // read only
 
     // startQueryExecution
+    @Metadata(label = "startQueryExecution",
+              description = "A unique string to ensure issues queries are idempotent.  It is unlikely you will need to set this.",
+              javaType = "String")
     String CLIENT_REQUEST_TOKEN = "CamelAwsAthenaClientRequestToken";
+    @Metadata(label = "startQueryExecution",
+              description = "The SQL query to run.  Except for simple queries, prefer setting this as the `body` of the\n" +
+                            "Exchange or as this header to avoid having to deal with URL encoding issues.",
+              javaType = "String")
     String QUERY_STRING = "CamelAwsAthenaQueryString";
+    @Metadata(label = "startQueryExecution", description = "The encryption type to use when storing query results in S3.",
+              javaType = "software.amazon.awssdk.services.athena.model.EncryptionOption")
     String ENCRYPTION_OPTION = "CamelAwsAthenaEncryptionOption";
+    @Metadata(label = "startQueryExecution", description = "For SSE-KMS and CSE-KMS, this is the KMS key ARN or ID.",
+              javaType = "String")
     String KMS_KEY = "CamelAwsAthenaKmsKey";
-
+    @Metadata(label = "startQueryExecution",
+              description = "Optional max wait time in millis to wait for a successful query completion.\n" +
+                            "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "long")
     String WAIT_TIMEOUT = "CamelAwsAthenaWaitTimeout";
+    @Metadata(label = "startQueryExecution", description = "Milliseconds before the first poll for query execution status.\n" +
+                                                           "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "long")
     String INITIAL_DELAY = "CamelAwsAthenaInitialDelay";
+    @Metadata(label = "startQueryExecution", description = "Milliseconds before the next poll for query execution status.\n" +
+                                                           "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "long")
     String DELAY = "CamelAwsAthenaDelay";
-
+    @Metadata(label = "startQueryExecution",
+              description = "Maximum number of times to attempt a query.  Set to 1 to disable retries.\n" +
+                            "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "int")
     String MAX_ATTEMPTS = "CamelAwsAthenaMaxAttempts";
+    @Metadata(label = "startQueryExecution",
+              description = "Optional comma separated list of error types to retry the query for.  Use\n" +
+                            "'retryable' to retry all retryable failure conditions (e.g. generic errors and resources exhausted),\n"
+                            +
+                            "'generic' to retry 'GENERIC_INTERNAL_ERROR' failures,\n" +
+                            "'exhausted' to retry queries that have exhausted resource limits,\n" +
+                            "'always' to always retry regardless of failure condition, or\n" +
+                            "'never' or null to never retry (default).\n" +
+                            "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "String")
     String RETRY = "CamelAwsAthenaRetry";
+    @Metadata(label = "startQueryExecution", description = "Reset the waitTimeout countdown in the event of a query retry.\n" +
+                                                           "If set to true, potential max time spent waiting for queries is equal to waitTimeout x maxAttempts.\n"
+                                                           +
+                                                           "See the section 'Waiting for Query Completion and Retrying Failed Queries' to learn more.",
+              javaType = "boolean")
     String RESET_WAIT_TIMEOUT_ON_RETRY = "CamelAwsAthenaResetWaitTimeoutOnRetry";
+    @Metadata(label = "startQueryExecution",
+              description = "Total number of attempts made to run the query.  Will be greater than 1 if the query is retried.",
+              javaType = "int")
     String START_QUERY_EXECUTION_ATTEMPTS = "CamelAwsAthenaStartQueryExecutionAttempts"; // read only
+    @Metadata(label = "startQueryExecution",
+              description = "Total time in millis taken in startQueryExecution (mostly relevant when waiting for query completion within startQueryExecution).",
+              javaType = "long")
     String START_QUERY_EXECUTION_ELAPSED_MILLIS = "CamelAwsAthenaStartQueryExecutionElapsedMillis"; // read only
 
 }
diff --git a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Endpoint.java b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Endpoint.java
index f74d1e8..797fb34 100644
--- a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Endpoint.java
+++ b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2Endpoint.java
@@ -32,8 +32,7 @@ import software.amazon.awssdk.services.athena.AthenaClient;
  * Access AWS Athena service using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.4.0", scheme = "aws2-athena", title = "AWS Athena", syntax = "aws2-athena:label",
-             producerOnly = true, category = {
-                     Category.CLOUD, Category.DATABASE })
+             producerOnly = true, category = { Category.CLOUD, Category.DATABASE }, headersClass = Athena2Constants.class)
 public class Athena2Endpoint extends DefaultEndpoint {
 
     private AthenaClient athenaClient;
diff --git a/components/camel-aws/camel-aws2-cw/src/generated/resources/org/apache/camel/component/aws2/cw/aws2-cw.json b/components/camel-aws/camel-aws2-cw/src/generated/resources/org/apache/camel/component/aws2/cw/aws2-cw.json
index 8d7dcaa..83681b3 100644
--- a/components/camel-aws/camel-aws2-cw/src/generated/resources/org/apache/camel/component/aws2/cw/aws2-cw.json
+++ b/components/camel-aws/camel-aws2-cw/src/generated/resources/org/apache/camel/component/aws2/cw/aws2-cw.json
@@ -41,6 +41,16 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.cw.Cw2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.cw.Cw2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsCwMetricNamespace": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric namespace." },
+    "CamelAwsCwMetricName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric name." },
+    "CamelAwsCwMetricValue": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric value." },
+    "CamelAwsCwMetricUnit": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric unit." },
+    "CamelAwsCwMetricTimestamp": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric timestamp." },
+    "CamelAwsCwMetricDimensions": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map of dimension names and dimension values." },
+    "CamelAwsCwMetricDimensionName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric dimension name." },
+    "CamelAwsCwMetricDimensionValue": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon CW metric dimension value." }
+  },
   "properties": {
     "namespace": { "kind": "path", "displayName": "Namespace", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.cw.Cw2Configuration", "configurationField": "configuration", "description": "The metric namespace" },
     "amazonCwClient": { "kind": "parameter", "displayName": "Amazon Cw Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.cloudwatch.CloudWatchClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.cw.Cw2Configuration", "configurationField": "configuration", "description": "To use the AmazonCloudWatch as the client" },
diff --git a/components/camel-aws/camel-aws2-cw/src/main/docs/aws2-cw-component.adoc b/components/camel-aws/camel-aws2-cw/src/main/docs/aws2-cw-component.adoc
index 6fe75d2..d924781 100644
--- a/components/camel-aws/camel-aws2-cw/src/main/docs/aws2-cw-component.adoc
+++ b/components/camel-aws/camel-aws2-cw/src/main/docs/aws2-cw-component.adoc
@@ -70,28 +70,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the CW producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsCwMetricName` |`String` |The Amazon CW metric name.
-
-|`CamelAwsCwMetricValue` |`Double` |The Amazon CW metric value.
-
-|`CamelAwsCwMetricUnit` |`String` |The Amazon CW metric unit.
-
-|`CamelAwsCwMetricNamespace` |`String` |The Amazon CW metric namespace.
-
-|`CamelAwsCwMetricTimestamp` |`Date` |The Amazon CW metric timestamp.
-
-|`CamelAwsCwMetricDimensionName` |`String` |The Amazon CW metric dimension name.
-
-|`CamelAwsCwMetricDimensionValue` |`String` |The Amazon CW metric dimension value.
-
-|`CamelAwsCwMetricDimensions` |`Map<String, String>` |A map of dimension names and dimension values.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced CloudWatchClient configuration
 
diff --git a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Constants.java b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Constants.java
index b8a12d5..95ee0e4 100644
--- a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Constants.java
+++ b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Constants.java
@@ -16,16 +16,26 @@
  */
 package org.apache.camel.component.aws2.cw;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS CloudWatch module SDK v2
  */
 public interface Cw2Constants {
+    @Metadata(description = "The Amazon CW metric namespace.", javaType = "String")
     String METRIC_NAMESPACE = "CamelAwsCwMetricNamespace";
+    @Metadata(description = "The Amazon CW metric name.", javaType = "String")
     String METRIC_NAME = "CamelAwsCwMetricName";
+    @Metadata(description = "The Amazon CW metric value.", javaType = "Double")
     String METRIC_VALUE = "CamelAwsCwMetricValue";
+    @Metadata(description = "The Amazon CW metric unit.", javaType = "String")
     String METRIC_UNIT = "CamelAwsCwMetricUnit";
+    @Metadata(description = "The Amazon CW metric timestamp.", javaType = "Date")
     String METRIC_TIMESTAMP = "CamelAwsCwMetricTimestamp";
+    @Metadata(description = "A map of dimension names and dimension values.", javaType = "Map<String, String>")
     String METRIC_DIMENSIONS = "CamelAwsCwMetricDimensions";
+    @Metadata(description = "The Amazon CW metric dimension name.", javaType = "String")
     String METRIC_DIMENSION_NAME = "CamelAwsCwMetricDimensionName";
+    @Metadata(description = "The Amazon CW metric dimension value.", javaType = "String")
     String METRIC_DIMENSION_VALUE = "CamelAwsCwMetricDimensionValue";
 }
diff --git a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Endpoint.java b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Endpoint.java
index 213fb84..4bd1768 100644
--- a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Endpoint.java
+++ b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2Endpoint.java
@@ -32,7 +32,7 @@ import software.amazon.awssdk.services.cloudwatch.CloudWatchClient;
  * Sending metrics to AWS CloudWatch using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-cw", title = "AWS CloudWatch", syntax = "aws2-cw:namespace",
-             producerOnly = true, category = { Category.CLOUD, Category.MONITORING })
+             producerOnly = true, category = { Category.CLOUD, Category.MONITORING }, headersClass = Cw2Constants.class)
 public class Cw2Endpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-aws/camel-aws2-ddb/src/generated/resources/org/apache/camel/component/aws2/ddb/aws2-ddb.json b/components/camel-aws/camel-aws2-ddb/src/generated/resources/org/apache/camel/component/aws2/ddb/aws2-ddb.json
index 85dd9f4..f239175 100644
--- a/components/camel-aws/camel-aws2-ddb/src/generated/resources/org/apache/camel/component/aws2/ddb/aws2-ddb.json
+++ b/components/camel-aws/camel-aws2-ddb/src/generated/resources/org/apache/camel/component/aws2/ddb/aws2-ddb.json
@@ -45,6 +45,40 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ddb.Ddb2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ddb.Ddb2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsDdbAttributes": { "kind": "header", "displayName": "", "group": "DeleteItem GetItem PutItem UpdateItem", "label": "DeleteItem GetItem PutItem UpdateItem", "required": false, "javaType": "Map<String, AttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of attributes returned by the operation." },
+    "CamelAwsDdbAttributeNames": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If attribute names are not specified then all attributes will be\nreturned." },
+    "CamelAwsDdbBatchItems": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, KeysAndAttributes>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map of the table name and corresponding items to get by primary key." },
+    "CamelAwsDdbBatchResponse": { "kind": "header", "displayName": "", "group": "BatchGetItems", "label": "BatchGetItems", "required": false, "javaType": "Map<String, BatchResponse>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Table names and the respective item attributes from the tables." },
+    "CamelAwsDdbConsistentRead": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If set to true, then a consistent read is issued, otherwise eventually\nconsistent is used." },
+    "CamelAwsDdbConsumedCapacity": { "kind": "header", "displayName": "", "group": "Query Scan", "label": "Query Scan", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of Capacity Units of the provisioned throughput of the table\nconsumed during the operation." },
+    "CamelAwsDdbCount": { "kind": "header", "displayName": "", "group": "Query Scan", "label": "Query Scan", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Number of items in the response." },
+    "CamelAwsDdbCreationDate": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Creation DateTime of this table." },
+    "CamelAwsDdbIndexName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If set will be used as Secondary Index for Query operation." },
+    "CamelAwsDdbItem": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, AttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map of the attributes for the item, and must include the primary key\nvalues that define the item." },
+    "CamelAwsDdbItems": { "kind": "header", "displayName": "", "group": "Query Scan", "label": "Query Scan", "required": false, "javaType": "List<Map<String,AttributeValue>>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of attributes returned by the operation." },
+    "CamelAwsDdbTableItemCount": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Item count for this table." },
+    "CamelAwsDdbKey": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, AttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The primary key that uniquely identifies each item in a table." },
+    "CamelAwsDdbKeyConditions": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, Condition>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This header specify the selection criteria for the\nquery, and merge together the two old headers *CamelAwsDdbHashKeyValue*\nand *CamelAwsDdbScanRangeKeyCondition*" },
+    "CamelAwsDdbKeySchema": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "List<KeySchemaElement>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The KeySchema that identifies the primary key for this table.\n*From Camel 2.16.0 the type of this header is List<KeySchemaElement> and not KeySchema*" },
+    "CamelAwsDdbLastEvaluatedKey": { "kind": "header", "displayName": "", "group": "Query Scan", "label": "Query Scan", "required": false, "javaType": "Key", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Primary key of the item where the query operation stopped, inclusive of\nthe previous result set." },
+    "CamelAwsDdbLimit": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of items to return." },
+    "CamelAwsDdbOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.camel.component.aws2.ddb.Ddb2Operations", "enum": [ "BatchGetItems", "DeleteItem", "DeleteTable", "DescribeTable", "GetItem", "PutItem", "Query", "Scan", "UpdateItem", "UpdateTable" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation to perform." },
+    "CamelAwsDdbProvisionedThroughput": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughputDescription", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The value of the ProvisionedThroughput property for this table" },
+    "CamelAwsDdbReadCapacity": { "kind": "header", "displayName": "", "group": "UpdateTable DescribeTable", "label": "UpdateTable DescribeTable", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "ReadCapacityUnits property of this table." },
+    "CamelAwsDdbReturnValues": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Use this parameter if you want to get the attribute name-value pairs\nbefore or after they are modified(NONE, ALL_OLD, UPDATED_OLD, ALL_NEW,\nUPDATED_NEW)." },
+    "CamelAwsDdbScannedCount": { "kind": "header", "displayName": "", "group": "Scan", "label": "Scan", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Number of items in the complete scan before any filters are applied." },
+    "CamelAwsDdbScanIndexForward": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies forward or backward traversal of the index." },
+    "CamelAwsDdbScanFilter": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, Condition>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Evaluates the scan results and returns only the desired values." },
+    "CamelAwsDdbStartKey": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, AttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Primary key of the item from which to continue an earlier query." },
+    "CamelAwsDdbTableName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Table Name for this operation." },
+    "CamelAwsDdbTableSize": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The table size in bytes." },
+    "CamelAwsDdbTableStatus": { "kind": "header", "displayName": "", "group": "DeleteTable DescribeTable", "label": "DeleteTable DescribeTable", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The status of the table: CREATING, UPDATING, DELETING, ACTIVE" },
+    "CamelAwsDdbUpdateCondition": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, ExpectedAttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Designates an attribute for a conditional modification." },
+    "CamelAwsDdbUpdateValues": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, AttributeValueUpdate>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Map of attribute name to the new value and action for the update." },
+    "CamelAwsDdbUnprocessedKeys": { "kind": "header", "displayName": "", "group": "BatchGetItems", "label": "BatchGetItems", "required": false, "javaType": "Map<String,KeysAndAttributes>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Contains a map of tables and their respective keys that were not\nprocessed with the current response." },
+    "CamelAwsDdbWriteCapacity": { "kind": "header", "displayName": "", "group": "UpdateTable DescribeTable", "label": "UpdateTable DescribeTable", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "WriteCapacityUnits property of this table." }
+  },
   "properties": {
     "tableName": { "kind": "path", "displayName": "Table Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ddb.Ddb2Configuration", "configurationField": "configuration", "description": "The name of the table currently worked with." },
     "amazonDDBClient": { "kind": "parameter", "displayName": "Amazon DDBClient", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.dynamodb.DynamoDbClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ddb.Ddb2Configuration", "configurationField": "configuration", "description": "To use the AmazonDynamoDB as the client" },
diff --git a/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc b/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc
index 3956a12..ceced4a 100644
--- a/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc
+++ b/components/camel-aws/camel-aws2-ddb/src/main/docs/aws2-ddb-component.adoc
@@ -68,195 +68,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the DDB producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbBatchItems` |`Map<String, KeysAndAttributes>` |A map of the table name and corresponding items to get by primary key.
-
-|`CamelAwsDdbTableName` |`String` |Table Name for this operation.
-
-|`CamelAwsDdbKey` |`Key` |The primary key that uniquely identifies each item in a table.
-
-|`CamelAwsDdbReturnValues` |`String` |Use this parameter if you want to get the attribute name-value pairs
-before or after they are modified(NONE, ALL_OLD, UPDATED_OLD, ALL_NEW,
-UPDATED_NEW).
-
-|`CamelAwsDdbUpdateCondition` |`Map<String, ExpectedAttributeValue>` |Designates an attribute for a conditional modification.
-
-|`CamelAwsDdbAttributeNames` |`Collection<String>` |If attribute names are not specified then all attributes will be
-returned.
-
-|`CamelAwsDdbConsistentRead` |`Boolean` |If set to true, then a consistent read is issued, otherwise eventually
-consistent is used.
-
-|`CamelAwsDdbIndexName` |`String` |If set will be used as Secondary Index for Query operation.
-
-|`CamelAwsDdbItem` |`Map<String, AttributeValue>` |A map of the attributes for the item, and must include the primary key
-values that define the item.
-
-|`CamelAwsDdbExactCount` |`Boolean` |If set to true, Amazon DynamoDB returns a total number of items that
-match the query parameters, instead of a list of the matching items and
-their attributes.
-
-|`CamelAwsDdbKeyConditions` |`Map<String, Condition>` |This header specify the selection criteria for the
-query, and merge together the two old headers *CamelAwsDdbHashKeyValue*
-and *CamelAwsDdbScanRangeKeyCondition*
-
-|`CamelAwsDdbStartKey` |`Key` |Primary key of the item from which to continue an earlier query.
-
-|`CamelAwsDdbHashKeyValue` |`AttributeValue` |Value of the hash component of the composite primary key.
-
-|`CamelAwsDdbLimit` |`Integer` |The maximum number of items to return.
-
-|`CamelAwsDdbScanRangeKeyCondition` |`Condition` |A container for the attribute values and comparison operators to use for
-the query.
-
-|`CamelAwsDdbScanIndexForward` |`Boolean` |Specifies forward or backward traversal of the index.
-
-|`CamelAwsDdbScanFilter` |`Map<String, Condition>` |Evaluates the scan results and returns only the desired values.
-
-|`CamelAwsDdbUpdateValues` |`Map<String, AttributeValueUpdate>` |Map of attribute name to the new value and action for the update.
-|=======================================================================
-
-=== Message headers set during BatchGetItems operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbBatchResponse` |`Map<String,BatchResponse>` |Table names and the respective item attributes from the tables.
-
-|`CamelAwsDdbUnprocessedKeys` |`Map<String,KeysAndAttributes>` |Contains a map of tables and their respective keys that were not
-processed with the current response.
-|=======================================================================
-
-=== Message headers set during DeleteItem operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>` |The list of attributes returned by the operation.
-|=======================================================================
-
-=== Message headers set during DeleteTable operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbProvisionedThroughput`| | 
-
-|`ProvisionedThroughputDescription` | |The value of the ProvisionedThroughput property for this table
-
-|`CamelAwsDdbCreationDate` |`Date` |Creation DateTime of this table.
-
-|`CamelAwsDdbTableItemCount` |`Long` |Item count for this table.
-
-|`CamelAwsDdbKeySchema` |`KeySchema` |The KeySchema that identifies the primary key for this table. 
-*From Camel 2.16.0 the type of this header is List<KeySchemaElement> and not KeySchema*
-
-|`CamelAwsDdbTableName` |`String` |The table name. 
-
-|`CamelAwsDdbTableSize` |`Long` |The table size in bytes. 
-
-|`CamelAwsDdbTableStatus` |`String` |The status of the table: CREATING, UPDATING, DELETING, ACTIVE
-|=======================================================================
-
-=== Message headers set during DescribeTable operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbProvisionedThroughput` |{\{ProvisionedThroughputDescription}} |The value of the ProvisionedThroughput property for this table
-
-|`CamelAwsDdbCreationDate` |`Date` |Creation DateTime of this table.
-
-|`CamelAwsDdbTableItemCount` |`Long` |Item count for this table.
-
-|`CamelAwsDdbKeySchema` |{\{KeySchema}} |The KeySchema that identifies the primary key for this table.
-
-
-|`CamelAwsDdbTableName` |`String` |The table name.
-
-|`CamelAwsDdbTableSize` |`Long` |The table size in bytes.
-
-|`CamelAwsDdbTableStatus` |`String` |The status of the table: CREATING, UPDATING, DELETING, ACTIVE
-
-|`CamelAwsDdbReadCapacity` |`Long` |ReadCapacityUnits property of this table.
-
-|`CamelAwsDdbWriteCapacity` |`Long` |WriteCapacityUnits property of this table.
-|=======================================================================
-
-=== Message headers set during GetItem operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>` |The list of attributes returned by the operation.
-
-|=======================================================================
-
-=== Message headers set during PutItem operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>` |The list of attributes returned by the operation.
-
-|=======================================================================
-
-=== Message headers set during Query operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbItems` |`List<java.util.Map<String,AttributeValue>>` |The list of attributes returned by the operation.
-
-|`CamelAwsDdbLastEvaluatedKey` |`Key` |Primary key of the item where the query operation stopped, inclusive of
-the previous result set.
-
-|`CamelAwsDdbConsumedCapacity` |`Double` |The number of Capacity Units of the provisioned throughput of the table
-consumed during the operation.
-
-|`CamelAwsDdbCount` |`Integer` |Number of items in the response.
-|=======================================================================
-
-=== Message headers set during Scan operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbItems` |`List<java.util.Map<String,AttributeValue>>` |The list of attributes returned by the operation.
-
-|`CamelAwsDdbLastEvaluatedKey` |`Key` |Primary key of the item where the query operation stopped, inclusive of
-the previous result set.
-
-|`CamelAwsDdbConsumedCapacity` |`Double` |The number of Capacity Units of the provisioned throughput of the table
-consumed during the operation.
-
-|`CamelAwsDdbCount` |`Integer` |Number of items in the response.
-
-|`CamelAwsDdbScannedCount` |`Integer` |Number of items in the complete scan before any filters are applied.
-|=======================================================================
-
-=== Message headers set during UpdateItem operation
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>` |The list of attributes returned by the operation.
-
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced AmazonDynamoDB configuration
 
diff --git a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Constants.java b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Constants.java
index dc0eb3c..10d6cc8 100644
--- a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Constants.java
+++ b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Constants.java
@@ -16,51 +16,126 @@
  */
 package org.apache.camel.component.aws2.ddb;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS DynamoDB component
  */
 public interface Ddb2Constants {
+    @Metadata(label = "DeleteItem GetItem PutItem UpdateItem",
+              description = "The list of attributes returned by the operation.", javaType = "Map<String, AttributeValue>")
     String ATTRIBUTES = "CamelAwsDdbAttributes";
+    @Metadata(description = "If attribute names are not specified then all attributes will be\n" +
+                            "returned.",
+              javaType = "Collection<String>")
     String ATTRIBUTE_NAMES = "CamelAwsDdbAttributeNames";
+    @Metadata(description = "A map of the table name and corresponding items to get by primary key.",
+              javaType = "Map<String, KeysAndAttributes>")
     String BATCH_ITEMS = "CamelAwsDdbBatchItems";
+    @Metadata(label = "BatchGetItems", description = "Table names and the respective item attributes from the tables.",
+              javaType = "Map<String, BatchResponse>")
     String BATCH_RESPONSE = "CamelAwsDdbBatchResponse";
+    @Metadata(description = "If set to true, then a consistent read is issued, otherwise eventually\n" +
+                            "consistent is used.",
+              javaType = "Boolean")
     String CONSISTENT_READ = "CamelAwsDdbConsistentRead";
+    @Metadata(label = "Query Scan", description = "The number of Capacity Units of the provisioned throughput of the table\n" +
+                                                  "consumed during the operation.",
+              javaType = "Double")
     String CONSUMED_CAPACITY = "CamelAwsDdbConsumedCapacity";
+    @Metadata(label = "Query Scan", description = "Number of items in the response.", javaType = "Integer")
     String COUNT = "CamelAwsDdbCount";
+    @Metadata(label = "DeleteTable DescribeTable", description = "Creation DateTime of this table.", javaType = "Date")
     String CREATION_DATE = "CamelAwsDdbCreationDate";
     // Removed from DynamoDB v1 to v2
+    // @Metadata(description = "If set to true, Amazon DynamoDB returns a total number of items that\n" +
+    //     "match the query parameters, instead of a list of the matching items and\n" +
+    //     "their attributes.", javaType = "Boolean")
     // String EXACT_COUNT = "CamelAwsDdbExactCount";
     // Removed from DynamoDB v1 to v2
+    // @Metadata(description = "Value of the hash component of the composite primary key.", javaType = "AttributeValue")
     // String HASH_KEY_VALUE = "CamelAwsDdbHashKeyValue";
     // Added INDEX_NAME for querying secondary indexes
+    @Metadata(description = "If set will be used as Secondary Index for Query operation.", javaType = "String")
     String INDEX_NAME = "CamelAwsDdbIndexName";
+    @Metadata(description = "A map of the attributes for the item, and must include the primary key\n" +
+                            "values that define the item.",
+              javaType = "Map<String, AttributeValue>")
     String ITEM = "CamelAwsDdbItem";
+    @Metadata(label = "Query Scan", description = "The list of attributes returned by the operation.",
+              javaType = "List<Map<String,AttributeValue>>")
     String ITEMS = "CamelAwsDdbItems";
+    @Metadata(label = "DeleteTable DescribeTable", description = "Item count for this table.", javaType = "Long")
     String ITEM_COUNT = "CamelAwsDdbTableItemCount";
     String ITEM_NAME = "CamelAwsDdbItemName";
     String MESSAGE_ID = "CamelAwsDdbMessageId";
     String NEXT_TOKEN = "CamelAwsDdbNextToken";
+    @Metadata(description = "The primary key that uniquely identifies each item in a table.",
+              javaType = "Map<String, AttributeValue>")
     String KEY = "CamelAwsDdbKey";
     // Added from DynamoDB v1 to v2
+    @Metadata(description = "This header specify the selection criteria for the\n" +
+                            "query, and merge together the two old headers *CamelAwsDdbHashKeyValue*\n" +
+                            "and *CamelAwsDdbScanRangeKeyCondition*",
+              javaType = "Map<String, Condition>")
     String KEY_CONDITIONS = "CamelAwsDdbKeyConditions";
+    @Metadata(label = "DeleteTable DescribeTable",
+              description = "The KeySchema that identifies the primary key for this table.\n" +
+                            "*From Camel 2.16.0 the type of this header is List<KeySchemaElement> and not KeySchema*",
+              javaType = "List<KeySchemaElement>")
     String KEY_SCHEMA = "CamelAwsDdbKeySchema";
+    @Metadata(label = "Query Scan", description = "Primary key of the item where the query operation stopped, inclusive of\n" +
+                                                  "the previous result set.",
+              javaType = "Key")
     String LAST_EVALUATED_KEY = "CamelAwsDdbLastEvaluatedKey";
+    @Metadata(description = "The maximum number of items to return.", javaType = "Integer")
     String LIMIT = "CamelAwsDdbLimit";
+    @Metadata(description = "The operation to perform.", javaType = "org.apache.camel.component.aws2.ddb.Ddb2Operations")
     String OPERATION = "CamelAwsDdbOperation";
+    @Metadata(label = "DeleteTable DescribeTable",
+              description = "The value of the ProvisionedThroughput property for this table",
+              javaType = "software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughputDescription")
     String PROVISIONED_THROUGHPUT = "CamelAwsDdbProvisionedThroughput";
+    @Metadata(label = "UpdateTable DescribeTable", description = "ReadCapacityUnits property of this table.", javaType = "Long")
     String READ_CAPACITY = "CamelAwsDdbReadCapacity";
+    @Metadata(description = "Use this parameter if you want to get the attribute name-value pairs\n" +
+                            "before or after they are modified(NONE, ALL_OLD, UPDATED_OLD, ALL_NEW,\n" +
+                            "UPDATED_NEW).",
+              javaType = "String")
     String RETURN_VALUES = "CamelAwsDdbReturnValues";
+    @Metadata(label = "Scan", description = "Number of items in the complete scan before any filters are applied.",
+              javaType = "Integer")
     String SCANNED_COUNT = "CamelAwsDdbScannedCount";
+    @Metadata(description = "Specifies forward or backward traversal of the index.", javaType = "Boolean")
     String SCAN_INDEX_FORWARD = "CamelAwsDdbScanIndexForward";
     // Removed from DynamoDB v1 to v2
+    // @Metadata(description = "A container for the attribute values and comparison operators to use for\n" +
+    //    "the query.", javaType = "Condition")
     // String SCAN_RANGE_KEY_CONDITION = "CamelAwsDdbScanRangeKeyCondition";
+    @Metadata(description = "Evaluates the scan results and returns only the desired values.",
+              javaType = "Map<String, Condition>")
     String SCAN_FILTER = "CamelAwsDdbScanFilter";
+    @Metadata(description = "Primary key of the item from which to continue an earlier query.",
+              javaType = "Map<String, AttributeValue>")
     String START_KEY = "CamelAwsDdbStartKey";
+    @Metadata(description = "Table Name for this operation.", javaType = "String")
     String TABLE_NAME = "CamelAwsDdbTableName";
+    @Metadata(label = "DeleteTable DescribeTable", description = "The table size in bytes.", javaType = "Long")
     String TABLE_SIZE = "CamelAwsDdbTableSize";
+    @Metadata(label = "DeleteTable DescribeTable",
+              description = "The status of the table: CREATING, UPDATING, DELETING, ACTIVE", javaType = "String")
     String TABLE_STATUS = "CamelAwsDdbTableStatus";
+    @Metadata(description = "Designates an attribute for a conditional modification.",
+              javaType = "Map<String, ExpectedAttributeValue>")
     String UPDATE_CONDITION = "CamelAwsDdbUpdateCondition";
+    @Metadata(description = "Map of attribute name to the new value and action for the update.",
+              javaType = "Map<String, AttributeValueUpdate>")
     String UPDATE_VALUES = "CamelAwsDdbUpdateValues";
+    @Metadata(label = "BatchGetItems", description = "Contains a map of tables and their respective keys that were not\n" +
+                                                     "processed with the current response.",
+              javaType = "Map<String,KeysAndAttributes>")
     String UNPROCESSED_KEYS = "CamelAwsDdbUnprocessedKeys";
+    @Metadata(label = "UpdateTable DescribeTable", description = "WriteCapacityUnits property of this table.",
+              javaType = "Long")
     String WRITE_CAPACITY = "CamelAwsDdbWriteCapacity";
 }
diff --git a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
index caec89d..cace6fc 100644
--- a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
+++ b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Ddb2Endpoint.java
@@ -50,7 +50,8 @@ import software.amazon.awssdk.services.dynamodb.model.TableStatus;
  * Store and retrieve data from AWS DynamoDB service using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-ddb", title = "AWS DynamoDB", syntax = "aws2-ddb:tableName",
-             producerOnly = true, category = { Category.CLOUD, Category.DATABASE, Category.NOSQL })
+             producerOnly = true, category = { Category.CLOUD, Category.DATABASE, Category.NOSQL },
+             headersClass = Ddb2Constants.class)
 public class Ddb2Endpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(Ddb2Endpoint.class);
diff --git a/components/camel-aws/camel-aws2-ec2/src/generated/resources/org/apache/camel/component/aws2/ec2/aws2-ec2.json b/components/camel-aws/camel-aws2-ec2/src/generated/resources/org/apache/camel/component/aws2/ec2/aws2-ec2.json
index 43b74d9..aac588c 100644
--- a/components/camel-aws/camel-aws2-ec2/src/generated/resources/org/apache/camel/component/aws2/ec2/aws2-ec2.json
+++ b/components/camel-aws/camel-aws2-ec2/src/generated/resources/org/apache/camel/component/aws2/ec2/aws2-ec2.json
@@ -39,6 +39,23 @@
     "useDefaultCredentialsProvider": { "kind": "property", "displayName": "Use Default Credentials Provider", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ec2.AWS2EC2Configuration", "configurationField": "configuration", "description": "Set whether the EC2 client should expect to load credentials through  [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
   },
+  "headers": {
+    "CamelAwsEC2ImageId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An image ID of the AWS marketplace" },
+    "CamelAwsEC2InstanceType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.ec2.model.InstanceType", "enum": [ "a1.medium", "a1.large", "a1.xlarge", "a1.2xlarge", "a1.4xlarge", "a1.metal", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "c5.large", "c5.xlarge", "c5.2xlarge", "c5.4xlarge" [...]
+    "CamelAwsEC2Operation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsEC2InstanceMinCount": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The minimum number of instances we want to run." },
+    "CamelAwsEC2InstanceMaxCount": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of instances we want to run." },
+    "CamelAwsEC2InstanceMonitoring": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Define if we want the running instances to be monitored" },
+    "CamelAwsEC2InstanceKernelId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ID of the kernel." },
+    "CamelAwsEC2InstanceEbsOptimized": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Define if the creating instance is optimized for EBS I\/O." },
+    "CamelAwsEC2InstanceSecurityGroups": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The security groups to associate to the instances" },
+    "CamelAwsEC2InstancesIds": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A collection of instances IDS to execute start, stop, describe and\nterminate operations on." },
+    "CamelAwsEC2InstancesKeyPair": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the key pair." },
+    "CamelAwsEC2InstancesClientToken": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Unique, case-sensitive identifier you provide to ensure the idempotency of the request." },
+    "CamelAwsEC2InstancesPlacement": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.ec2.model.Placement", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The placement for the instance." },
+    "CamelAwsEC2InstancesTags": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<Tag>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A collection of tags to add or remove from EC2 resources" },
+    "CamelAwsEC2SubnetId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ID of the subnet to launch the instance into." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ec2.AWS2EC2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "accessKey": { "kind": "parameter", "displayName": "Access Key", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ec2.AWS2EC2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
diff --git a/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc b/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc
index 78e50b0..c338947 100644
--- a/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc
+++ b/components/camel-aws/camel-aws2-ec2/src/main/docs/aws2-ec2-component.adoc
@@ -69,33 +69,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the EC2 producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsEC2ImageId` |`String` |An image ID of the AWS marketplace
-
-|`CamelAwsEC2InstanceType` |com.amazonaws.services.ec2.model.InstanceType |The instance type we want to create and run
-
-|`CamelAwsEC2Operation` |`String` |The operation we want to perform
-
-|`CamelAwsEC2InstanceMinCount` |`Int` |The mininum number of instances we want to run.
-
-|`CamelAwsEC2InstanceMaxCount` |`Int` |The maximum number of instances we want to run.
-
-|`CamelAwsEC2InstanceMonitoring` |Boolean |Define if we want the running instances to be monitored
-
-|`CamelAwsEC2InstanceEbsOptimized` |`Boolean` |Define if the creating instance is optimized for EBS I/O.
-
-|`CamelAwsEC2InstanceSecurityGroups` |Collection |The security groups to associate to the instances
-
-|`CamelAwsEC2InstancesIds` |`Collection` |A collection of instances IDS to execute start, stop, describe and
-terminate operations on.
-
-|`CamelAwsEC2InstancesTags` |`Collection` |A collection of tags to add or remove from EC2 resources
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Supported producer operations
 
diff --git a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Constants.java b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Constants.java
index 2e4bddb..263ac73 100644
--- a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Constants.java
+++ b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Constants.java
@@ -16,24 +16,45 @@
  */
 package org.apache.camel.component.aws2.ec2;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS EC2 module SDK v2
  */
 public interface AWS2EC2Constants {
 
+    @Metadata(description = "An image ID of the AWS marketplace", javaType = "String")
     String IMAGE_ID = "CamelAwsEC2ImageId";
+    @Metadata(description = "The instance type we want to create and run",
+              javaType = "software.amazon.awssdk.services.ec2.model.InstanceType")
     String INSTANCE_TYPE = "CamelAwsEC2InstanceType";
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsEC2Operation";
+    @Metadata(description = "The minimum number of instances we want to run.", javaType = "Integer")
     String INSTANCE_MIN_COUNT = "CamelAwsEC2InstanceMinCount";
+    @Metadata(description = "The maximum number of instances we want to run.", javaType = "Integer")
     String INSTANCE_MAX_COUNT = "CamelAwsEC2InstanceMaxCount";
+    @Metadata(description = "Define if we want the running instances to be monitored", javaType = "Boolean")
     String INSTANCE_MONITORING = "CamelAwsEC2InstanceMonitoring";
+    @Metadata(description = "The ID of the kernel.", javaType = "String")
     String INSTANCE_KERNEL_ID = "CamelAwsEC2InstanceKernelId";
+    @Metadata(description = "Define if the creating instance is optimized for EBS I/O.", javaType = "Boolean")
     String INSTANCE_EBS_OPTIMIZED = "CamelAwsEC2InstanceEbsOptimized";
+    @Metadata(description = "The security groups to associate to the instances", javaType = "Collection<String>")
     String INSTANCE_SECURITY_GROUPS = "CamelAwsEC2InstanceSecurityGroups";
+    @Metadata(description = "A collection of instances IDS to execute start, stop, describe and\n" +
+                            "terminate operations on.",
+              javaType = "Collection<String>")
     String INSTANCES_IDS = "CamelAwsEC2InstancesIds";
+    @Metadata(description = "The name of the key pair.", javaType = "String")
     String INSTANCES_KEY_PAIR = "CamelAwsEC2InstancesKeyPair";
+    @Metadata(description = "Unique, case-sensitive identifier you provide to ensure the idempotency of the request.",
+              javaType = "String")
     String INSTANCES_CLIENT_TOKEN = "CamelAwsEC2InstancesClientToken";
+    @Metadata(description = "The placement for the instance.", javaType = "software.amazon.awssdk.services.ec2.model.Placement")
     String INSTANCES_PLACEMENT = "CamelAwsEC2InstancesPlacement";
+    @Metadata(description = "A collection of tags to add or remove from EC2 resources", javaType = "Collection<Tag>")
     String INSTANCES_TAGS = "CamelAwsEC2InstancesTags";
+    @Metadata(description = "The ID of the subnet to launch the instance into.", javaType = "String")
     String SUBNET_ID = "CamelAwsEC2SubnetId";
 }
diff --git a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Endpoint.java b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Endpoint.java
index 766f655..20c4fd2 100644
--- a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Endpoint.java
+++ b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.ec2.Ec2Client;
  * Manage AWS EC2 instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-ec2", title = "AWS Elastic Compute Cloud (EC2)",
-             syntax = "aws2-ec2:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-ec2:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = AWS2EC2Constants.class)
 public class AWS2EC2Endpoint extends ScheduledPollEndpoint {
 
     private Ec2Client ec2Client;
diff --git a/components/camel-aws/camel-aws2-ecs/src/generated/resources/org/apache/camel/component/aws2/ecs/aws2-ecs.json b/components/camel-aws/camel-aws2-ecs/src/generated/resources/org/apache/camel/component/aws2/ecs/aws2-ecs.json
index 2050055..9e15597 100644
--- a/components/camel-aws/camel-aws2-ecs/src/generated/resources/org/apache/camel/component/aws2/ecs/aws2-ecs.json
+++ b/components/camel-aws/camel-aws2-ecs/src/generated/resources/org/apache/camel/component/aws2/ecs/aws2-ecs.json
@@ -39,6 +39,11 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ecs.ECS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ecs.ECS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsECSOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsECSMaxResults": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The limit number of results while listing clusters" },
+    "CamelAwsECSClusterName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster name" }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ecs.ECS2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "ecsClient": { "kind": "parameter", "displayName": "Ecs Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.ecs.EcsClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ecs.ECS2Configuration", "configurationField": "configuration", "description": "To use a existing configured AWS ECS as client" },
diff --git a/components/camel-aws/camel-aws2-ecs/src/main/docs/aws2-ecs-component.adoc b/components/camel-aws/camel-aws2-ecs/src/main/docs/aws2-ecs-component.adoc
index 630c0eb..f31a667 100644
--- a/components/camel-aws/camel-aws2-ecs/src/main/docs/aws2-ecs-component.adoc
+++ b/components/camel-aws/camel-aws2-ecs/src/main/docs/aws2-ecs-component.adoc
@@ -67,18 +67,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the ECS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsECSMaxResults` |`Integer` |The limit number of results while listing clusters
-
-|`CamelAwsECSOperation` |`String` |The operation we want to perform
-
-|`CamelAwsECSClusterName` |`String` |The cluster name
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === ECS Producer operations
 
diff --git a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Constants.java b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Constants.java
index 49debe6..bf228eb1 100644
--- a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Constants.java
+++ b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Constants.java
@@ -16,11 +16,16 @@
  */
 package org.apache.camel.component.aws2.ecs;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS2 ECS module
  */
 public interface ECS2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsECSOperation";
+    @Metadata(description = "The limit number of results while listing clusters", javaType = "Integer")
     String MAX_RESULTS = "CamelAwsECSMaxResults";
+    @Metadata(description = "The cluster name", javaType = "String")
     String CLUSTER_NAME = "CamelAwsECSClusterName";
 }
diff --git a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Endpoint.java b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Endpoint.java
index cf3f8d1..882a282 100644
--- a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Endpoint.java
+++ b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.ecs.EcsClient;
  * Manage AWS ECS cluster instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-ecs", title = "AWS Elastic Container Service (ECS)",
-             syntax = "aws2-ecs:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-ecs:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = ECS2Constants.class)
 public class ECS2Endpoint extends ScheduledPollEndpoint {
 
     private EcsClient ecsClient;
diff --git a/components/camel-aws/camel-aws2-eks/src/generated/resources/org/apache/camel/component/aws2/eks/aws2-eks.json b/components/camel-aws/camel-aws2-eks/src/generated/resources/org/apache/camel/component/aws2/eks/aws2-eks.json
index 4121689..0c1b393 100644
--- a/components/camel-aws/camel-aws2-eks/src/generated/resources/org/apache/camel/component/aws2/eks/aws2-eks.json
+++ b/components/camel-aws/camel-aws2-eks/src/generated/resources/org/apache/camel/component/aws2/eks/aws2-eks.json
@@ -39,6 +39,14 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.eks.EKS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.eks.EKS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsEKSOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsEKSMaxResults": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The limit number of results while listing clusters" },
+    "CamelAwsEKSDescription": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A key description to use while performing a createKey operation" },
+    "CamelAwsEKSClusterName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster name" },
+    "CamelAwsEKSRoleARN": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The role ARN to use while creating the cluster" },
+    "CamelAwsEKSVPCConfig": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.eks.model.VpcConfigRequest", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The VPC config for the creations of an EKS cluster" }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.eks.EKS2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "eksClient": { "kind": "parameter", "displayName": "Eks Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.eks.EksClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.eks.EKS2Configuration", "configurationField": "configuration", "description": "To use a existing configured AWS EKS as client" },
diff --git a/components/camel-aws/camel-aws2-eks/src/main/docs/aws2-eks-component.adoc b/components/camel-aws/camel-aws2-eks/src/main/docs/aws2-eks-component.adoc
index 5e956f7..fd0b4dc 100644
--- a/components/camel-aws/camel-aws2-eks/src/main/docs/aws2-eks-component.adoc
+++ b/components/camel-aws/camel-aws2-eks/src/main/docs/aws2-eks-component.adoc
@@ -69,24 +69,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the EKS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsEKSMaxResults` |`Integer` |The limit number of results while listing clusters
-
-|`CamelAwsEKSOperation` |`String` |The operation we want to perform
-
-|`CamelAwsEKSDescription` |`String` |A key description to use while performing a createKey operation
-
-|`CamelAwsEKSClusterName` |`String` |The cluster name
-
-|`CamelAwsEKSRoleARN` |`String` |The role ARN to use while creating the cluster
-
-|`CamelAwsEKSVPCConfig` |`VPCConfigRequest` |The VPC config for the creations of an EKS cluster
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === EKS Producer operations
 
diff --git a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Constants.java b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Constants.java
index 97a079b..f673f41 100644
--- a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Constants.java
+++ b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Constants.java
@@ -16,14 +16,23 @@
  */
 package org.apache.camel.component.aws2.eks;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS EKS module SDK v2
  */
 public interface EKS2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsEKSOperation";
+    @Metadata(description = "The limit number of results while listing clusters", javaType = "Integer")
     String MAX_RESULTS = "CamelAwsEKSMaxResults";
+    @Metadata(description = "A key description to use while performing a createKey operation", javaType = "String")
     String DESCRIPTION = "CamelAwsEKSDescription";
+    @Metadata(description = "The cluster name", javaType = "String")
     String CLUSTER_NAME = "CamelAwsEKSClusterName";
+    @Metadata(description = "The role ARN to use while creating the cluster", javaType = "String")
     String ROLE_ARN = "CamelAwsEKSRoleARN";
+    @Metadata(description = "The VPC config for the creations of an EKS cluster",
+              javaType = "software.amazon.awssdk.services.eks.model.VpcConfigRequest")
     String VPC_CONFIG = "CamelAwsEKSVPCConfig";
 }
diff --git a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Endpoint.java b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Endpoint.java
index 9bd74b9..5b0c1f4 100644
--- a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Endpoint.java
+++ b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.eks.EksClient;
  * Manage AWS EKS cluster instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-eks", title = "AWS Elastic Kubernetes Service (EKS)",
-             syntax = "aws2-eks:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-eks:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = EKS2Constants.class)
 public class EKS2Endpoint extends ScheduledPollEndpoint {
 
     private EksClient eksClient;
diff --git a/components/camel-aws/camel-aws2-eventbridge/src/generated/resources/org/apache/camel/component/aws2/eventbridge/aws2-eventbridge.json b/components/camel-aws/camel-aws2-eventbridge/src/generated/resources/org/apache/camel/component/aws2/eventbridge/aws2-eventbridge.json
index f764c3b..43514ad 100644
--- a/components/camel-aws/camel-aws2-eventbridge/src/generated/resources/org/apache/camel/component/aws2/eventbridge/aws2-eventbridge.json
+++ b/components/camel-aws/camel-aws2-eventbridge/src/generated/resources/org/apache/camel/component/aws2/eventbridge/aws2-eventbridge.json
@@ -40,6 +40,15 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.eventbridge.EventbridgeConfiguration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.eventbridge.EventbridgeConfiguration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsEventbridgeOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsEventbridgeRuleName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the rule." },
+    "CamelAwsEventbridgeRuleNamePrefix": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The prefix matching the rule name." },
+    "CamelAwsEventbridgeEventPattern": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The event pattern." },
+    "CamelAwsEventbridgeTargets": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<Target>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The targets to update or add to the rule." },
+    "CamelAwsEventbridgeTargetsIds": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The IDs of the targets to remove from the rule." },
+    "CamelAwsEventbridgeTargetArn": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the target resource." }
+  },
   "properties": {
     "eventbusNameOrArn": { "kind": "path", "displayName": "Eventbus Name Or Arn", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Event bus name or ARN" },
     "eventbridgeClient": { "kind": "parameter", "displayName": "Eventbridge Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.eventbridge.EventBridgeClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.eventbridge.EventbridgeConfiguration", "configurationField": "configuration", "description": "To use a existing configured A [...]
diff --git a/components/camel-aws/camel-aws2-eventbridge/src/main/docs/aws2-eventbridge-component.adoc b/components/camel-aws/camel-aws2-eventbridge/src/main/docs/aws2-eventbridge-component.adoc
index 90ecc4e..1a9c664 100644
--- a/components/camel-aws/camel-aws2-eventbridge/src/main/docs/aws2-eventbridge-component.adoc
+++ b/components/camel-aws/camel-aws2-eventbridge/src/main/docs/aws2-eventbridge-component.adoc
@@ -51,7 +51,6 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
 === Static credentials vs Default Credential Provider
 
 You have the possibility of avoiding the usage of explicit static credentials, by specifying the useDefaultCredentialsProvider option and set it to true.
@@ -65,6 +64,10 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 === AWS2-Eventbridge Producer operations
 
 Camel-AWS2-Eventbridge component provides the following operation on the producer side:
diff --git a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
index deb3df4..028dca7 100644
--- a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
+++ b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeConstants.java
@@ -16,15 +16,24 @@
  */
 package org.apache.camel.component.aws2.eventbridge;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS2 Eventbridge module
  */
 public interface EventbridgeConstants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsEventbridgeOperation";
+    @Metadata(description = "The name of the rule.", javaType = "String")
     String RULE_NAME = "CamelAwsEventbridgeRuleName";
+    @Metadata(description = "The prefix matching the rule name.", javaType = "String")
     String RULE_NAME_PREFIX = "CamelAwsEventbridgeRuleNamePrefix";
+    @Metadata(description = "The event pattern.", javaType = "String")
     String EVENT_PATTERN = "CamelAwsEventbridgeEventPattern";
+    @Metadata(description = "The targets to update or add to the rule.", javaType = "Collection<Target>")
     String TARGETS = "CamelAwsEventbridgeTargets";
+    @Metadata(description = "The IDs of the targets to remove from the rule.", javaType = "Collection<String>")
     String TARGETS_IDS = "CamelAwsEventbridgeTargetsIds";
+    @Metadata(description = "The Amazon Resource Name (ARN) of the target resource.", javaType = "String")
     String TARGET_ARN = "CamelAwsEventbridgeTargetArn";
 }
diff --git a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeEndpoint.java b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeEndpoint.java
index 8339280..b8707ad 100644
--- a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeEndpoint.java
+++ b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeEndpoint.java
@@ -36,7 +36,8 @@ import software.amazon.awssdk.services.eventbridge.EventBridgeClient;
 @UriEndpoint(firstVersion = "3.6.0", scheme = "aws2-eventbridge", title = "AWS Eventbridge",
              syntax = "aws2-eventbridge://eventbusNameOrArn", producerOnly = true, category = {
                      Category.CLOUD,
-                     Category.MANAGEMENT })
+                     Category.MANAGEMENT },
+             headersClass = EventbridgeConstants.class)
 public class EventbridgeEndpoint extends DefaultEndpoint {
 
     private EventBridgeClient eventbridgeClient;
diff --git a/components/camel-aws/camel-aws2-iam/src/generated/resources/org/apache/camel/component/aws2/iam/aws2-iam.json b/components/camel-aws/camel-aws2-iam/src/generated/resources/org/apache/camel/component/aws2/iam/aws2-iam.json
index e821d5d..17ca9d9 100644
--- a/components/camel-aws/camel-aws2-iam/src/generated/resources/org/apache/camel/component/aws2/iam/aws2-iam.json
+++ b/components/camel-aws/camel-aws2-iam/src/generated/resources/org/apache/camel/component/aws2/iam/aws2-iam.json
@@ -39,6 +39,14 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsIAMOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsIAMUsername": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The username for the user you want to manage" },
+    "CamelAwsIAMAccessKeyID": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The accessKey you want to manage" },
+    "CamelAwsIAMAccessKeyStatus": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Status of the AccessKey you want to set, possible value are active and inactive" },
+    "CamelAwsIAMGroupName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of an AWS IAM Group" },
+    "CamelAwsIAMGroupPath": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The path of an AWS IAM Group" }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "iamClient": { "kind": "parameter", "displayName": "Iam Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.iam.IamClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.iam.IAM2Configuration", "configurationField": "configuration", "description": "To use a existing configured AWS IAM as client" },
diff --git a/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc b/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
index 5dfc64e..cec662f 100644
--- a/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
+++ b/components/camel-aws/camel-aws2-iam/src/main/docs/aws2-iam-component.adoc
@@ -61,26 +61,6 @@ the https://aws.amazon.com/iam/[Amazon IAM] service.
 
 == Usage
 
-=== Message headers evaluated by the IAM producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsIAMOperation` |`String` |The operation we want to perform
-
-|`CamelAwsIAMUsername` |`String` |The username for the user you want to manage
-
-|`CamelAwsIAMAccessKeyID` |`String` |The accessKey you want to manage
-
-|`CamelAwsIAMAccessKeyStatus` |`String` |The Status of the AccessKey you want to set, possible value are active and inactive
-
-|`CamelAwsIAMGroupName` |`String` |The name of an AWS IAM Group
-
-|`CamelAwsIAMGroupPath` |`String` |The path of an AWS IAM Group
-|=======================================================================
-
-
 === Static credentials vs Default Credential Provider
 
 You have the possibility of avoiding the usage of explicit static credentials, by specifying the useDefaultCredentialsProvider option and set it to true.
@@ -94,6 +74,10 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 === IAM Producer operations
 
 Camel-AWS2 IAM component provides the following operation on the producer side:
diff --git a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
index 15898c2..acf66c5 100644
--- a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
+++ b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Constants.java
@@ -16,14 +16,23 @@
  */
 package org.apache.camel.component.aws2.iam;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS IAM module
  */
 public interface IAM2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsIAMOperation";
+    @Metadata(description = "The username for the user you want to manage", javaType = "String")
     String USERNAME = "CamelAwsIAMUsername";
+    @Metadata(description = "The accessKey you want to manage", javaType = "String")
     String ACCESS_KEY_ID = "CamelAwsIAMAccessKeyID";
+    @Metadata(description = "The Status of the AccessKey you want to set, possible value are active and inactive",
+              javaType = "String")
     String ACCESS_KEY_STATUS = "CamelAwsIAMAccessKeyStatus";
+    @Metadata(description = "The name of an AWS IAM Group", javaType = "String")
     String GROUP_NAME = "CamelAwsIAMGroupName";
+    @Metadata(description = "The path of an AWS IAM Group", javaType = "String")
     String GROUP_PATH = "CamelAwsIAMGroupPath";
 }
diff --git a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Endpoint.java b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Endpoint.java
index cae983b..e3411af 100644
--- a/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Endpoint.java
+++ b/components/camel-aws/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.iam.IamClient;
  * Manage AWS IAM instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-iam", title = "AWS Identity and Access Management (IAM)",
-             syntax = "aws2-iam:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-iam:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = IAM2Constants.class)
 public class IAM2Endpoint extends ScheduledPollEndpoint {
 
     private IamClient iamClient;
diff --git a/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/firehose/aws2-kinesis-firehose.json b/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/firehose/aws2-kinesis-firehose.json
index 5052e07..a8706b9 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/firehose/aws2-kinesis-firehose.json
+++ b/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/firehose/aws2-kinesis-firehose.json
@@ -39,6 +39,11 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsKinesisFirehoseRecordId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The record ID, as defined in\nhttp:\/\/docs.aws.amazon.com\/firehose\/latest\/APIReference\/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]" },
+    "CamelAwsKinesisFirehoseOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsKinesisFirehoseDeliveryStreamName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the delivery stream." }
+  },
   "properties": {
     "streamName": { "kind": "path", "displayName": "Stream Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration", "configurationField": "configuration", "description": "Name of the stream" },
     "amazonKinesisFirehoseClient": { "kind": "parameter", "displayName": "Amazon Kinesis Firehose Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.firehose.FirehoseClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration", "configurationField": "configuration", "description": "Amazon Kines [...]
diff --git a/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/kinesis/aws2-kinesis.json b/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/kinesis/aws2-kinesis.json
index 6902ece..9c6d16a 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/kinesis/aws2-kinesis.json
+++ b/components/camel-aws/camel-aws2-kinesis/src/generated/resources/org/apache/camel/component/aws2/kinesis/aws2-kinesis.json
@@ -44,6 +44,13 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.kinesis.Kinesis2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.kinesis.Kinesis2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsKinesisSequenceNumber": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number of the record, as defined in\nhttp:\/\/docs.aws.amazon.com\/kinesis\/latest\/APIReference\/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]" },
+    "CamelAwsKinesisApproximateArrivalTimestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The time AWS assigned as the arrival time of the record." },
+    "CamelAwsKinesisPartitionKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Identifies which shard in the stream the data record is assigned to." },
+    "CamelMessageTimestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the message" },
+    "CamelAwsKinesisShardId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The shard ID of the shard where the data record was placed." }
+  },
   "properties": {
     "streamName": { "kind": "path", "displayName": "Stream Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kinesis.Kinesis2Configuration", "configurationField": "configuration", "description": "Name of the stream" },
     "amazonKinesisClient": { "kind": "parameter", "displayName": "Amazon Kinesis Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.kinesis.KinesisClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kinesis.Kinesis2Configuration", "configurationField": "configuration", "description": "Amazon Kinesis client to use for all reque [...]
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-component.adoc b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-component.adoc
index 3124c78..42ccce4 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-component.adoc
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-component.adoc
@@ -78,19 +78,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers set by the Kinesis consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsKinesisSequenceNumber` |`String` |The sequence number of the record. This is represented as a String as it
-size is not defined by the API. If it is to be used as a numerical type then use
-
-|`CamelAwsKinesisApproximateArrivalTimestamp` |`String` |The time AWS assigned as the arrival time of the record.
-
-|`CamelAwsKinesisPartitionKey` |`String` |Identifies which shard in the stream the data record is assigned to.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === AmazonKinesis configuration
 
@@ -111,32 +101,6 @@ however, a
 different http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html[AWSCredentialsProvider]
 can be specified when calling createClient(...).
 
-=== Message headers used by the Kinesis producer to write to Kinesis.  The producer expects that the message body is a `byte[]`.
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsKinesisPartitionKey` |`String` |The PartitionKey to pass to Kinesis to store this record.
-
-|`CamelAwsKinesisSequenceNumber` |`String` |Optional paramter to indicate the sequence number of this record.
-
-|=======================================================================
-
-=== Message headers set by the Kinesis producer on successful storage of a Record
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsKinesisSequenceNumber` |`String` |The sequence number of the record, as defined in
-http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]
-
-|`CamelAwsKinesisShardId` |`String` |The shard ID of where the Record was stored
-
-
-|=======================================================================
-
 == Dependencies
 
 Maven users will need to add the following dependency to their pom.xml.
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
index 94faeb6..988ef77 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
@@ -89,6 +89,10 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 === Amazon Kinesis Firehose configuration
 
 You then have to reference the FirehoseClient in the `amazonKinesisFirehoseClient` URI option.
@@ -144,18 +148,6 @@ from("direct:start").to("aws2-kinesis-firehose://cc?amazonKinesisFirehoseClient=
 
 In the deliveryStream you'll find "Test1Test2".
 
-=== Message headers set by the Kinesis producer on successful storage of a Record
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsKinesisFirehoseRecordId` |`String` |The record ID, as defined in
-http://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]
-
-
-|=======================================================================
-
 == Dependencies
 
 Maven users will need to add the following dependency to their pom.xml.
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Constants.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Constants.java
index 6261e67..bb64a31 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Constants.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Constants.java
@@ -16,9 +16,16 @@
  */
 package org.apache.camel.component.aws2.firehose;
 
+import org.apache.camel.spi.Metadata;
+
 public interface KinesisFirehose2Constants {
 
+    @Metadata(description = "The record ID, as defined in\n" +
+                            "http://docs.aws.amazon.com/firehose/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]",
+              javaType = "String")
     String RECORD_ID = "CamelAwsKinesisFirehoseRecordId";
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String KINESIS_FIREHOSE_OPERATION = "CamelAwsKinesisFirehoseOperation";
+    @Metadata(description = "The name of the delivery stream.", javaType = "String")
     String KINESIS_FIREHOSE_STREAM_NAME = "CamelAwsKinesisFirehoseDeliveryStreamName";
 }
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Endpoint.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Endpoint.java
index c4f03f0..e8e3130 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Endpoint.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/firehose/KinesisFirehose2Endpoint.java
@@ -35,7 +35,8 @@ import static software.amazon.awssdk.core.SdkSystemSetting.CBOR_ENABLED;
 @UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-kinesis-firehose", title = "AWS Kinesis Firehose",
              syntax = "aws2-kinesis-firehose:streamName", producerOnly = true, category = {
                      Category.CLOUD,
-                     Category.MESSAGING })
+                     Category.MESSAGING },
+             headersClass = KinesisFirehose2Constants.class)
 public class KinesisFirehose2Endpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Constants.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Constants.java
index b09aac9..62abfc4 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Constants.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Constants.java
@@ -16,14 +16,25 @@
  */
 package org.apache.camel.component.aws2.kinesis;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public interface Kinesis2Constants {
 
+    @Metadata(description = "The sequence number of the record, as defined in\n" +
+                            "http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]",
+              javaType = "String")
     String SEQUENCE_NUMBER = "CamelAwsKinesisSequenceNumber";
+    @Metadata(description = "The time AWS assigned as the arrival time of the record.", javaType = "String")
     String APPROX_ARRIVAL_TIME = "CamelAwsKinesisApproximateArrivalTimestamp";
+    @Metadata(description = "Identifies which shard in the stream the data record is assigned to.", javaType = "String")
     String PARTITION_KEY = "CamelAwsKinesisPartitionKey";
+    @Metadata(description = "The timestamp of the message", javaType = "long")
+    String MESSAGE_TIMESTAMP = Exchange.MESSAGE_TIMESTAMP;
 
     /**
      * in a Kinesis Record object, the shard ID is used on writes to indicate where the data was stored
      */
+    @Metadata(description = "The shard ID of the shard where the data record was placed.", javaType = "String")
     String SHARD_ID = "CamelAwsKinesisShardId";
 }
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Consumer.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Consumer.java
index b5934a0..1925b6a 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Consumer.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Consumer.java
@@ -197,7 +197,7 @@ public class Kinesis2Consumer extends ScheduledBatchPollingConsumer implements R
         exchange.getIn().setHeader(Kinesis2Constants.SEQUENCE_NUMBER, record.sequenceNumber());
         if (record.approximateArrivalTimestamp() != null) {
             long ts = record.approximateArrivalTimestamp().getEpochSecond() * 1000;
-            exchange.getIn().setHeader(Exchange.MESSAGE_TIMESTAMP, ts);
+            exchange.getIn().setHeader(Kinesis2Constants.MESSAGE_TIMESTAMP, ts);
         }
         return exchange;
     }
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Endpoint.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Endpoint.java
index eab1212..a8e52ac 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Endpoint.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/Kinesis2Endpoint.java
@@ -34,7 +34,7 @@ import static software.amazon.awssdk.core.SdkSystemSetting.CBOR_ENABLED;
  * Consume and produce records from and to AWS Kinesis Streams using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-kinesis", title = "AWS Kinesis", syntax = "aws2-kinesis:streamName",
-             category = { Category.CLOUD, Category.MESSAGING })
+             category = { Category.CLOUD, Category.MESSAGING }, headersClass = Kinesis2Constants.class)
 public class Kinesis2Endpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git a/components/camel-aws/camel-aws2-kms/src/generated/resources/org/apache/camel/component/aws2/kms/aws2-kms.json b/components/camel-aws/camel-aws2-kms/src/generated/resources/org/apache/camel/component/aws2/kms/aws2-kms.json
index 92354af..205e93f 100644
--- a/components/camel-aws/camel-aws2-kms/src/generated/resources/org/apache/camel/component/aws2/kms/aws2-kms.json
+++ b/components/camel-aws/camel-aws2-kms/src/generated/resources/org/apache/camel/component/aws2/kms/aws2-kms.json
@@ -39,6 +39,13 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsKMSOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsKMSLimit": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The limit number of keys to return while performing a listKeys operation" },
+    "CamelAwsKMSDescription": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A key description to use while performing a createKey operation" },
+    "CamelAwsKMSKeyId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key Id" },
+    "CamelAwsKMSPendingWindowInDays": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The waiting period, specified in number of days." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "kmsClient": { "kind": "parameter", "displayName": "Kms Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.kms.KmsClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "To use a existing configured AWS KMS as client" },
diff --git a/components/camel-aws/camel-aws2-kms/src/main/docs/aws2-kms-component.adoc b/components/camel-aws/camel-aws2-kms/src/main/docs/aws2-kms-component.adoc
index 1229128..9190926 100644
--- a/components/camel-aws/camel-aws2-kms/src/main/docs/aws2-kms-component.adoc
+++ b/components/camel-aws/camel-aws2-kms/src/main/docs/aws2-kms-component.adoc
@@ -66,20 +66,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the KMS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsKMSLimit` |`Integer` |The limit number of keys to return while performing a listKeys operation
-
-|`CamelAwsKMSOperation` |`String` |The operation we want to perform
-
-|`CamelAwsKMSDescription` |`String` |A key description to use while performing a createKey operation
-
-|`CamelAwsKMSKeyId` |`String` |The key Id 
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === KMS Producer operations
 
diff --git a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
index 0bd1913..425997c 100644
--- a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
+++ b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
@@ -16,13 +16,20 @@
  */
 package org.apache.camel.component.aws2.kms;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS KMS module
  */
 public interface KMS2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsKMSOperation";
+    @Metadata(description = "The limit number of keys to return while performing a listKeys operation", javaType = "Integer")
     String LIMIT = "CamelAwsKMSLimit";
+    @Metadata(description = "A key description to use while performing a createKey operation", javaType = "String")
     String DESCRIPTION = "CamelAwsKMSDescription";
+    @Metadata(description = "The key Id ", javaType = "String")
     String KEY_ID = "CamelAwsKMSKeyId";
+    @Metadata(description = "The waiting period, specified in number of days.", javaType = "Integer")
     String PENDING_WINDOW_IN_DAYS = "CamelAwsKMSPendingWindowInDays";
 }
diff --git a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Endpoint.java b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Endpoint.java
index 5862478..634955c 100644
--- a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Endpoint.java
+++ b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.kms.KmsClient;
  * Manage keys stored in AWS KMS instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-kms", title = "AWS Key Management Service (KMS)",
-             syntax = "aws2-kms:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-kms:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = KMS2Constants.class)
 public class KMS2Endpoint extends ScheduledPollEndpoint {
 
     private KmsClient kmsClient;
diff --git a/components/camel-aws/camel-aws2-lambda/src/generated/resources/org/apache/camel/component/aws2/lambda/aws2-lambda.json b/components/camel-aws/camel-aws2-lambda/src/generated/resources/org/apache/camel/component/aws2/lambda/aws2-lambda.json
index 2897a29..5a752af 100644
--- a/components/camel-aws/camel-aws2-lambda/src/generated/resources/org/apache/camel/component/aws2/lambda/aws2-lambda.json
+++ b/components/camel-aws/camel-aws2-lambda/src/generated/resources/org/apache/camel/component/aws2/lambda/aws2-lambda.json
@@ -39,6 +39,38 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.lambda.Lambda2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.lambda.Lambda2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsLambdaOperation": { "kind": "header", "displayName": "", "group": "all", "label": "all", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform. Override operation passed as query parameter" },
+    "CamelAwsLambdaS3Bucket": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Amazon S3 bucket name where the .zip file containing\nyour deployment package is stored. This bucket must reside in the same AWS region where you are creating the Lambda function." },
+    "CamelAwsLambdaS3Key": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon S3 object (the deployment package) key name\nyou want to upload." },
+    "CamelAwsLambdaS3ObjectVersion": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon S3 object (the deployment package) version\nyou want to upload." },
+    "CamelAwsLambdaZipFile": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The local path of the zip file (the deployment package).\n Content of zip file can also be put in Message body." },
+    "CamelAwsLambdaDescription": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The user-provided description." },
+    "CamelAwsLambdaRole": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the IAM role that Lambda assumes\n when it executes your function to access any other Amazon Web Services (AWS) resources." },
+    "CamelAwsLambdaRuntime": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The runtime environment for the Lambda function you are uploading.\n (nodejs, nodejs4.3, nodejs6.10, java8, python2.7, python3.6, dotnetcore1.0, odejs4.3-edge)" },
+    "CamelAwsLambdaHandler": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function within your code that Lambda calls to begin execution.\n For Node.js, it is the module-name.export value in your function.\n For Java, it can be package.class-name::handler or package.class-name." },
+    "CamelAwsLambdaTargetArn": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The parent object that contains the target ARN (Amazon Resource Name)\nof an Amazon SQS queue or Amazon SNS topic." },
+    "CamelAwsLambdaMemorySize": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The memory size, in MB, you configured for the function.\nMust be a multiple of 64 MB." },
+    "CamelAwsLambdaKMSKeyArn": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the KMS key used to encrypt your function's environment variables.\nIf not provided, AWS Lambda will use a default service key." },
+    "CamelAwsLambdaEnvironmentVariables": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key-value pairs that represent your environment's configuration settings." },
+    "CamelAwsLambdaPublish": { "kind": "header", "displayName": "", "group": "createFunction updateFunction", "label": "createFunction updateFunction", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This boolean parameter can be used to request AWS Lambda\nto create the Lambda function and publish a version as an atomic operation." },
+    "CamelAwsLambdaTimeout": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function execution time at which Lambda should terminate the function.\nThe default is 3 seconds." },
+    "CamelAwsLambdaTags": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of tags (key-value pairs) assigned to the new function." },
+    "CamelAwsLambdaTracingConfig": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Your function's tracing settings (Active or PassThrough)." },
+    "CamelAwsLambdaSecurityGroupIds": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If your Lambda function accesses resources in a VPC, a list of one or more security groups IDs in your VPC." },
+    "CamelAwsLambdaSubnetIds": { "kind": "header", "displayName": "", "group": "createFunction", "label": "createFunction", "required": false, "javaType": "List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If your Lambda function accesses resources in a VPC, a list of one or more subnet IDs in your VPC." },
+    "CamelAwsLambdaEventSourceArn": { "kind": "header", "displayName": "", "group": "createEventSourceMapping", "label": "createEventSourceMapping", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the event source." },
+    "CamelAwsLambdaEventSourceBatchSize": { "kind": "header", "displayName": "", "group": "createEventSourceMapping", "label": "createEventSourceMapping", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of records in each batch that Lambda pulls from your stream or queue and sends to your function." },
+    "CamelAwsLambdaEventSourceUuid": { "kind": "header", "displayName": "", "group": "deleteEventSourceMapping", "label": "deleteEventSourceMapping", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The identifier of the event source mapping." },
+    "CamelAwsLambdaResourceArn": { "kind": "header", "displayName": "", "group": "listTags tagResource untagResource", "label": "listTags tagResource untagResource", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function's Amazon Resource Name (ARN)." },
+    "CamelAwsLambdaResourceTags": { "kind": "header", "displayName": "", "group": "tagResource", "label": "tagResource", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A list of tags to apply to the function." },
+    "CamelAwsLambdaResourceTagKeys": { "kind": "header", "displayName": "", "group": "untagResource", "label": "untagResource", "required": false, "javaType": "List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A list of tag keys to remove from the function." },
+    "CamelAwsLambdaVersionDescription": { "kind": "header", "displayName": "", "group": "publishVersion", "label": "publishVersion", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A description for the version to override the description in the function configuration." },
+    "CamelAwsLambdaVersionRevisionId": { "kind": "header", "displayName": "", "group": "publishVersion", "label": "publishVersion", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Only update the function if the revision ID matches the ID that's specified." },
+    "CamelAwsLambdaFunctionVersion": { "kind": "header", "displayName": "", "group": "createAlias listAliases", "label": "createAlias listAliases", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function version to set in the alias" },
+    "CamelAwsLambdaAliasFunctionName": { "kind": "header", "displayName": "", "group": "createAlias deleteAlias getAlias", "label": "createAlias deleteAlias getAlias", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function name of the alias" },
+    "CamelAwsLambdaAliasFunctionDescription": { "kind": "header", "displayName": "", "group": "createAlias", "label": "createAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function description to set in the alias" }
+  },
   "properties": {
     "function": { "kind": "path", "displayName": "Function", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the Lambda function." },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during sta [...]
diff --git a/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc b/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc
index edc8616..6576722 100644
--- a/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc
+++ b/components/camel-aws/camel-aws2-lambda/src/main/docs/aws2-lambda-component.adoc
@@ -70,78 +70,11 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the Lambda producer
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
-[width="100%",cols="5%,5%,10%,75%,5%",options="header",]
-|=======================================================================
-|Operation |Header |Type |Description |Required
-
-|All |`CamelAwsLambdaOperation` |`String` |The operation we want to perform. Override operation passed as query parameter| Yes
-
-|createFunction |`CamelAwsLambdaS3Bucket` |`String` |Amazon S3 bucket name where the .zip file containing
-your deployment package is stored. This bucket must reside in the same AWS region where you are creating the Lambda function.| No
-
-|createFunction |`CamelAwsLambdaS3Key` |`String` |The Amazon S3 object (the deployment package) key name
-you want to upload.| No
-
-|createFunction |`CamelAwsLambdaS3ObjectVersion` |String |The Amazon S3 object (the deployment package) version
-you want to upload.| No
-
-|createFunction |`CamelAwsLambdaZipFile` |`String` |The local path of the zip file (the deployment package).
- Content of zip file can also be put in Message body.| No
-
-|createFunction |`CamelAwsLambdaRole` |`String` |The Amazon Resource Name (ARN) of the IAM role that Lambda assumes
- when it executes your function to access any other Amazon Web Services (AWS) resources. |Yes
-
-|createFunction |`CamelAwsLambdaRuntime` |String |The runtime environment for the Lambda function you are uploading.
- (nodejs, nodejs4.3, nodejs6.10, java8, python2.7, python3.6, dotnetcore1.0, odejs4.3-edge) |Yes
-
-|createFunction |`CamelAwsLambdaHandler` |`String` |The function within your code that Lambda calls to begin execution.
- For Node.js, it is the module-name.export value in your function.
- For Java, it can be package.class-name::handler or package.class-name.|Yes
-
-|createFunction |`CamelAwsLambdaDescription` |`String` |The user-provided description.|No
-
-|createFunction |`CamelAwsLambdaTargetArn` |`String` |The parent object that contains the target ARN (Amazon Resource Name)
-of an Amazon SQS queue or Amazon SNS topic.|No
-
-|createFunction |`CamelAwsLambdaMemorySize` |`Integer` |The memory size, in MB, you configured for the function.
-Must be a multiple of 64 MB.|No
-
-|createFunction |`CamelAwsLambdaKMSKeyArn` |`String` |The Amazon Resource Name (ARN) of the KMS key used to encrypt your function's environment variables.
-If not provided, AWS Lambda will use a default service key.|No
-
-|createFunction |`CamelAwsLambdaPublish` |`Boolean` |This boolean parameter can be used to request AWS Lambda
-to create the Lambda function and publish a version as an atomic operation.|No
-
-|createFunction |`CamelAwsLambdaTimeout` |`Integer` |The function execution time at which Lambda should terminate the function.
-The default is 3 seconds.|No
-
-|createFunction |`CamelAwsLambdaTracingConfig` |`String` |Your function's tracing settings (Active or PassThrough).|No
-
-|createFunction |`CamelAwsLambdaEnvironmentVariables` |`Map<String, String>` |The key-value pairs that represent your environment's configuration settings.|No
-
-|createFunction |`CamelAwsLambdaEnvironmentTags` |`Map<String, String>` |The list of tags (key-value pairs) assigned to the new function.|No
-
-|createFunction |`CamelAwsLambdaSecurityGroupIds` |`List<String>` |If your Lambda function accesses resources in a VPC, a list of one or more security groups IDs in your VPC.|No
-
-|createFunction |`CamelAwsLambdaSubnetIds` |`List<String>` |If your Lambda function accesses resources in a VPC, a list of one or more subnet IDs in your VPC.|No
-
-|createAlias |`CamelAwsLambdaFunctionVersion` |`String` |The function version to set in the alias|Yes
-
-|createAlias |`CamelAwsLambdaAliasFunctionName` |`String` |The function name to set in the alias|Yes
-
-|createAlias |`CamelAwsLambdaAliasFunctionDescription` |`String` |The function description to set in the alias|No
-
-|deleteAlias |`CamelAwsLambdaAliasFunctionName` |`String` |The function name of the alias|Yes
-
-|getAlias |`CamelAwsLambdaAliasFunctionName` |`String` |The function name of the alias|Yes
-
-|listAliases |`CamelAwsLambdaFunctionVersion` |`String` |The function version to set in the alias|No
-
-|=======================================================================
-
-== List of Avalaible Operations
+== List of Available Operations
 
 - listFunctions
 - getFunction
diff --git a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
index 7b51f5d..5310d30 100644
--- a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
+++ b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
@@ -16,40 +16,120 @@
  */
 package org.apache.camel.component.aws2.lambda;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS Lambda module
  */
 public interface Lambda2Constants {
 
+    @Metadata(label = "all", description = "The operation we want to perform. Override operation passed as query parameter",
+              javaType = "String", required = true)
     String OPERATION = "CamelAwsLambdaOperation";
-
+    @Metadata(label = "createFunction", description = "Amazon S3 bucket name where the .zip file containing\n" +
+                                                      "your deployment package is stored. This bucket must reside in the same AWS region where you are creating the Lambda function.",
+              javaType = "String")
     String S3_BUCKET = "CamelAwsLambdaS3Bucket";
+    @Metadata(label = "createFunction", description = "The Amazon S3 object (the deployment package) key name\n" +
+                                                      "you want to upload.",
+              javaType = "String")
     String S3_KEY = "CamelAwsLambdaS3Key";
+    @Metadata(label = "createFunction", description = "The Amazon S3 object (the deployment package) version\n" +
+                                                      "you want to upload.",
+              javaType = "String")
     String S3_OBJECT_VERSION = "CamelAwsLambdaS3ObjectVersion";
+    @Metadata(label = "createFunction", description = "The local path of the zip file (the deployment package).\n" +
+                                                      " Content of zip file can also be put in Message body.",
+              javaType = "String")
     String ZIP_FILE = "CamelAwsLambdaZipFile";
+    @Metadata(label = "createFunction", description = "The user-provided description.", javaType = "String")
     String DESCRIPTION = "CamelAwsLambdaDescription";
+    @Metadata(label = "createFunction", description = "The Amazon Resource Name (ARN) of the IAM role that Lambda assumes\n" +
+                                                      " when it executes your function to access any other Amazon Web Services (AWS) resources.",
+              javaType = "String", required = true)
     String ROLE = "CamelAwsLambdaRole";
+    @Metadata(label = "createFunction", description = "The runtime environment for the Lambda function you are uploading.\n" +
+                                                      " (nodejs, nodejs4.3, nodejs6.10, java8, python2.7, python3.6, dotnetcore1.0, odejs4.3-edge)",
+              javaType = "String", required = true)
     String RUNTIME = "CamelAwsLambdaRuntime";
+    @Metadata(label = "createFunction", description = "The function within your code that Lambda calls to begin execution.\n" +
+                                                      " For Node.js, it is the module-name.export value in your function.\n" +
+                                                      " For Java, it can be package.class-name::handler or package.class-name.",
+              javaType = "String", required = true)
     String HANDLER = "CamelAwsLambdaHandler";
+    @Metadata(label = "createFunction",
+              description = "The parent object that contains the target ARN (Amazon Resource Name)\n" +
+                            "of an Amazon SQS queue or Amazon SNS topic.",
+              javaType = "String")
     String TARGET_ARN = "CamelAwsLambdaTargetArn";
+    @Metadata(label = "createFunction", description = "The memory size, in MB, you configured for the function.\n" +
+                                                      "Must be a multiple of 64 MB.",
+              javaType = "Integer")
     String MEMORY_SIZE = "CamelAwsLambdaMemorySize";
+    @Metadata(label = "createFunction",
+              description = "The Amazon Resource Name (ARN) of the KMS key used to encrypt your function's environment variables.\n"
+                            +
+                            "If not provided, AWS Lambda will use a default service key.",
+              javaType = "String")
     String KMS_KEY_ARN = "CamelAwsLambdaKMSKeyArn";
+    @Metadata(label = "createFunction",
+              description = "The key-value pairs that represent your environment's configuration settings.",
+              javaType = "Map<String, String>")
     String ENVIRONMENT_VARIABLES = "CamelAwsLambdaEnvironmentVariables";
+    @Metadata(label = "createFunction updateFunction",
+              description = "This boolean parameter can be used to request AWS Lambda\n" +
+                            "to create the Lambda function and publish a version as an atomic operation.",
+              javaType = "Boolean")
     String PUBLISH = "CamelAwsLambdaPublish";
+    @Metadata(label = "createFunction",
+              description = "The function execution time at which Lambda should terminate the function.\n" +
+                            "The default is 3 seconds.",
+              javaType = "Integer")
     String TIMEOUT = "CamelAwsLambdaTimeout";
+    @Metadata(label = "createFunction", description = "The list of tags (key-value pairs) assigned to the new function.",
+              javaType = "Map<String, String>")
     String TAGS = "CamelAwsLambdaTags";
+    @Metadata(label = "createFunction", description = "Your function's tracing settings (Active or PassThrough).",
+              javaType = "String")
     String TRACING_CONFIG = "CamelAwsLambdaTracingConfig";
+    @Metadata(label = "createFunction",
+              description = "If your Lambda function accesses resources in a VPC, a list of one or more security groups IDs in your VPC.",
+              javaType = "List<String>")
     String SECURITY_GROUP_IDS = "CamelAwsLambdaSecurityGroupIds";
+    @Metadata(label = "createFunction",
+              description = "If your Lambda function accesses resources in a VPC, a list of one or more subnet IDs in your VPC.",
+              javaType = "List<String>")
     String SUBNET_IDS = "CamelAwsLambdaSubnetIds";
+    @Metadata(label = "createEventSourceMapping", description = "The Amazon Resource Name (ARN) of the event source.",
+              javaType = "String")
     String EVENT_SOURCE_ARN = "CamelAwsLambdaEventSourceArn";
+    @Metadata(label = "createEventSourceMapping",
+              description = "The maximum number of records in each batch that Lambda pulls from your stream or queue and sends to your function. ",
+              javaType = "Integer")
     String EVENT_SOURCE_BATCH_SIZE = "CamelAwsLambdaEventSourceBatchSize";
+    @Metadata(label = "deleteEventSourceMapping", description = "The identifier of the event source mapping.",
+              javaType = "String")
     String EVENT_SOURCE_UUID = "CamelAwsLambdaEventSourceUuid";
+    @Metadata(label = "listTags tagResource untagResource", description = "The function's Amazon Resource Name (ARN).",
+              javaType = "String")
     String RESOURCE_ARN = "CamelAwsLambdaResourceArn";
+    @Metadata(label = "tagResource", description = "A list of tags to apply to the function.", javaType = "Map<String, String>")
     String RESOURCE_TAGS = "CamelAwsLambdaResourceTags";
+    @Metadata(label = "untagResource", description = "A list of tag keys to remove from the function.",
+              javaType = "List<String>")
     String RESOURCE_TAG_KEYS = "CamelAwsLambdaResourceTagKeys";
+    @Metadata(label = "publishVersion",
+              description = "A description for the version to override the description in the function configuration.",
+              javaType = "String")
     String VERSION_DESCRIPTION = "CamelAwsLambdaVersionDescription";
+    @Metadata(label = "publishVersion",
+              description = "Only update the function if the revision ID matches the ID that's specified.", javaType = "String")
     String VERSION_REVISION_ID = "CamelAwsLambdaVersionRevisionId";
+    @Metadata(label = "createAlias listAliases", description = "The function version to set in the alias", javaType = "String")
     String FUNCTION_VERSION = "CamelAwsLambdaFunctionVersion";
+    @Metadata(label = "createAlias deleteAlias getAlias", description = "The function name of the alias", javaType = "String",
+              required = true)
     String FUNCTION_ALIAS_NAME = "CamelAwsLambdaAliasFunctionName";
+    @Metadata(label = "createAlias", description = "The function description to set in the alias", javaType = "String")
     String FUNCTION_ALIAS_DESCRIPTION = "CamelAwsLambdaAliasFunctionDescription";
 }
diff --git a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Endpoint.java b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Endpoint.java
index 20f2fe6..ea31f83 100644
--- a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Endpoint.java
+++ b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Endpoint.java
@@ -34,7 +34,8 @@ import software.amazon.awssdk.services.lambda.LambdaClient;
  * Manage and invoke AWS Lambda functions using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-lambda", title = "AWS Lambda", syntax = "aws2-lambda:function",
-             producerOnly = true, category = { Category.CLOUD, Category.COMPUTING, Category.SERVERLESS })
+             producerOnly = true, category = { Category.CLOUD, Category.COMPUTING, Category.SERVERLESS },
+             headersClass = Lambda2Constants.class)
 public class Lambda2Endpoint extends DefaultEndpoint {
 
     private LambdaClient awsLambdaClient;
diff --git a/components/camel-aws/camel-aws2-mq/src/generated/resources/org/apache/camel/component/aws2/mq/aws2-mq.json b/components/camel-aws/camel-aws2-mq/src/generated/resources/org/apache/camel/component/aws2/mq/aws2-mq.json
index 7dbf031..cc6c7fb 100644
--- a/components/camel-aws/camel-aws2-mq/src/generated/resources/org/apache/camel/component/aws2/mq/aws2-mq.json
+++ b/components/camel-aws/camel-aws2-mq/src/generated/resources/org/apache/camel/component/aws2/mq/aws2-mq.json
@@ -39,6 +39,19 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsMQOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsMQMaxResults": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of results that must be retrieved from listBrokers operation" },
+    "CamelAwsMQBrokerName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The broker name" },
+    "CamelAwsMQBrokerEngine": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker Engine for MQ." },
+    "CamelAwsMQBrokerEngineVersion": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker Engine Version for MQ. Currently you can choose between 5.15.6 and 5.15.0 of ACTIVEMQ" },
+    "CamelAwsMQBrokerID": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The broker id" },
+    "CamelAwsMQConfigurationID": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.mq.model.ConfigurationId", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A list of information about the configuration." },
+    "CamelAwsMQBrokerDeploymentMode": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The deployment mode for the broker in the createBroker operation" },
+    "CamelAwsMQBrokerInstanceType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The instance type for the MQ machine in the createBroker operation" },
+    "CamelAwsMQBrokerUsers": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "List<User>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of users for MQ" },
+    "CamelAwsMQBrokerPubliclyAccessible": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "If the MQ instance must be publicly available or not." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "amazonMqClient": { "kind": "parameter", "displayName": "Amazon Mq Client", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.mq.MqClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "To use a existing configured AmazonMQClient as client" },
diff --git a/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc b/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc
index ba4928b..f26d4ba 100644
--- a/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc
+++ b/components/camel-aws/camel-aws2-mq/src/main/docs/aws2-mq-component.adoc
@@ -67,32 +67,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the MQ producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsMQMaxResults` |`String` |The number of results that must be retrieved from listBrokers operation
-
-|`CamelAwsMQBrokerName` |`String` |The broker name
-
-|`CamelAwsMQOperation` |`String` |The operation we want to perform
-
-|`CamelAwsMQBrokerId` |`String` |The broker id
-
-|`CamelAwsMQBrokerDeploymentMode` |`String` |The deployment mode for the broker in the createBroker operation
-
-|`CamelAwsMQBrokerInstanceType` |`String` |The instance type for the MQ machine in the createBroker operation
-
-|`CamelAwsMQBrokerEngine` |`String` |The Broker Engine for MQ. Default is ACTIVEMQ
-
-|`CamelAwsMQBrokerEngineVersion` |`String` |The Broker Engine Version for MQ. Currently you can choose between 5.15.6 and 5.15.0 of ACTIVEMQ
-
-|`CamelAwsMQBrokerUsers` |`List<User>` |The list of users for MQ
-
-|`CamelAwsMQBrokerPubliclyAccessible` |`Boolean` |If the MQ instance must be publicly available or not. Default is false.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === MQ Producer operations
 
diff --git a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
index dac60ec..b668819 100644
--- a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
+++ b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
@@ -16,19 +16,35 @@
  */
 package org.apache.camel.component.aws2.mq;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS MQ module SDK v2
  */
 public interface MQ2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsMQOperation";
+    @Metadata(description = "The number of results that must be retrieved from listBrokers operation", javaType = "Integer")
     String MAX_RESULTS = "CamelAwsMQMaxResults";
+    @Metadata(description = "The broker name", javaType = "String")
     String BROKER_NAME = "CamelAwsMQBrokerName";
+    @Metadata(description = "The Broker Engine for MQ.", javaType = "String")
     String BROKER_ENGINE = "CamelAwsMQBrokerEngine";
+    @Metadata(description = "The Broker Engine Version for MQ. Currently you can choose between 5.15.6 and 5.15.0 of ACTIVEMQ",
+              javaType = "String")
     String BROKER_ENGINE_VERSION = "CamelAwsMQBrokerEngineVersion";
+    @Metadata(description = "The broker id", javaType = "String")
     String BROKER_ID = "CamelAwsMQBrokerID";
+    @Metadata(description = "A list of information about the configuration.",
+              javaType = "software.amazon.awssdk.services.mq.model.ConfigurationId")
     String CONFIGURATION_ID = "CamelAwsMQConfigurationID";
+    @Metadata(description = "The deployment mode for the broker in the createBroker operation", javaType = "String")
     String BROKER_DEPLOYMENT_MODE = "CamelAwsMQBrokerDeploymentMode";
+    @Metadata(description = "The instance type for the MQ machine in the createBroker operation", javaType = "String")
     String BROKER_INSTANCE_TYPE = "CamelAwsMQBrokerInstanceType";
+    @Metadata(description = "The list of users for MQ", javaType = "List<User>")
     String BROKER_USERS = "CamelAwsMQBrokerUsers";
+    @Metadata(description = "If the MQ instance must be publicly available or not.", javaType = "Boolean",
+              defaultValue = "false")
     String BROKER_PUBLICLY_ACCESSIBLE = "CamelAwsMQBrokerPubliclyAccessible";
 }
diff --git a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Endpoint.java b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Endpoint.java
index 7b1062b..33fd6c0 100644
--- a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Endpoint.java
+++ b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Endpoint.java
@@ -32,7 +32,7 @@ import software.amazon.awssdk.services.mq.MqClient;
  * Manage AWS MQ instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-mq", title = "AWS MQ", syntax = "aws2-mq:label", producerOnly = true,
-             category = { Category.CLOUD, Category.MESSAGING })
+             category = { Category.CLOUD, Category.MESSAGING }, headersClass = MQ2Constants.class)
 public class MQ2Endpoint extends ScheduledPollEndpoint {
 
     private MqClient mqClient;
diff --git a/components/camel-aws/camel-aws2-msk/src/generated/resources/org/apache/camel/component/aws2/msk/aws2-msk.json b/components/camel-aws/camel-aws2-msk/src/generated/resources/org/apache/camel/component/aws2/msk/aws2-msk.json
index c3dd34b..4ef48a5 100644
--- a/components/camel-aws/camel-aws2-msk/src/generated/resources/org/apache/camel/component/aws2/msk/aws2-msk.json
+++ b/components/camel-aws/camel-aws2-msk/src/generated/resources/org/apache/camel/component/aws2/msk/aws2-msk.json
@@ -39,6 +39,15 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.msk.MSK2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.msk.MSK2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsMSKOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsMSKClusterFilter": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster name filter for list operation" },
+    "CamelAwsMSKClusterName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster name for list and create operation" },
+    "CamelAwsMSKClusterArn": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster arn for delete operation" },
+    "CamelAwsMSKClusterKafkaVersion": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Kafka for the cluster during create operation" },
+    "CamelAwsMSKBrokerNodesNumber": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of nodes for the cluster during create operation" },
+    "CamelAwsMSKBrokerNodesGroupInfo": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker nodes group info to provide during the create operation" }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.msk.MSK2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during sta [...]
diff --git a/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc b/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc
index 86d1f7b..8b9b46e 100644
--- a/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc
+++ b/components/camel-aws/camel-aws2-msk/src/main/docs/aws2-msk-component.adoc
@@ -67,26 +67,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the MSK producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsMSKOperation` |`String` |The operation to perform
-
-|`CamelAwsMSKClusterFilter` |`String` |The cluster name filter for list operation
-
-|`CamelAwsMSKClusterName` |`String` |The cluster name for list and create operation
-
-|`CamelAwsMSKClusterArn` |`String` |The cluster arn for delete operation
-
-|`CamelAwsMSKClusterKafkaVersion` |`String` | The Kafka for the cluster during create operation
-
-|`CamelAwsMSKBrokerNodesNumber` |`Integer`| The number of nodes for the cluster during create operation
-
-|`CamelAwsMSKBrokerNodesGroupInfo` |`com.amazonaws.services.kafka.model.BrokerNodeGroupInfo`| The Broker nodes group info to provide during the create operation
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === MSK Producer operations
 
diff --git a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
index fddf2a2..ba72ec6 100644
--- a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
+++ b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
@@ -16,15 +16,25 @@
  */
 package org.apache.camel.component.aws2.msk;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS MSK module SDK v2
  */
 public interface MSK2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsMSKOperation";
+    @Metadata(description = "The cluster name filter for list operation", javaType = "String")
     String CLUSTERS_FILTER = "CamelAwsMSKClusterFilter";
+    @Metadata(description = "The cluster name for list and create operation", javaType = "String")
     String CLUSTER_NAME = "CamelAwsMSKClusterName";
+    @Metadata(description = "The cluster arn for delete operation", javaType = "String")
     String CLUSTER_ARN = "CamelAwsMSKClusterArn";
+    @Metadata(description = "The Kafka for the cluster during create operation", javaType = "String")
     String CLUSTER_KAFKA_VERSION = "CamelAwsMSKClusterKafkaVersion";
+    @Metadata(description = "The number of nodes for the cluster during create operation", javaType = "Integer")
     String BROKER_NODES_NUMBER = "CamelAwsMSKBrokerNodesNumber";
+    @Metadata(description = "The Broker nodes group info to provide during the create operation",
+              javaType = "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo")
     String BROKER_NODES_GROUP_INFO = "CamelAwsMSKBrokerNodesGroupInfo";
 }
diff --git a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Endpoint.java b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Endpoint.java
index ca45fee..61285be 100644
--- a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Endpoint.java
+++ b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Endpoint.java
@@ -32,7 +32,8 @@ import software.amazon.awssdk.services.kafka.KafkaClient;
  * Manage AWS MSK instances using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-msk", title = "AWS Managed Streaming for Apache Kafka (MSK)",
-             syntax = "aws2-msk:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             syntax = "aws2-msk:label", producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT },
+             headersClass = MSK2Constants.class)
 public class MSK2Endpoint extends ScheduledPollEndpoint {
 
     private KafkaClient mskClient;
diff --git a/components/camel-aws/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json b/components/camel-aws/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
index 546a6cc..dbdd256 100644
--- a/components/camel-aws/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
+++ b/components/camel-aws/camel-aws2-s3/src/generated/resources/org/apache/camel/component/aws2/s3/aws2-s3.json
@@ -73,6 +73,33 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsS3BucketName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The bucket Name which this object will be stored or which will be used for the current operation or in which this object is contained." },
+    "CamelAwsS3BucketDestinationName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The bucket Destination Name which will be used for the current operation" },
+    "CamelAwsS3ContentControl": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The *optional* Cache-Control HTTP header which allows the user to\nspecify caching behavior along the HTTP request\/reply chain." },
+    "CamelAwsS3ContentDisposition": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The *optional* Content-Disposition HTTP header, which specifies\npresentational information such as the recommended filename for the\nobject to be saved as." },
+    "CamelAwsS3ContentEncoding": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The *optional* Content-Encoding HTTP header specifying what content\nencodings have been applied to the object and what decoding mechanisms\nmust be applied in order to obtain the media-type referenced by the\nContent-Type field." },
+    "CamelAwsS3ContentLength": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Content-Length HTTP header indicating the size of the associated\nobject in bytes." },
+    "CamelAwsS3ContentMD5": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The base64 encoded 128-bit MD5 digest of the associated object (content\n- not including headers) according to RFC 1864. This data is used as a\nmessage integrity check to verify that the data received by Amazon S3 is\nthe same data that the caller sent." },
+    "CamelAwsS3ContentType": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Content-Type HTTP header, which indicates the type of content stored\nin the associated object. The value of this header is a standard MIME\ntype." },
+    "CamelAwsS3ETag": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) The ETag value for the newly uploaded object.\n(consumer) The hex encoded 128-bit MD5 digest of the associated object according to\nRFC 1864. This data is used as an integrity check to verify that the\ndata received by the caller is the same data tha [...]
+    "CamelAwsS3Key": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key under which this object is stored or will be stored or which will be used for the current operation" },
+    "CamelAwsS3DestinationKey": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Destination key which will be used for the current operation" },
+    "CamelAwsS3LastModified": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The value of the Last-Modified header, indicating the date and time at\nwhich Amazon S3 last recorded a modification to the associated object." },
+    "CamelAwsS3StorageClass": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The storage class of this object." },
+    "CamelAwsS3VersionId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) The *optional* version ID of the newly uploaded object.\n(consumer) The version ID of the associated Amazon S3 object if available. Version\nIDs are only assigned to objects when an object is uploaded to an Amazon\nS3 bucket that has object vers [...]
+    "CamelAwsS3CannedAcl": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The canned acl that will be applied to the object. see\n`software.amazon.awssdk.services.s3.model.ObjectCannedACL` for allowed\nvalues." },
+    "CamelAwsS3Acl": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "software.amazon.awssdk.services.s3.model.BucketCannedACL", "enum": [ "private", "public-read", "public-read-write", "authenticated-read", "null" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A well constructed Amazon S3 Access Control List object." },
+    "CamelAwsS3Operation": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, listObjects" },
+    "CamelAwsS3ServerSideEncryption": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the server-side encryption algorithm when encrypting\nthe object using AWS-managed keys. For example use AES256." },
+    "CamelAwsS3ExpirationTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If the object expiration is configured (see PUT Bucket lifecycle), the response includes this header." },
+    "CamelAwsS3ReplicationStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "software.amazon.awssdk.services.s3.model.ReplicationStatus", "enum": [ "COMPLETE", "PENDING", "FAILED", "REPLICA", "null" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Amazon S3 can return this if your request involves a bucket that is either a source or destination in a replication rule." },
+    "CamelAwsS3RangeStart": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The position of the first byte to get" },
+    "CamelAwsS3RangeEnd": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The position of the last byte to get" },
+    "CamelAwsS3DowloadLinkExpirationTime": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The expiration time of the download link in milliseconds" },
+    "CamelAwsS3Metadata": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map of metadata to be stored or stored with the object in S3. More details about\nmetadata https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/UsingMetadata.html[here]." },
+    "CamelMessageTimestamp": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the message" }
+  },
   "properties": {
     "bucketNameOrArn": { "kind": "path", "displayName": "Bucket Name Or Arn", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Bucket name or ARN" },
     "amazonS3Client": { "kind": "parameter", "displayName": "Amazon S3 Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.s3.S3Client", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.s3.AWS2S3Configuration", "configurationField": "configuration", "description": "Reference to a com.amazonaws.services.s3.AmazonS3 in the registry." },
diff --git a/components/camel-aws/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc b/components/camel-aws/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
index fcc18e7..217c7bc 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
+++ b/components/camel-aws/camel-aws2-s3/src/main/docs/aws2-s3-component.adoc
@@ -72,115 +72,9 @@ from("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&pref
   .to("file:/var/downloaded");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the S3 producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation
-
-|`CamelAwsS3BucketDestinationName` |`String` |The bucket Destination Name which will be used for the current operation
-
-|`CamelAwsS3ContentLength` |`Long` |The content length of this object.
-
-|`CamelAwsS3ContentType` |`String` |The content type of this object.
-
-|`CamelAwsS3ContentControl` |`String` |The content control of this object.
-
-|`CamelAwsS3ContentDisposition` |`String` |The content disposition of this object.
-
-|`CamelAwsS3ContentEncoding` |`String` |The content encoding of this object.
-
-|`CamelAwsS3ContentMD5` |`String` |The md5 checksum of this object.
-
-|`CamelAwsS3DestinationKey` |`String` |The Destination key which will be used for the current operation
-
-|`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation
-
-|`CamelAwsS3LastModified` |`java.util.Date` |The last modified timestamp of this object.
-
-|`CamelAwsS3Operation` |`String` |The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, listObjects
-
-|`CamelAwsS3StorageClass` |`String` |The storage class of this object.
-
-|`CamelAwsS3CannedAcl` |`String` |The canned acl that will be applied to the object. see
-`software.amazon.awssdk.services.s3.model.ObjectCannedACL` for allowed
-values.
-
-|`CamelAwsS3Acl` |`software.amazon.awssdk.services.s3.model.BucketCannedACL` |A well constructed Amazon S3 Access Control List object.
-see `software.amazon.awssdk.services.s3.model.BucketCannedACL` for more details
-
-|`CamelAwsS3ServerSideEncryption` |String |Sets the server-side encryption algorithm when encrypting
-the object using AWS-managed keys. For example use AES256.
-
-|`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
-|`CamelAwsS3Metadata` |`Map<String, String>` |A map of metadata to be stored with the object in S3. More details about
-metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html[here].
-|=======================================================================
-
-=== Message headers set by the S3 producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.
-
-|`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.
-
-
-|=======================================================================
-
-=== Message headers set by the S3 consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsS3Key` |`String` |The key under which this object is stored.
-
-|`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.
-
-|`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
-RFC 1864. This data is used as an integrity check to verify that the
-data received by the caller is the same data that was sent by Amazon S3.
-
-|`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
-which Amazon S3 last recorded a modification to the associated object.
-
-|`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
-IDs are only assigned to objects when an object is uploaded to an Amazon
-S3 bucket that has object versioning enabled.
-
-|`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
-in the associated object. The value of this header is a standard MIME
-type.
-
-|`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
-- not including headers) according to RFC 1864. This data is used as a
-message integrity check to verify that the data received by Amazon S3 is
-the same data that the caller sent.
-
-|`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
-object in bytes.
-
-|`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
-encodings have been applied to the object and what decoding mechanisms
-must be applied in order to obtain the media-type referenced by the
-Content-Type field.
-
-|`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
-presentational information such as the recommended filename for the
-object to be saved as.
-
-|`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
-specify caching behavior along the HTTP request/reply chain.
-
-|`CamelAwsS3ServerSideEncryption` |String |The server-side encryption algorithm when encrypting the
-object using AWS-managed keys.
-|`CamelAwsS3Metadata` |`Map<String, String>` |A map of metadata stored with the object in S3. More details about
-metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html[here].
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === S3 Producer operations
 
diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
index a14d23c..b8a914c 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
+++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Constants.java
@@ -16,33 +16,107 @@
  */
 package org.apache.camel.component.aws2.s3;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS2 S3 module
  */
 public interface AWS2S3Constants {
 
+    @Metadata(description = "The bucket Name which this object will be stored or which will be used for the current operation or in which this object is contained.",
+              javaType = "String")
     String BUCKET_NAME = "CamelAwsS3BucketName";
+    @Metadata(label = "producer", description = "The bucket Destination Name which will be used for the current operation",
+              javaType = "String")
     String BUCKET_DESTINATION_NAME = "CamelAwsS3BucketDestinationName";
+    @Metadata(description = "The *optional* Cache-Control HTTP header which allows the user to\n" +
+                            "specify caching behavior along the HTTP request/reply chain.",
+              javaType = "String")
     String CACHE_CONTROL = "CamelAwsS3ContentControl";
+    @Metadata(description = "The *optional* Content-Disposition HTTP header, which specifies\n" +
+                            "presentational information such as the recommended filename for the\n" +
+                            "object to be saved as.",
+              javaType = "String")
     String CONTENT_DISPOSITION = "CamelAwsS3ContentDisposition";
+    @Metadata(description = "The *optional* Content-Encoding HTTP header specifying what content\n" +
+                            "encodings have been applied to the object and what decoding mechanisms\n" +
+                            "must be applied in order to obtain the media-type referenced by the\n" +
+                            "Content-Type field.",
+              javaType = "String")
     String CONTENT_ENCODING = "CamelAwsS3ContentEncoding";
+    @Metadata(description = "The Content-Length HTTP header indicating the size of the associated\n" +
+                            "object in bytes.",
+              javaType = "Long")
     String CONTENT_LENGTH = "CamelAwsS3ContentLength";
+    @Metadata(description = "The base64 encoded 128-bit MD5 digest of the associated object (content\n" +
+                            "- not including headers) according to RFC 1864. This data is used as a\n" +
+                            "message integrity check to verify that the data received by Amazon S3 is\n" +
+                            "the same data that the caller sent.",
+              javaType = "String")
     String CONTENT_MD5 = "CamelAwsS3ContentMD5";
+    @Metadata(description = "The Content-Type HTTP header, which indicates the type of content stored\n" +
+                            "in the associated object. The value of this header is a standard MIME\n" +
+                            "type.",
+              javaType = "String")
     String CONTENT_TYPE = "CamelAwsS3ContentType";
+    @Metadata(description = "(producer) The ETag value for the newly uploaded object.\n" +
+                            "(consumer) The hex encoded 128-bit MD5 digest of the associated object according to\n" +
+                            "RFC 1864. This data is used as an integrity check to verify that the\n" +
+                            "data received by the caller is the same data that was sent by Amazon S3.",
+              javaType = "String")
     String E_TAG = "CamelAwsS3ETag";
+    @Metadata(description = "The key under which this object is stored or will be stored or which will be used for the current operation",
+              javaType = "String")
     String KEY = "CamelAwsS3Key";
+    @Metadata(label = "producer", description = "The Destination key which will be used for the current operation",
+              javaType = "String")
     String DESTINATION_KEY = "CamelAwsS3DestinationKey";
+    @Metadata(description = "The value of the Last-Modified header, indicating the date and time at\n" +
+                            "which Amazon S3 last recorded a modification to the associated object.",
+              javaType = "Date")
     String LAST_MODIFIED = "CamelAwsS3LastModified";
+    @Metadata(description = "The storage class of this object.", javaType = "String")
     String STORAGE_CLASS = "CamelAwsS3StorageClass";
+    @Metadata(description = "(producer) The *optional* version ID of the newly uploaded object.\n" +
+                            "(consumer) The version ID of the associated Amazon S3 object if available. Version\n" +
+                            "IDs are only assigned to objects when an object is uploaded to an Amazon\n" +
+                            "S3 bucket that has object versioning enabled.",
+              javaType = "String")
     String VERSION_ID = "CamelAwsS3VersionId";
+    @Metadata(label = "producer", description = "The canned acl that will be applied to the object. see\n" +
+                                                "`software.amazon.awssdk.services.s3.model.ObjectCannedACL` for allowed\n" +
+                                                "values.",
+              javaType = "String")
     String CANNED_ACL = "CamelAwsS3CannedAcl";
+    @Metadata(label = "producer", description = "A well constructed Amazon S3 Access Control List object.",
+              javaType = "software.amazon.awssdk.services.s3.model.BucketCannedACL")
     String ACL = "CamelAwsS3Acl";
+    @Metadata(description = "The operation to perform. Permitted values are copyObject, deleteObject, listBuckets, deleteBucket, listObjects",
+              javaType = "String")
     String S3_OPERATION = "CamelAwsS3Operation";
+    @Metadata(description = "Sets the server-side encryption algorithm when encrypting\n" +
+                            "the object using AWS-managed keys. For example use AES256.",
+              javaType = "String")
     String SERVER_SIDE_ENCRYPTION = "CamelAwsS3ServerSideEncryption";
+    @Metadata(label = "consumer",
+              description = "If the object expiration is configured (see PUT Bucket lifecycle), the response includes this header.",
+              javaType = "String")
     String EXPIRATION_TIME = "CamelAwsS3ExpirationTime";
+    @Metadata(label = "consumer",
+              description = "Amazon S3 can return this if your request involves a bucket that is either a source or destination in a replication rule.",
+              javaType = "software.amazon.awssdk.services.s3.model.ReplicationStatus")
     String REPLICATION_STATUS = "CamelAwsS3ReplicationStatus";
+    @Metadata(label = "producer", description = "The position of the first byte to get", javaType = "String")
     String RANGE_START = "CamelAwsS3RangeStart";
+    @Metadata(label = "producer", description = "The position of the last byte to get", javaType = "String")
     String RANGE_END = "CamelAwsS3RangeEnd";
+    @Metadata(label = "producer", description = "The expiration time of the download link in milliseconds", javaType = "Long")
     String DOWNLOAD_LINK_EXPIRATION_TIME = "CamelAwsS3DowloadLinkExpirationTime";
+    @Metadata(description = "A map of metadata to be stored or stored with the object in S3. More details about\n" +
+                            "metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html[here].",
+              javaType = "Map<String, String>")
     String METADATA = "CamelAwsS3Metadata";
+    @Metadata(label = "consumer", description = "The timestamp of the message", javaType = "long")
+    String MESSAGE_TIMESTAMP = Exchange.MESSAGE_TIMESTAMP;
 }
diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
index c41bc78..ee54e12 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
+++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Consumer.java
@@ -408,7 +408,7 @@ public class AWS2S3Consumer extends ScheduledBatchPollingConsumer {
         if (s3Object.response().lastModified() != null) {
             message.setHeader(AWS2S3Constants.LAST_MODIFIED, s3Object.response().lastModified());
             long ts = s3Object.response().lastModified().getEpochSecond() * 1000;
-            message.setHeader(Exchange.MESSAGE_TIMESTAMP, ts);
+            message.setHeader(AWS2S3Constants.MESSAGE_TIMESTAMP, ts);
         }
 
         /*
diff --git a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
index 33544be..e5692e5 100644
--- a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
+++ b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/AWS2S3Endpoint.java
@@ -41,7 +41,8 @@ import software.amazon.awssdk.services.s3.model.PutBucketPolicyRequest;
  * Store and retrieve objects from AWS S3 Storage Service using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.2.0", scheme = "aws2-s3", title = "AWS S3 Storage Service",
-             syntax = "aws2-s3://bucketNameOrArn", category = { Category.CLOUD, Category.FILE })
+             syntax = "aws2-s3://bucketNameOrArn", category = { Category.CLOUD, Category.FILE },
+             headersClass = AWS2S3Constants.class)
 public class AWS2S3Endpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(AWS2S3Endpoint.class);
diff --git a/components/camel-aws/camel-aws2-ses/src/generated/resources/org/apache/camel/component/aws2/ses/aws2-ses.json b/components/camel-aws/camel-aws2-ses/src/generated/resources/org/apache/camel/component/aws2/ses/aws2-ses.json
index 46c20d7..ac3e387 100644
--- a/components/camel-aws/camel-aws2-ses/src/generated/resources/org/apache/camel/component/aws2/ses/aws2-ses.json
+++ b/components/camel-aws/camel-aws2-ses/src/generated/resources/org/apache/camel/component/aws2/ses/aws2-ses.json
@@ -23,8 +23,8 @@
   },
   "componentProperties": {
     "amazonSESClient": { "kind": "property", "displayName": "Amazon SESClient", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.ses.SesClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "To use the AmazonSimpleEmailService as the client" },
-    "bcc": { "kind": "property", "displayName": "Bcc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination blind carbon copy (bcc) email address. Can be overriden with 'CamelAwsSesBcc' header." },
-    "cc": { "kind": "property", "displayName": "Cc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination carbon copy (cc) email address. Can be overriden with 'CamelAwsSesCc' header." },
+    "bcc": { "kind": "property", "displayName": "Bcc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination blind carbon copy (bcc) email address. Can be overridden with 'CamelAwsSesBcc' header." },
+    "cc": { "kind": "property", "displayName": "Cc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination carbon copy (cc) email address. Can be overridden with 'CamelAwsSesCc' header." },
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.aws2.ses.Ses2Configuration", "deprecated": false, "autowired": false, "secret": false, "description": "component configuration" },
     "configurationSet": { "kind": "property", "displayName": "Configuration Set", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set the configuration set to send with every request. Override it with 'CamelAwsSesConfigurationSet' header." },
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during star [...]
@@ -36,7 +36,7 @@
     "replyToAddresses": { "kind": "property", "displayName": "Reply To Addresses", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated reply-to email address(es) for the message, override it using 'CamelAwsSesReplyToAddresses [...]
     "returnPath": { "kind": "property", "displayName": "Return Path", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "The email address to which bounce notifications are to be forwarded, override it using 'CamelAwsSesReturnPath' header." },
     "subject": { "kind": "property", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "The subject which is used if the message header 'CamelAwsSesSubject' is not present." },
-    "to": { "kind": "property", "displayName": "To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination email address. Can be overriden with 'CamelAwsSesTo' header." },
+    "to": { "kind": "property", "displayName": "To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination email address. Can be overridden with 'CamelAwsSesTo' header." },
     "trustAllCertificates": { "kind": "property", "displayName": "Trust All Certificates", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "If we want to trust all certificates in case of overriding the endpoint" },
     "uriEndpointOverride": { "kind": "property", "displayName": "Uri Endpoint Override", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option" },
     "useDefaultCredentialsProvider": { "kind": "property", "displayName": "Use Default Credentials Provider", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set whether the Ses client should expect to load credentials through a d [...]
@@ -44,11 +44,23 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsSesFrom": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sender's email address." },
+    "CamelAwsSesMessageId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SES message ID." },
+    "CamelAwsSesReplyToAddresses": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The reply-to email address(es) for the message." },
+    "CamelAwsSesReturnPath": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The email address to which bounce notifications are to be forwarded." },
+    "CamelAwsSesSubject": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The subject of the message." },
+    "CamelAwsSesTo": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "List of comma separated destination email address." },
+    "CamelAwsSesCc": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "List of comma separated destination carbon copy (cc) email address." },
+    "CamelAwsSesBcc": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "List of comma separated destination blind carbon copy (bcc) email address." },
+    "CamelAwsSesHtmlEmail": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The flag to show if email content is HTML." },
+    "CamelAwsSesConfigurationSet": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "TThe configuration set to send." }
+  },
   "properties": {
     "from": { "kind": "path", "displayName": "From", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "The sender's email address." },
     "amazonSESClient": { "kind": "parameter", "displayName": "Amazon SESClient", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.ses.SesClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "To use the AmazonSimpleEmailService as the client" },
-    "bcc": { "kind": "parameter", "displayName": "Bcc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination blind carbon copy (bcc) email address. Can be overriden with 'CamelAwsSesBcc' header." },
-    "cc": { "kind": "parameter", "displayName": "Cc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination carbon copy (cc) email address. Can be overriden with 'CamelAwsSesCc' header." },
+    "bcc": { "kind": "parameter", "displayName": "Bcc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination blind carbon copy (bcc) email address. Can be overridden with 'CamelAwsSesBcc' header." },
+    "cc": { "kind": "parameter", "displayName": "Cc", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination carbon copy (cc) email address. Can be overridden with 'CamelAwsSesCc' header." },
     "configurationSet": { "kind": "parameter", "displayName": "Configuration Set", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set the configuration set to send with every request. Override it with 'CamelAwsSesConfigurationSet' header." },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during sta [...]
     "overrideEndpoint": { "kind": "parameter", "displayName": "Override Endpoint", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpo [...]
@@ -59,7 +71,7 @@
     "replyToAddresses": { "kind": "parameter", "displayName": "Reply To Addresses", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated reply-to email address(es) for the message, override it using 'CamelAwsSesReplyToAddresse [...]
     "returnPath": { "kind": "parameter", "displayName": "Return Path", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "The email address to which bounce notifications are to be forwarded, override it using 'CamelAwsSesReturnPath' header." },
     "subject": { "kind": "parameter", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "The subject which is used if the message header 'CamelAwsSesSubject' is not present." },
-    "to": { "kind": "parameter", "displayName": "To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination email address. Can be overriden with 'CamelAwsSesTo' header." },
+    "to": { "kind": "parameter", "displayName": "To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "List of comma separated destination email address. Can be overridden with 'CamelAwsSesTo' header." },
     "trustAllCertificates": { "kind": "parameter", "displayName": "Trust All Certificates", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "If we want to trust all certificates in case of overriding the endpoint" },
     "uriEndpointOverride": { "kind": "parameter", "displayName": "Uri Endpoint Override", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option" },
     "useDefaultCredentialsProvider": { "kind": "parameter", "displayName": "Use Default Credentials Provider", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.ses.Ses2Configuration", "configurationField": "configuration", "description": "Set whether the Ses client should expect to load credentials through a  [...]
diff --git a/components/camel-aws/camel-aws2-ses/src/main/docs/aws2-ses-component.adoc b/components/camel-aws/camel-aws2-ses/src/main/docs/aws2-ses-component.adoc
index 0751981..3fa2f5b 100644
--- a/components/camel-aws/camel-aws2-ses/src/main/docs/aws2-ses-component.adoc
+++ b/components/camel-aws/camel-aws2-ses/src/main/docs/aws2-ses-component.adoc
@@ -66,33 +66,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the SES producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSesFrom` |`String` |The sender's email address.
-
-|`CamelAwsSesTo` |`List<String>` |The destination(s) for this email.
-
-|`CamelAwsSesSubject` |`String` |The subject of the message.
-
-|`CamelAwsSesReplyToAddresses` |`List<String>` |The reply-to email address(es) for the message.
-
-|`CamelAwsSesReturnPath` |`String` |The email address to which bounce notifications are to be forwarded.
-
-|`CamelAwsSesHtmlEmail` |`Boolean` |The flag to show if email content is HTML.
-|=======================================================================
-
-=== Message headers set by the SES producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSesMessageId` |`String` |The Amazon SES message ID.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced SesClient configuration
 
diff --git a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Configuration.java b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Configuration.java
index e7dbd81..dd664ab 100644
--- a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Configuration.java
+++ b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Configuration.java
@@ -106,7 +106,7 @@ public class Ses2Configuration implements Cloneable {
     }
 
     /**
-     * List of comma separated destination email address. Can be overriden with 'CamelAwsSesTo' header.
+     * List of comma separated destination email address. Can be overridden with 'CamelAwsSesTo' header.
      */
     public void setTo(String to) {
         this.to = to;
@@ -117,7 +117,8 @@ public class Ses2Configuration implements Cloneable {
     }
 
     /**
-     * List of comma separated destination carbon copy (cc) email address. Can be overriden with 'CamelAwsSesCc' header.
+     * List of comma separated destination carbon copy (cc) email address. Can be overridden with 'CamelAwsSesCc'
+     * header.
      */
     public void setCc(String cc) {
         this.cc = cc;
@@ -128,8 +129,8 @@ public class Ses2Configuration implements Cloneable {
     }
 
     /**
-     * List of comma separated destination blind carbon copy (bcc) email address. Can be overriden with 'CamelAwsSesBcc'
-     * header.
+     * List of comma separated destination blind carbon copy (bcc) email address. Can be overridden with
+     * 'CamelAwsSesBcc' header.
      */
     public void setBcc(String bcc) {
         this.bcc = bcc;
diff --git a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Constants.java b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Constants.java
index 2bb6cf7..fb67d77 100644
--- a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Constants.java
+++ b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Constants.java
@@ -16,19 +16,31 @@
  */
 package org.apache.camel.component.aws2.ses;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS SES component
  */
 public interface Ses2Constants {
 
+    @Metadata(description = "The sender's email address.", javaType = "String")
     String FROM = "CamelAwsSesFrom";
+    @Metadata(description = "The Amazon SES message ID.", javaType = "String")
     String MESSAGE_ID = "CamelAwsSesMessageId";
+    @Metadata(description = "The reply-to email address(es) for the message.", javaType = "List<String>")
     String REPLY_TO_ADDRESSES = "CamelAwsSesReplyToAddresses";
+    @Metadata(description = "The email address to which bounce notifications are to be forwarded.", javaType = "String")
     String RETURN_PATH = "CamelAwsSesReturnPath";
+    @Metadata(description = "The subject of the message.", javaType = "String")
     String SUBJECT = "CamelAwsSesSubject";
+    @Metadata(description = "List of comma separated destination email address.", javaType = "String")
     String TO = "CamelAwsSesTo";
+    @Metadata(description = "List of comma separated destination carbon copy (cc) email address.", javaType = "String")
     String CC = "CamelAwsSesCc";
+    @Metadata(description = "List of comma separated destination blind carbon copy (bcc) email address.", javaType = "String")
     String BCC = "CamelAwsSesBcc";
+    @Metadata(description = "The flag to show if email content is HTML.", javaType = "Boolean")
     String HTML_EMAIL = "CamelAwsSesHtmlEmail";
+    @Metadata(description = "TThe configuration set to send.", javaType = "String")
     String CONFIGURATION_SET = "CamelAwsSesConfigurationSet";
 }
diff --git a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Endpoint.java b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Endpoint.java
index 9676805..4044f1e 100644
--- a/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Endpoint.java
+++ b/components/camel-aws/camel-aws2-ses/src/main/java/org/apache/camel/component/aws2/ses/Ses2Endpoint.java
@@ -32,7 +32,7 @@ import software.amazon.awssdk.services.ses.SesClient;
  * Send e-mails through AWS SES service using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-ses", title = "AWS Simple Email Service (SES)", syntax = "aws2-ses:from",
-             producerOnly = true, category = { Category.CLOUD, Category.MAIL })
+             producerOnly = true, category = { Category.CLOUD, Category.MAIL }, headersClass = Ses2Constants.class)
 public class Ses2Endpoint extends DefaultEndpoint {
 
     private SesClient sesClient;
diff --git a/components/camel-aws/camel-aws2-sns/src/generated/resources/org/apache/camel/component/aws2/sns/aws2-sns.json b/components/camel-aws/camel-aws2-sns/src/generated/resources/org/apache/camel/component/aws2/sns/aws2-sns.json
index ca0162f..e7e78cb 100644
--- a/components/camel-aws/camel-aws2-sns/src/generated/resources/org/apache/camel/component/aws2/sns/aws2-sns.json
+++ b/components/camel-aws/camel-aws2-sns/src/generated/resources/org/apache/camel/component/aws2/sns/aws2-sns.json
@@ -47,6 +47,11 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sns.Sns2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sns.Sns2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsSnsMessageId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message ID." },
+    "CamelAwsSnsSubject": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message subject. If not set, the subject from the\n`SnsConfiguration` is used." },
+    "CamelAwsSnsMessageStructure": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message structure to use such as json." }
+  },
   "properties": {
     "topicNameOrArn": { "kind": "path", "displayName": "Topic Name Or Arn", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Topic name or ARN" },
     "amazonSNSClient": { "kind": "parameter", "displayName": "Amazon SNSClient", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "software.amazon.awssdk.services.sns.SnsClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.aws2.sns.Sns2Configuration", "configurationField": "configuration", "description": "To use the AmazonSNS as the client" },
diff --git a/components/camel-aws/camel-aws2-sns/src/main/docs/aws2-sns-component.adoc b/components/camel-aws/camel-aws2-sns/src/main/docs/aws2-sns-component.adoc
index 364e1d8..4192663 100644
--- a/components/camel-aws/camel-aws2-sns/src/main/docs/aws2-sns-component.adoc
+++ b/components/camel-aws/camel-aws2-sns/src/main/docs/aws2-sns-component.adoc
@@ -72,24 +72,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers evaluated by the SNS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSnsSubject` |`String` |The Amazon SNS message subject. If not set, the subject from the
-`SnsConfiguration` is used.
-|=======================================================================
-
-=== Message headers set by the SNS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSnsMessageId` |`String` |The Amazon SNS message ID.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced AmazonSNS configuration
 
diff --git a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
index 80b9912..61e49ae 100644
--- a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
+++ b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
@@ -16,13 +16,20 @@
  */
 package org.apache.camel.component.aws2.sns;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS SNS module
  */
 public interface Sns2Constants {
 
+    @Metadata(description = "The Amazon SNS message ID.", javaType = "String")
     String MESSAGE_ID = "CamelAwsSnsMessageId";
+    @Metadata(description = "The Amazon SNS message subject. If not set, the subject from the\n" +
+                            "`SnsConfiguration` is used.",
+              javaType = "String")
     String SUBJECT = "CamelAwsSnsSubject";
+    @Metadata(description = "The message structure to use such as json.", javaType = "String")
     String MESSAGE_STRUCTURE = "CamelAwsSnsMessageStructure";
     String MESSAGE_GROUP_ID_PROPERTY = "CamelAwsSnsMessageGroupId";
 }
diff --git a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Endpoint.java b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Endpoint.java
index 1d38fa7..ad584ad 100644
--- a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Endpoint.java
+++ b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Endpoint.java
@@ -55,7 +55,7 @@ import software.amazon.awssdk.services.sns.model.Topic;
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-sns", title = "AWS Simple Notification System (SNS)",
              syntax = "aws2-sns:topicNameOrArn", producerOnly = true,
-             category = { Category.CLOUD, Category.MESSAGING, Category.MOBILE })
+             category = { Category.CLOUD, Category.MESSAGING, Category.MOBILE }, headersClass = Sns2Constants.class)
 public class Sns2Endpoint extends DefaultEndpoint implements HeaderFilterStrategyAware {
 
     private static final Logger LOG = LoggerFactory.getLogger(Sns2Endpoint.class);
diff --git a/components/camel-aws/camel-aws2-sqs/src/generated/resources/org/apache/camel/component/aws2/sqs/aws2-sqs.json b/components/camel-aws/camel-aws2-sqs/src/generated/resources/org/apache/camel/component/aws2/sqs/aws2-sqs.json
index fb5ae51..0f2667a 100644
--- a/components/camel-aws/camel-aws2-sqs/src/generated/resources/org/apache/camel/component/aws2/sqs/aws2-sqs.json
+++ b/components/camel-aws/camel-aws2-sqs/src/generated/resources/org/apache/camel/component/aws2/sqs/aws2-sqs.json
@@ -67,6 +67,16 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sqs.Sqs2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sqs.Sqs2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsSqsAttributes": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<MessageSystemAttributeName, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A map of the attributes requested in ReceiveMessage to their respective values." },
+    "CamelAwsSqsMessageAttributes": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<String, MessageAttributeValue>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SQS message attributes." },
+    "CamelAwsSqsMD5OfBody": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The MD5 checksum of the Amazon SQS message." },
+    "CamelAwsSqsMessageId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SQS message ID." },
+    "CamelAwsSqsReceiptHandle": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SQS message receipt handle." },
+    "CamelAwsSqsDelaySeconds": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The delay seconds that the Amazon SQS message can be\nsee by others." },
+    "CamelAwsSqsPrefix": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A string to use for filtering the list results." },
+    "CamelAwsSqsOperation": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" }
+  },
   "properties": {
     "queueNameOrArn": { "kind": "path", "displayName": "Queue Name Or Arn", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Queue name or ARN" },
     "amazonAWSHost": { "kind": "parameter", "displayName": "Amazon AWSHost", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "amazonaws.com", "configurationClass": "org.apache.camel.component.aws2.sqs.Sqs2Configuration", "configurationField": "configuration", "description": "The hostname of the Amazon AWS cloud." },
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/docs/aws2-sqs-component.adoc b/components/camel-aws/camel-aws2-sqs/src/main/docs/aws2-sqs-component.adoc
index 950b1ac..695dd7f 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/docs/aws2-sqs-component.adoc
+++ b/components/camel-aws/camel-aws2-sqs/src/main/docs/aws2-sqs-component.adoc
@@ -77,34 +77,9 @@ You have the possibility of avoiding the usage of explicit static credentials, b
 
 For more information about this you can look at https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html[AWS credentials documentation]
 
-=== Message headers set by the SQS producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSqsMD5OfBody` |`String` |The MD5 checksum of the Amazon SQS message.
-
-|`CamelAwsSqsMessageId` |`String` |The Amazon SQS message ID.
-
-|`CamelAwsSqsDelaySeconds` |`Integer` |The delay seconds that the Amazon SQS message can be
-see by others.
-|=======================================================================
-
-=== Message headers set by the SQS consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsSqsMD5OfBody` |`String` |The MD5 checksum of the Amazon SQS message.
-
-|`CamelAwsSqsMessageId` |`String` |The Amazon SQS message ID. 
-
-|`CamelAwsSqsReceiptHandle` |`String` |The Amazon SQS message receipt handle.
-
-|`CamelAwsSqsMessageAttributes` |`Map<String, String>` |The Amazon SQS message attributes.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced AmazonSQS configuration
 
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
index 95faf15..f87141c 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
@@ -16,19 +16,34 @@
  */
 package org.apache.camel.component.aws2.sqs;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS SQS module
  */
 public interface Sqs2Constants {
 
+    @Metadata(label = "consumer",
+              description = "A map of the attributes requested in ReceiveMessage to their respective values.",
+              javaType = "Map<MessageSystemAttributeName, String>")
     String ATTRIBUTES = "CamelAwsSqsAttributes";
+    @Metadata(label = "consumer", description = "The Amazon SQS message attributes.",
+              javaType = "Map<String, MessageAttributeValue>")
     String MESSAGE_ATTRIBUTES = "CamelAwsSqsMessageAttributes";
+    @Metadata(description = "The MD5 checksum of the Amazon SQS message.", javaType = "String")
     String MD5_OF_BODY = "CamelAwsSqsMD5OfBody";
+    @Metadata(description = "The Amazon SQS message ID.", javaType = "String")
     String MESSAGE_ID = "CamelAwsSqsMessageId";
+    @Metadata(description = "The Amazon SQS message receipt handle.", javaType = "String")
     String RECEIPT_HANDLE = "CamelAwsSqsReceiptHandle";
+    @Metadata(label = "producer", description = "The delay seconds that the Amazon SQS message can be\n" +
+                                                "see by others.",
+              javaType = "Integer")
     String DELAY_HEADER = "CamelAwsSqsDelaySeconds";
     String MESSAGE_GROUP_ID_PROPERTY = "CamelAwsMessageGroupId";
+    @Metadata(description = "A string to use for filtering the list results.", javaType = "String")
     String SQS_QUEUE_PREFIX = "CamelAwsSqsPrefix";
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String SQS_OPERATION = "CamelAwsSqsOperation";
     String SQS_DELETE_FILTERED = "CamelAwsSqsDeleteFiltered";
 }
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Endpoint.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Endpoint.java
index 0589321..0b9bc59 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Endpoint.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Endpoint.java
@@ -57,7 +57,8 @@ import software.amazon.awssdk.services.sqs.model.SqsException;
  * Send and receive messages to/from AWS SQS service using AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-sqs", title = "AWS Simple Queue Service (SQS)",
-             syntax = "aws2-sqs:queueNameOrArn", category = { Category.CLOUD, Category.MESSAGING })
+             syntax = "aws2-sqs:queueNameOrArn", category = { Category.CLOUD, Category.MESSAGING },
+             headersClass = Sqs2Constants.class)
 public class Sqs2Endpoint extends ScheduledPollEndpoint implements HeaderFilterStrategyAware {
 
     private static final Logger LOG = LoggerFactory.getLogger(Sqs2Endpoint.class);
diff --git a/components/camel-aws/camel-aws2-sts/src/generated/resources/org/apache/camel/component/aws2/sts/aws2-sts.json b/components/camel-aws/camel-aws2-sts/src/generated/resources/org/apache/camel/component/aws2/sts/aws2-sts.json
index 549e78e..5266eab 100644
--- a/components/camel-aws/camel-aws2-sts/src/generated/resources/org/apache/camel/component/aws2/sts/aws2-sts.json
+++ b/components/camel-aws/camel-aws2-sts/src/generated/resources/org/apache/camel/component/aws2/sts/aws2-sts.json
@@ -39,6 +39,12 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sts.STS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.sts.STS2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsStsOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" },
+    "CamelAwsStsRoleArn": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the role to assume." },
+    "CamelAwsStsRoleSessionName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An identifier for the assumed role session." },
+    "CamelAwsStsFederatedName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the federated user." }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.sts.STS2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "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 producer may otherwise fail during sta [...]
diff --git a/components/camel-aws/camel-aws2-sts/src/main/docs/aws2-sts-component.adoc b/components/camel-aws/camel-aws2-sts/src/main/docs/aws2-sts-component.adoc
index 0bd23c0..cd4fd43 100644
--- a/components/camel-aws/camel-aws2-sts/src/main/docs/aws2-sts-component.adoc
+++ b/components/camel-aws/camel-aws2-sts/src/main/docs/aws2-sts-component.adoc
@@ -69,7 +69,11 @@ You have the possibility of avoiding the usage of explicit static credentials, b
  - Web Identity Token from AWS STS.
  - The shared credentials and config files.
  - Amazon ECS container credentials - loaded from the Amazon ECS if the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set.
- - Amazon EC2 Instance profile credentials. 
+ - Amazon EC2 Instance profile credentials.
+
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === STS Producer operations
 
@@ -77,7 +81,7 @@ Camel-AWS STS component provides the following operation on the producer side:
 
 - assumeRole
 - getSessionToken
-- getFedeationToken
+- getFederationToken
 
 == Producer Examples
 
diff --git a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
index f95ab66..ea486a6 100644
--- a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
+++ b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
@@ -16,13 +16,19 @@
  */
 package org.apache.camel.component.aws2.sts;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS2 STS module
  */
 public interface STS2Constants {
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsStsOperation";
+    @Metadata(description = "The Amazon Resource Name (ARN) of the role to assume.", javaType = "String")
     String ROLE_ARN = "CamelAwsStsRoleArn";
+    @Metadata(description = "An identifier for the assumed role session.", javaType = "String")
     String ROLE_SESSION_NAME = "CamelAwsStsRoleSessionName";
+    @Metadata(description = "The name of the federated user.", javaType = "String")
     String FEDERATED_NAME = "CamelAwsStsFederatedName";
     String ACCESS_KEY_ID = "CamelAwsStsAccessKeyId";
     String SECRET_KEY_ID = "CamelAwsStsSecretKey";
diff --git a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Endpoint.java b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Endpoint.java
index e6e4391..5796752 100644
--- a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Endpoint.java
+++ b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Endpoint.java
@@ -34,7 +34,8 @@ import software.amazon.awssdk.services.sts.StsClient;
 @UriEndpoint(firstVersion = "3.5.0", scheme = "aws2-sts", title = "AWS Security Token Service (STS)",
              syntax = "aws2-sts:label", producerOnly = true, category = {
                      Category.CLOUD,
-                     Category.MANAGEMENT })
+                     Category.MANAGEMENT },
+             headersClass = STS2Constants.class)
 public class STS2Endpoint extends DefaultEndpoint {
 
     private StsClient stsClient;
diff --git a/components/camel-aws/camel-aws2-translate/src/generated/resources/org/apache/camel/component/aws2/translate/aws2-translate.json b/components/camel-aws/camel-aws2-translate/src/generated/resources/org/apache/camel/component/aws2/translate/aws2-translate.json
index 2febb32..8c6724a 100644
--- a/components/camel-aws/camel-aws2-translate/src/generated/resources/org/apache/camel/component/aws2/translate/aws2-translate.json
+++ b/components/camel-aws/camel-aws2-translate/src/generated/resources/org/apache/camel/component/aws2/translate/aws2-translate.json
@@ -42,6 +42,12 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.translate.Translate2Configuration", "configurationField": "configuration", "description": "Amazon AWS Access Key" },
     "secretKey": { "kind": "property", "displayName": "Secret Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.aws2.translate.Translate2Configuration", "configurationField": "configuration", "description": "Amazon AWS Secret Key" }
   },
+  "headers": {
+    "CamelAwsTranslateSourceLanguage": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The text source language" },
+    "CamelAwsTranslateTargetLanguage": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The text target language" },
+    "CamelAwsTranslateTerminologyNames": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The terminologies to use" },
+    "CamelAwsTranslateOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform" }
+  },
   "properties": {
     "label": { "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.translate.Translate2Configuration", "configurationField": "configuration", "description": "Logical name" },
     "autodetectSourceLanguage": { "kind": "parameter", "displayName": "Autodetect Source Language", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.aws2.translate.Translate2Configuration", "configurationField": "configuration", "description": "Being able to autodetect the source language" },
diff --git a/components/camel-aws/camel-aws2-translate/src/main/docs/aws2-translate-component.adoc b/components/camel-aws/camel-aws2-translate/src/main/docs/aws2-translate-component.adoc
index 7bc8531..9c3cc7e 100644
--- a/components/camel-aws/camel-aws2-translate/src/main/docs/aws2-translate-component.adoc
+++ b/components/camel-aws/camel-aws2-translate/src/main/docs/aws2-translate-component.adoc
@@ -64,23 +64,11 @@ You have the possibility of avoiding the usage of explicit static credentials, b
  - Web Identity Token from AWS STS.
  - The shared credentials and config files.
  - Amazon ECS container credentials - loaded from the Amazon ECS if the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set.
- - Amazon EC2 Instance profile credentials. 
+ - Amazon EC2 Instance profile credentials.
 
-
-=== Message headers evaluated by the Translate producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelAwsTranslateSourceLanguage` |`String` |The text source language
-
-|`CamelAwsTranslateTargetLanguage` |`String` |The text target language
-
-|`CamelAwsTranslateTerminologyNames` |`String` |The terminologies to use
-
-|`CamelAwsTranslateOperation` |`String` |The operation to perform
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Translate Producer operations
 
diff --git a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Constants.java b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Constants.java
index ed01d8c..2fe9a92 100644
--- a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Constants.java
+++ b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Constants.java
@@ -16,12 +16,18 @@
  */
 package org.apache.camel.component.aws2.translate;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel AWS2 Translate module
  */
 public interface Translate2Constants {
+    @Metadata(description = "The text source language", javaType = "String")
     String SOURCE_LANGUAGE = "CamelAwsTranslateSourceLanguage";
+    @Metadata(description = "The text target language", javaType = "String")
     String TARGET_LANGUAGE = "CamelAwsTranslateTargetLanguage";
+    @Metadata(description = "The terminologies to use", javaType = "Collection<String>")
     String TERMINOLOGY_NAMES = "CamelAwsTranslateTerminologyNames";
+    @Metadata(description = "The operation we want to perform", javaType = "String")
     String OPERATION = "CamelAwsTranslateOperation";
 }
diff --git a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Endpoint.java b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Endpoint.java
index 4e0c92e..075f43e 100644
--- a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Endpoint.java
+++ b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2Endpoint.java
@@ -32,7 +32,7 @@ import software.amazon.awssdk.services.translate.TranslateClient;
  * Translate texts using AWS Translate and AWS SDK version 2.x.
  */
 @UriEndpoint(firstVersion = "3.1.0", scheme = "aws2-translate", title = "AWS Translate", syntax = "aws2-translate:label",
-             producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT })
+             producerOnly = true, category = { Category.CLOUD, Category.MANAGEMENT }, headersClass = Translate2Constants.class)
 public class Translate2Endpoint extends ScheduledPollEndpoint {
 
     private TranslateClient translateClient;
diff --git a/components/camel-azure/camel-azure-eventhubs/src/generated/resources/org/apache/camel/component/azure/eventhubs/azure-eventhubs.json b/components/camel-azure/camel-azure-eventhubs/src/generated/resources/org/apache/camel/component/azure/eventhubs/azure-eventhubs.json
index 5dedd45..8039758 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/generated/resources/org/apache/camel/component/azure/eventhubs/azure-eventhubs.json
+++ b/components/camel-azure/camel-azure-eventhubs/src/generated/resources/org/apache/camel/component/azure/eventhubs/azure-eventhubs.json
@@ -43,6 +43,15 @@
     "sharedAccessKey": { "kind": "property", "displayName": "Shared Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.eventhubs.EventHubsConfiguration", "configurationField": "configuration", "description": "The generated value for the SharedAccessName" },
     "sharedAccessName": { "kind": "property", "displayName": "Shared Access Name", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.eventhubs.EventHubsConfiguration", "configurationField": "configuration", "description": "The name you chose for your EventHubs SAS keys" }
   },
+  "headers": {
+    "CamelAzureEventHubsPartitionKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) Overrides the hashing key to be provided for the batch of events, which instructs the Event Hubs service to map this key to a specific partition.\n(consumer) It sets the partition hashing key if it was set when originally publishing  [...]
+    "CamelAzureEventHubsPartitionId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) Overrides the identifier of the Event Hub partition that the events will be sent to.\n(consumer) It sets the partition id of the Event Hub." },
+    "CamelAzureEventHubsOffset": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "It sets the offset of the event when it was received from the associated Event Hub partition. This is only present on a received `EventData`." },
+    "CamelAzureEventHubsEnqueuedTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Instant", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "It sets the instant, in UTC, of when the event was enqueued in the Event Hub partition. This is only present on a received `EventData`." },
+    "CamelAzureEventHubsSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "It sets the sequence number assigned to the event when it was enqueued in the associated Event Hub partition. This is unique for every message received in the Event Hub partition. This is only present on a received `EventData`." },
+    "CamelAzureEventHubsMetadata": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The set of free-form event properties which may be used for passing metadata associated with the event with the event body during Event Hubs operations." },
+    "CamelMessageTimestamp": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the message" }
+  },
   "properties": {
     "namespace": { "kind": "path", "displayName": "Namespace", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.eventhubs.EventHubsConfiguration", "configurationField": "configuration", "description": "EventHubs namespace created in Azure Portal" },
     "eventHubName": { "kind": "path", "displayName": "Event Hub Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.eventhubs.EventHubsConfiguration", "configurationField": "configuration", "description": "EventHubs name under a specific namcespace" },
diff --git a/components/camel-azure/camel-azure-eventhubs/src/main/docs/azure-eventhubs-component.adoc b/components/camel-azure/camel-azure-eventhubs/src/main/docs/azure-eventhubs-component.adoc
index 16f4c73..b958e2e 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/main/docs/azure-eventhubs-component.adoc
+++ b/components/camel-azure/camel-azure-eventhubs/src/main/docs/azure-eventhubs-component.adoc
@@ -105,27 +105,9 @@ from("azure-eventhubs:/camel/camelHub?sharedAccessName=SASaccountName&sharedAcce
   .to("file://queuedirectory");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the component producer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelAzureEventHubsPartitionKey`| `EventHubsConstants.PARTITION_KEY`|`String`| Overrides the hashing key to be provided for the batch of events, which instructs the Event Hubs service to map this key to a specific partition.
-|`CamelAzureEventHubsPartitionId`| `EventHubsConstants.PARTITION_ID`|`String`| Overrides the identifier of the Event Hub partition that the {link EventData events} will be sent to.
-|=======================================================================
-
-
-=== Message headers set by the component consumer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelAzureEventHubsPartitionKey`| `EventHubsConstants.PARTITION_KEY`|`String`| It sets the partition hashing key if it was set when originally publishing the event. If it exists, this value was used to compute a hash to select a partition to send the message to. This is only present on a received {@link EventData}.
-|`CamelAzureEventHubsPartitionId`| `EventHubsConstants.PARTITION_ID`|`String`| It sets the partition id of the Event Hub.
-|`CamelAzureEventHubsOffset`| `EventHubsConstants.OFFSET`|`Long`| It sets the offset of the event when it was received from the associated Event Hub partition. This is only present on a received {@link EventData}.
-|`CamelAzureEventHubsEnqueuedTime`| `EventHubsConstants.ENQUEUED_TIME`|`Instant`| It sets the instant, in UTC, of when the event was enqueued in the Event Hub partition. This is only present on a received {@link EventData}.
-|`CamelAzureEventHubsSequenceNumber`| `EventHubsConstants.SEQUENCE_NUMBER`|`Long`| It sets the sequence number assigned to the event when it was enqueued in the associated Event Hub partition. This is unique for every message received in the Event Hub partition. This is only present on a received {@link EventData}.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Message body type
 The component's producer expects the data in the message body to be in `byte[]`. This allows the user to utilize Camel TypeConverter to marshal/unmarshal data with ease.
diff --git a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConstants.java b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConstants.java
index cea1a32..889377d 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConstants.java
+++ b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConstants.java
@@ -16,16 +16,45 @@
  */
 package org.apache.camel.component.azure.eventhubs;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public final class EventHubsConstants {
     private static final String HEADER_PREFIX = "CamelAzureEventHubs";
     // common headers, set by consumer and evaluated by producer
+    @Metadata(description = "(producer) Overrides the hashing key to be provided for the batch of events, which instructs the Event Hubs service to map this key to a specific partition.\n"
+                            +
+                            "(consumer) It sets the partition hashing key if it was set when originally publishing the event. "
+                            +
+                            "If it exists, this value was used to compute a hash to select a partition to send the message to. This is only present on a received `EventData`.",
+              javaType = "String")
     public static final String PARTITION_KEY = HEADER_PREFIX + "PartitionKey";
+    @Metadata(description = "(producer) Overrides the identifier of the Event Hub partition that the events will be sent to.\n"
+                            +
+                            "(consumer) It sets the partition id of the Event Hub.",
+              javaType = "String")
     public static final String PARTITION_ID = HEADER_PREFIX + "PartitionId";
     // headers set by the consumer only
+    @Metadata(label = "consumer",
+              description = "It sets the offset of the event when it was received from the associated Event Hub partition. This is only present on a received `EventData`.",
+              javaType = "Integer")
     public static final String OFFSET = HEADER_PREFIX + "Offset";
+    @Metadata(label = "consumer",
+              description = "It sets the instant, in UTC, of when the event was enqueued in the Event Hub partition. This is only present on a received `EventData`.",
+              javaType = "Instant")
     public static final String ENQUEUED_TIME = HEADER_PREFIX + "EnqueuedTime";
+    @Metadata(label = "consumer",
+              description = "It sets the sequence number assigned to the event when it was enqueued in the associated Event Hub partition. "
+                            +
+                            "This is unique for every message received in the Event Hub partition. This is only present on a received `EventData`.",
+              javaType = "Long")
     public static final String SEQUENCE_NUMBER = HEADER_PREFIX + "SequenceNumber";
+    @Metadata(label = "consumer",
+              description = "The set of free-form event properties which may be used for passing metadata associated with the event with the event body during Event Hubs operations.",
+              javaType = "Map<String, Object>")
     public static final String METADATA = HEADER_PREFIX + "Metadata";
+    @Metadata(label = "consumer", description = "The timestamp of the message", javaType = "long")
+    public static final String MESSAGE_TIMESTAMP = Exchange.MESSAGE_TIMESTAMP;
 
     private EventHubsConstants() {
     }
diff --git a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
index 8411707..ef32303 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
+++ b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsConsumer.java
@@ -87,7 +87,7 @@ public class EventHubsConsumer extends DefaultConsumer {
         message.setHeader(EventHubsConstants.SEQUENCE_NUMBER, eventContext.getEventData().getSequenceNumber());
         if (eventContext.getEventData().getEnqueuedTime() != null) {
             long ts = eventContext.getEventData().getEnqueuedTime().getEpochSecond() * 1000;
-            message.setHeader(Exchange.MESSAGE_TIMESTAMP, ts);
+            message.setHeader(EventHubsConstants.MESSAGE_TIMESTAMP, ts);
         }
         message.setHeader(EventHubsConstants.METADATA, eventContext.getEventData().getProperties());
 
diff --git a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsEndpoint.java b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsEndpoint.java
index 6699aa1..b6a2bfa 100644
--- a/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsEndpoint.java
+++ b/components/camel-azure/camel-azure-eventhubs/src/main/java/org/apache/camel/component/azure/eventhubs/EventHubsEndpoint.java
@@ -30,7 +30,8 @@ import org.apache.camel.support.DefaultEndpoint;
  */
 @UriEndpoint(firstVersion = "3.5.0", scheme = "azure-eventhubs", title = "Azure Event Hubs",
              syntax = "azure-eventhubs:namespace/eventHubName", category = {
-                     Category.CLOUD, Category.MESSAGING })
+                     Category.CLOUD, Category.MESSAGING },
+             headersClass = EventHubsConstants.class)
 public class EventHubsEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-azure/camel-azure-servicebus/src/generated/resources/org/apache/camel/component/azure/servicebus/azure-servicebus.json b/components/camel-azure/camel-azure-servicebus/src/generated/resources/org/apache/camel/component/azure/servicebus/azure-servicebus.json
index f36b10e..a88210a 100644
--- a/components/camel-azure/camel-azure-servicebus/src/generated/resources/org/apache/camel/component/azure/servicebus/azure-servicebus.json
+++ b/components/camel-azure/camel-azure-servicebus/src/generated/resources/org/apache/camel/component/azure/servicebus/azure-servicebus.json
@@ -48,6 +48,33 @@
     "fullyQualifiedNamespace": { "kind": "property", "displayName": "Fully Qualified Namespace", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.servicebus.ServiceBusConfiguration", "configurationField": "configuration", "description": "Fully Qualified Namespace of the service bus" },
     "tokenCredential": { "kind": "property", "displayName": "Token Credential", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "com.azure.core.credential.TokenCredential", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.servicebus.ServiceBusConfiguration", "configurationField": "configuration", "description": "A TokenCredential for Azure AD authentication, implemented in com.azure [...]
   },
+  "headers": {
+    "CamelAzureServiceBusApplicationProperties": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the set of free-form `ServiceBusReceivedMessage` properties which may be used for passing metadata  associated with the `ServiceBusReceivedMessagel during Service Bus operations." },
+    "CamelAzureServiceBusContentType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the content type of the message." },
+    "CamelAzureServiceBusCorrelationId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets a correlation identifier." },
+    "CamelAzureServiceBusDeadLetterErrorDescription": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the description for a message that has been dead-lettered." },
+    "CamelAzureServiceBusDeadLetterReason": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the reason a message was dead-lettered." },
+    "CamelAzureServiceBusDeadLetterSource": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the name of the queue or subscription that this message was enqueued on, before it was dead-lettered." },
+    "CamelAzureServiceBusDeliveryCount": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the number of the times this message was delivered to clients." },
+    "CamelAzureServiceBusEnqueuedSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the enqueued sequence number assigned to a message by Service Bus." },
+    "CamelAzureServiceBusEnqueuedTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the datetime at which this message was enqueued in Azure Service Bus." },
+    "CamelAzureServiceBusExpiresAt": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the datetime at which this message will expire." },
+    "CamelAzureServiceBusLockToken": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the lock token for the current message." },
+    "CamelAzureServiceBusLockedUntil": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the datetime at which the lock of this message expires." },
+    "CamelAzureServiceBusMessageId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the identifier for the message." },
+    "CamelAzureServiceBusPartitionKey": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the partition key for sending a message to a partitioned entity." },
+    "CamelAzureServiceBusRawAmqpMessage": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "AmqpAnnotatedMessage", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The representation of message as defined by AMQP protocol." },
+    "CamelAzureServiceBusReplyTo": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the address of an entity to send replies to." },
+    "CamelAzureServiceBusReplyToSessionId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets or sets a session identifier augmenting the ReplyTo address." },
+    "CamelAzureServiceBusSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the unique number assigned to a message by Service Bus." },
+    "CamelAzureServiceBusSessionId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the session id of the message." },
+    "CamelAzureServiceBusSubject": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the subject for the message." },
+    "CamelAzureServiceBusTimeToLive": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the duration before this message expires." },
+    "CamelAzureServiceBusTo": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets the \"to\" address." },
+    "CamelAzureServiceBusScheduledEnqueueTime": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer)Overrides the OffsetDateTime at which the message should appear in the Service Bus queue or topic. (consumer) Gets the scheduled enqueue time of this message." },
+    "CamelAzureServiceBusServiceBusTransactionContext": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "ServiceBusTransactionContext", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Overrides the transaction in service. This object just contains transaction id." },
+    "CamelAzureServiceBusProducerOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.servicebus.ServiceBusProducerOperationDefinition", "enum": [ "sendMessages", "scheduleMessages" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Overrides the desired operation to be used in the producer." }
+  },
   "properties": {
     "topicOrQueueName": { "kind": "path", "displayName": "Topic Or Queue Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.servicebus.ServiceBusConfiguration", "configurationField": "configuration", "description": "Selected topic name or the queue name, that is depending on serviceBusType config. For example if service [...]
     "amqpRetryOptions": { "kind": "parameter", "displayName": "Amqp Retry Options", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "com.azure.core.amqp.AmqpRetryOptions", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.servicebus.ServiceBusConfiguration", "configurationField": "configuration", "description": "Sets the retry options for Service Bus clients. If not specified, the defau [...]
diff --git a/components/camel-azure/camel-azure-servicebus/src/main/docs/azure-servicebus-component.adoc b/components/camel-azure/camel-azure-servicebus/src/main/docs/azure-servicebus-component.adoc
index f82c6f2..c5e83d5 100644
--- a/components/camel-azure/camel-azure-servicebus/src/main/docs/azure-servicebus-component.adoc
+++ b/components/camel-azure/camel-azure-servicebus/src/main/docs/azure-servicebus-component.adoc
@@ -56,47 +56,9 @@ This allows camel route to consume and produce events asynchronously without blo
 
 == Usage
 
-=== Message headers evaluated by the component producer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelAzureServiceBusScheduledEnqueueTime`| `ServiceBusConstants.SCHEDULED_ENQUEUE_TIME`|`OffsetDateTime`| Overrides the OffsetDateTime at which the message should appear in the Service Bus queue or topic.
-|`CamelAzureServiceBusServiceBusTransactionContext`| `ServiceBusConstants.SERVICE_BUS_TRANSACTION_CONTEXT`|`ServiceBusTransactionContext`| Overrides the transaction in service. This object just contains transaction id.
-|`CamelAzureServiceBusProducerOperation`| `ServiceBusConstants.PRODUCER_OPERATION`|`ServiceBusProducerOperationDefinition`| Overrides the desired operation to be used in the producer.
-|=======================================================================
-
-
-=== Message headers set by the component consumer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelAzureServiceBusApplicationProperties`| `ServiceBusConstants.APPLICATION_PROPERTIES`|`Map<String, Object>`| Gets the set of free-form {@link ServiceBusReceivedMessage} properties which may be used for passing metadata  associated with the {@link ServiceBusReceivedMessage} during Service Bus operations.
-|`CamelAzureServiceBusContentType`| `ServiceBusConstants.CONTENT_TYPE`|`String`| Gets the content type of the message.
-|`CamelAzureServiceBusMessageId`| `ServiceBusConstants.MESSAGE_ID`|`String`| Gets the identifier for the message.
-|`CamelAzureServiceBusCorrelationId`| `ServiceBusConstants.CORRELATION_ID`|`String`| Gets a correlation identifier.
-|`CamelAzureServiceBusDeadLetterErrorDescription`| `ServiceBusConstants.DEAD_LETTER_ERROR_DESCRIPTION`|`String`| Gets the description for a message that has been dead-lettered.
-|`CamelAzureServiceBusDeadLetterReason`| `ServiceBusConstants.DEAD_LETTER_REASON`|`String`| Gets the reason a message was dead-lettered.
-|`CamelAzureServiceBusDeadLetterSource`| `ServiceBusConstants.DEAD_LETTER_SOURCE`|`String`| Gets the name of the queue or subscription that this message was enqueued on, before it was dead-lettered.
-|`CamelAzureServiceBusDeliveryCount`| `ServiceBusConstants.DELIVERY_COUNT`|`long`| Gets the number of the times this message was delivered to clients.
-|`CamelAzureServiceBusScheduledEnqueueTime`| `ServiceBusConstants.SCHEDULED_ENQUEUE_TIME`|`OffsetDateTime`| Gets the scheduled enqueue time of this message.
-|`CamelAzureServiceBusEnqueuedSequenceNumber`| `ServiceBusConstants.ENQUEUED_SEQUENCE_NUMBER`|`long`| Gets the enqueued sequence number assigned to a message by Service Bus.
-|`CamelAzureServiceBusEnqueuedTime`| `ServiceBusConstants.ENQUEUED_TIME`|`OffsetDateTime`| Gets the datetime at which this message was enqueued in Azure Service Bus.
-|`CamelAzureServiceBusExpiresAt`| `ServiceBusConstants.EXPIRES_AT`|`OffsetDateTime`| Gets the datetime at which this message will expire.
-|`CamelAzureServiceBusLockToken`| `ServiceBusConstants.LOCK_TOKEN`|`String`| Gets the lock token for the current message.
-|`CamelAzureServiceBusLockedUntil`| `ServiceBusConstants.LOCKED_UNTIL`|`OffsetDateTime`| Gets the datetime at which the lock of this message expires.
-|`CamelAzureServiceBusPartitionKey`| `ServiceBusConstants.PARTITION_KEY`|`String`| Gets the partition key for sending a message to a partitioned entity.
-|`CamelAzureServiceBusRawAmqpMessage`| `ServiceBusConstants.RAW_AMQP_MESSAGE`|`AmqpAnnotatedMessage`| The representation of message as defined by AMQP protocol.
-|`CamelAzureServiceBusReplyTo`| `ServiceBusConstants.REPLY_TO`|`String`| Gets the address of an entity to send replies to.
-|`CamelAzureServiceBusReplyToSessionId`| `ServiceBusConstants.REPLY_TO_SESSION_ID`|`String`| Gets or sets a session identifier augmenting the {@link #getReplyTo() ReplyTo} address.
-|`CamelAzureServiceBusSequenceNumber`| `ServiceBusConstants.SEQUENCE_NUMBER`|`long`| Gets the unique number assigned to a message by Service Bus.
-|`CamelAzureServiceBusSessionId`| `ServiceBusConstants.SESSION_ID`|`String`| Gets the session id of the message.
-|`CamelAzureServiceBusSubject`| `ServiceBusConstants.SUBJECT`|`String`| Gets the subject for the message.
-|`CamelAzureServiceBusTimeToLive`| `ServiceBusConstants.TIME_TO_LIVE`|`Duration`| Gets the duration before this message expires.
-|`CamelAzureServiceBusTimeTo`| `ServiceBusConstants.TO`|`String`| Gets the "to" address.
-|=======================================================================
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Message Body
 In the producer, this component accepts message body of `String` type or `List<String>` to send batch messages.
diff --git a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConstants.java b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConstants.java
index 0e98675..832fe2a 100644
--- a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConstants.java
+++ b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusConstants.java
@@ -16,39 +16,86 @@
  */
 package org.apache.camel.component.azure.servicebus;
 
+import org.apache.camel.spi.Metadata;
+
 public final class ServiceBusConstants {
     private static final String HEADER_PREFIX = "CamelAzureServiceBus";
     // common headers, set by consumer and evaluated by producer
 
     // headers set by the consumer only
+    @Metadata(label = "consumer",
+              description = "Gets the set of free-form `ServiceBusReceivedMessage` properties which may be used for passing metadata  associated with the `ServiceBusReceivedMessagel during Service Bus operations.",
+              javaType = "Map<String, Object>")
     public static final String APPLICATION_PROPERTIES = HEADER_PREFIX + "ApplicationProperties";
+    @Metadata(label = "consumer", description = "Gets the content type of the message.", javaType = "String")
     public static final String CONTENT_TYPE = HEADER_PREFIX + "ContentType";
+    @Metadata(label = "consumer", description = "Gets a correlation identifier.", javaType = "String")
     public static final String CORRELATION_ID = HEADER_PREFIX + "CorrelationId";
+    @Metadata(label = "consumer", description = "Gets the description for a message that has been dead-lettered.",
+              javaType = "String")
     public static final String DEAD_LETTER_ERROR_DESCRIPTION = HEADER_PREFIX + "DeadLetterErrorDescription";
+    @Metadata(label = "consumer", description = "Gets the reason a message was dead-lettered.", javaType = "String")
     public static final String DEAD_LETTER_REASON = HEADER_PREFIX + "DeadLetterReason";
+    @Metadata(label = "consumer",
+              description = "Gets the name of the queue or subscription that this message was enqueued on, before it was dead-lettered.",
+              javaType = "String")
     public static final String DEAD_LETTER_SOURCE = HEADER_PREFIX + "DeadLetterSource";
+    @Metadata(label = "consumer", description = "Gets the number of the times this message was delivered to clients.",
+              javaType = "long")
     public static final String DELIVERY_COUNT = HEADER_PREFIX + "DeliveryCount";
+    @Metadata(label = "consumer", description = "Gets the enqueued sequence number assigned to a message by Service Bus.",
+              javaType = "long")
     public static final String ENQUEUED_SEQUENCE_NUMBER = HEADER_PREFIX + "EnqueuedSequenceNumber";
+    @Metadata(label = "consumer", description = "Gets the datetime at which this message was enqueued in Azure Service Bus.",
+              javaType = "OffsetDateTime")
     public static final String ENQUEUED_TIME = HEADER_PREFIX + "EnqueuedTime";
+    @Metadata(label = "consumer", description = "Gets the datetime at which this message will expire.",
+              javaType = "OffsetDateTime")
     public static final String EXPIRES_AT = HEADER_PREFIX + "ExpiresAt";
+    @Metadata(label = "consumer", description = "Gets the lock token for the current message.", javaType = "String")
     public static final String LOCK_TOKEN = HEADER_PREFIX + "LockToken";
+    @Metadata(label = "consumer", description = "Gets the datetime at which the lock of this message expires.",
+              javaType = "OffsetDateTime")
     public static final String LOCKED_UNTIL = HEADER_PREFIX + "LockedUntil";
+    @Metadata(label = "consumer", description = "Gets the identifier for the message.", javaType = "String")
     public static final String MESSAGE_ID = HEADER_PREFIX + "MessageId";
+    @Metadata(label = "consumer", description = "Gets the partition key for sending a message to a partitioned entity.",
+              javaType = "String")
     public static final String PARTITION_KEY = HEADER_PREFIX + "PartitionKey";
+    @Metadata(label = "consumer", description = "The representation of message as defined by AMQP protocol.",
+              javaType = "AmqpAnnotatedMessage")
     public static final String RAW_AMQP_MESSAGE = HEADER_PREFIX + "RawAmqpMessage";
+    @Metadata(label = "consumer", description = "Gets the address of an entity to send replies to.", javaType = "String")
     public static final String REPLY_TO = HEADER_PREFIX + "ReplyTo";
+    @Metadata(label = "consumer", description = "Gets or sets a session identifier augmenting the ReplyTo address.",
+              javaType = "String")
     public static final String REPLY_TO_SESSION_ID = HEADER_PREFIX + "ReplyToSessionId";
+    @Metadata(label = "consumer", description = "Gets the unique number assigned to a message by Service Bus.",
+              javaType = "long")
     public static final String SEQUENCE_NUMBER = HEADER_PREFIX + "SequenceNumber";
+    @Metadata(label = "consumer", description = "Gets the session id of the message.", javaType = "String")
     public static final String SESSION_ID = HEADER_PREFIX + "SessionId";
+    @Metadata(label = "consumer", description = "Gets the subject for the message.", javaType = "String")
     public static final String SUBJECT = HEADER_PREFIX + "Subject";
+    @Metadata(label = "consumer", description = "Gets the duration before this message expires.", javaType = "Duration")
     public static final String TIME_TO_LIVE = HEADER_PREFIX + "TimeToLive";
+    @Metadata(label = "consumer", description = "Gets the \"to\" address.", javaType = "String")
     public static final String TO = HEADER_PREFIX + "To";
 
     // headers set by consumer and evaluated by producer
+    @Metadata(description = "(producer)Overrides the OffsetDateTime at which the message should appear in the Service Bus queue or topic. "
+                            +
+                            "(consumer) Gets the scheduled enqueue time of this message.",
+              javaType = "OffsetDateTime")
     public static final String SCHEDULED_ENQUEUE_TIME = HEADER_PREFIX + "ScheduledEnqueueTime";
 
     // headers evaluated by the producer
+    @Metadata(label = "producer",
+              description = "Overrides the transaction in service. This object just contains transaction id.",
+              javaType = "ServiceBusTransactionContext")
     public static final String SERVICE_BUS_TRANSACTION_CONTEXT = HEADER_PREFIX + "ServiceBusTransactionContext";
+    @Metadata(label = "producer", description = "Overrides the desired operation to be used in the producer.",
+              javaType = "org.apache.camel.component.azure.servicebus.ServiceBusProducerOperationDefinition")
     public static final String PRODUCER_OPERATION = HEADER_PREFIX + "ProducerOperation";
 
     private ServiceBusConstants() {
diff --git a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusEndpoint.java b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusEndpoint.java
index 45ad355..043f78a 100644
--- a/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusEndpoint.java
+++ b/components/camel-azure/camel-azure-servicebus/src/main/java/org/apache/camel/component/azure/servicebus/ServiceBusEndpoint.java
@@ -30,7 +30,8 @@ import org.apache.camel.support.DefaultEndpoint;
  */
 @UriEndpoint(firstVersion = "3.12.0", scheme = "azure-servicebus", title = "Azure ServiceBus",
              syntax = "azure-servicebus:topicOrQueueName", category = {
-                     Category.CLOUD, Category.MESSAGING })
+                     Category.CLOUD, Category.MESSAGING },
+             headersClass = ServiceBusConstants.class)
 public class ServiceBusEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
index 6e8378d..e8a7dd5 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
+++ b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
@@ -54,6 +54,70 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob services" },
     "sourceBlobAccessKey": { "kind": "property", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an accessKey for th [...]
   },
+  "headers": {
+    "CamelAzureStorageBlobOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "stageBlockBlobList", "commitBlobBlockList", "getBlobBlockList", "createAppendBlob", "commitApp [...]
+    "CamelAzureStorageBlobHttpHeaders": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "BlobHttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob) Additional parameters for a set of operations." },
+    "CamelAzureStorageBlobETag": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The E Tag of the blob" },
+    "CamelAzureStorageBlobCreationTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Creation time of the blob." },
+    "CamelAzureStorageBlobLastModified": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Datetime when the blob was last modified." },
+    "CamelAzureStorageBlobContentType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content type specified for the blob." },
+    "CamelAzureStorageBlobContentMD5": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "byte[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (Most operations related to upload blob) Most operations related to upload blob|An MD5 hash of the block content. This hash is used to verify the integrity of the block during transport. When this header is specified, the storage ser [...]
+    "CamelAzureStorageBlobContentEncoding": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content encoding specified for the blob." },
+    "CamelAzureStorageBlobContentDisposition": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content disposition specified for the blob." },
+    "CamelAzureStorageBlobContentLanguage": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content language specified for the blob." },
+    "CamelAzureStorageBlobCacheControl": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Cache control specified for the blob." },
+    "CamelAzureStorageBlobBlobSize": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The size of the blob." },
+    "CamelAzureStorageBlobSequenceNumber": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (createPageBlob) A user-controlled value that you can use to track requests. The value of the sequence number must be between 0 and 2^63 - 1. The default value is 0.\n(consumer) The current sequence number for a page blob." },
+    "CamelAzureStorageBlobBlobType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobType", "enum": [ "blockblob", "appendblob", "pageblob" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of the blob." },
+    "CamelAzureStorageBlobLeaseStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "com.azure.storage.blob.models.LeaseStatusType", "enum": [ "locked", "unlocked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Status of the lease on the blob." },
+    "CamelAzureStorageBlobLeaseState": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "com.azure.storage.blob.models.LeaseStateType", "enum": [ "available", "leased", "expired", "breaking", "broken" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "State of the lease on the blob." },
+    "CamelAzureStorageBlobLeaseDuration": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "com.azure.storage.blob.models.LeaseDurationType", "enum": [ "infinite", "fixed" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Type of lease on the blob." },
+    "CamelAzureStorageBlobCopyId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Identifier of the last copy operation performed on the blob." },
+    "CamelAzureStorageBlobCopyStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "com.azure.storage.blob.models.CopyStatusType", "enum": [ "pending", "success", "aborted", "failed" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Status of the last copy operation performed on the blob." },
+    "CamelAzureStorageBlobCopySource": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Source of the last copy operation performed on the blob." },
+    "CamelAzureStorageBlobCopyProgress": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Progress of the last copy operation performed on the blob." },
+    "CamelAzureStorageBlobCopyCompletionTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Datetime when the last copy operation on the blob completed." },
+    "CamelAzureStorageBlobCopyStatusDescription": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Description of the last copy operation on the blob." },
+    "CamelAzureStorageBlobCopyDestinationSnapshot": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Snapshot identifier of the last incremental copy snapshot for the blob." },
+    "CamelAzureStorageBlobIsServerEncrypted": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Flag indicating if the blob's content is encrypted on the server." },
+    "CamelAzureStorageBlobIsIncrementalCopy": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Flag indicating if the blob was incrementally copied." },
+    "CamelAzureStorageBlobAccessTier": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "AccessTier", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (uploadBlockBlob, commitBlobBlockList) Defines values for AccessTier.\n(consumer) Access tier of the blob." },
+    "CamelAzureStorageBlobIsAccessTierInferred": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Flag indicating if the access tier of the blob was inferred from properties of the blob." },
+    "CamelAzureStorageBlobArchiveStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "ArchiveStatus", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Archive status of the blob." },
+    "CamelAzureStorageBlobaccessTierChangeTime": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Datetime when the access tier of the blob last changed." },
+    "CamelAzureStorageBlobMetadata": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Map<String,String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (Operations related to container and blob) Operations related to container and blob| Metadata to associate with the container or blob.\n(consumer) Additional metadata associated with the blob." },
+    "CamelAzureStorageBlobCommittedBlockCount": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Number of blocks committed to an append blob" },
+    "CamelAzureStorageBlobAppendOffset": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The offset at which the block was committed to the block blob." },
+    "CamelAzureStorageBlobRawHttpHeaders": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "HttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Returns non-parsed httpHeaders that can be used by the user." },
+    "CamelAzureStorageBlobFileName": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The downloaded filename from the operation `downloadBlobToFile`." },
+    "CamelAzureStorageBlobDownloadLink": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The download link generated by `downloadLink` operation." },
+    "CamelAzureStorageBlobListBlobOptions": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "ListBlobsOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobs) Defines options available to configure the behavior of a call to listBlobsFlatSegment on a `BlobContainerClient` object." },
+    "CamelAzureStorageBlobListDetails": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "BlobListDetails", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobs) The details for listing specific blobs" },
+    "CamelAzureStorageBlobPrefix": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobs,getBlob) Filters the results to return only blobs whose names begin with the specified prefix. May be null to return all blobs." },
+    "CamelAzureStorageBlobRegex": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobs,getBlob) Filters the results to return only blobs whose names match the specified regular expression. May be null to return all. If both prefix and regex are set, regex takes the priority and prefix is ignored." },
+    "CamelAzureStorageBlobMaxResultsPerPage": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobs) Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not specify maxResultsPerPage or specifies a value greater than 5,000, the server will return up to 5,000 items." },
+    "CamelAzureStorageBlobTimeout": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(All) An optional timeout value beyond which a `RuntimeException` will be raised." },
+    "CamelAzureStorageBlobPublicAccessType": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "PublicAccessType", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(createContainer) Specifies how the data in this container is available to the public. Pass `null` for no public access." },
+    "CamelAzureStorageBlobRequestCondition": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "BlobRequestConditions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(Operations related to container and blob) This contains values which will restrict the successful operation of a variety of requests to the conditions present. These conditions are entirely optional." },
+    "CamelAzureStorageBlobBlobContainerName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(Operations related to container and blob) Override\/set the container name on the exchange headers." },
+    "CamelAzureStorageBlobBlobName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(Operations related to blob) Override\/set the blob name on the exchange headers." },
+    "CamelAzureStorageBlobFileDir": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(downloadBlobToFile) The file directory where the downloaded blobs will be saved to." },
+    "CamelAzureStorageBlobPageBlobRange": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "PageRange", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(Operations related to page blob) A `PageRange` object. Given that pages must be aligned with 512-byte boundaries, the start offset must be a modulus of 512 and the end offset must be a modulus of 512 - 1. Examples of valid byte [...]
+    "CamelAzureStorageBlobPageBlobSize": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(createPageBlob, resizePageBlob) Specifies the maximum size for the page blob, up to 8 TB. The page blob size must be aligned to a 512-byte boundary." },
+    "CamelAzureStorageBlobCommitBlobBlockListLater": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(stageBlockBlobList) When is set to `true`, the staged blocks will not be committed directly." },
+    "CamelAzureStorageBlobBlockListType": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(getBlobBlockList) Specifies which type of blocks to return." },
+    "CamelAzureStorageBlobCreateAppendBlob": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(commitAppendBlob) When is set to `true`, the append blocks will be created when committing append blocks." },
+    "CamelAzureStorageBlobCreatePageBlob": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(uploadPageBlob) When is set to `true`, the page blob will be created when uploading page blob." },
+    "CamelAzureStorageBlobDeleteSnapshotsOptionType": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.DeleteSnapshotsOptionType", "enum": [ "include", "only" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(deleteBlob) Specifies the behavior for deleting the snapshots on this blob. `Include` will delete the base blob and all snapshots. `Only`  [...]
+    "CamelAzureStorageBlobListBlobContainersOptions": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "ListBlobContainersOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listBlobContainers) A `ListBlobContainersOptions` which specifies what data should be returned by the service." },
+    "CamelAzureStorageBlobParallelTransferOptions": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "ParallelTransferOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(downloadBlobToFile) `ParallelTransferOptions` to use to download to file. Number of parallel transfers parameter is ignored." },
+    "CamelAzureStorageBlobDownloadLinkExpiration": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(downloadLink) Override the default expiration (millis) of URL download link." },
+    "CamelAzureStorageBlobSourceBlobAccountName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(copyBlob) The source blob account name to be used as source account name in a copy blob operation" },
+    "CamelAzureStorageBlobSourceBlobContainerName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(copyBlob) The source blob container name to be used as source container name in a copy blob operation" },
+    "CamelAzureStorageBlobChangeFeedStartTime": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(getChangeFeed) It filters the results to return events approximately after the start time. Note: A few events belonging to the previous hour can also be returned. A few events belonging to this hour can be missing; t [...]
+    "CamelAzureStorageBlobChangeFeedEndTime": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(getChangeFeed) It filters  the results to return events approximately before the end time. Note: A few events belonging to the next hour can also be returned. A few events belonging to this hour can be missing; to ensu [...]
+    "CamelAzureStorageBlobContext": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Context", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(getChangeFeed) This gives additional context that is passed through the Http pipeline during the service call." }
+  },
   "properties": {
     "accountName": { "kind": "path", "displayName": "Account Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure account name to be used for authentication with azure blob services" },
     "containerName": { "kind": "path", "displayName": "Container Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The blob container name" },
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc b/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
index 2112520..269551c 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
@@ -89,85 +89,9 @@ from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accessKey=yo
 to("file://blobdirectory");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the component producer
-[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Operations |Description
-
-|`CamelAzureStorageBlobTimeout` |`BlobConstants.TIMEOUT`|`Duration`|All|An optional timeout value beyond which a {@link RuntimeException} will be raised.
-|`CamelAzureStorageBlobMetadata`|`BlobConstants.METADATA`|`Map<String,String>`|Operations related to container and blob| Metadata to associate with the container or blob.
-|`CamelAzureStorageBlobPublicAccessType`|`BlobConstants.PUBLIC_ACCESS_TYPE`|`PublicAccessType`|`createContainer`|Specifies how the data in this container is available to the public. Pass `null` for no public access.
-|`CamelAzureStorageBlobRequestCondition`|`BlobConstants.BLOB_REQUEST_CONDITION`|`BlobRequestConditions`|Operations related to container and blob|This contains values which will restrict the successful operation of a variety of requests to the conditions present. These conditions are entirely optional.
-|`CamelAzureStorageBlobListDetails`|`BlobConstants.BLOB_LIST_DETAILS`|`BlobListDetails`|`listBlobs`|The details for listing specific blobs
-|`CamelAzureStorageBlobPrefix`|`BlobConstants.PREFIX`|`String`|`listBlobs`,`getBlob`|Filters the results to return only blobs whose names begin with the specified prefix. May be null to return all blobs.
-|`CamelAzureStorageBlobMaxResultsPerPage`|`BlobConstants.MAX_RESULTS_PER_PAGE`|`Integer`|`listBlobs`| Specifies the maximum number of blobs to return, including all BlobPrefix elements. If the request does not specify maxResultsPerPage or specifies a value greater than 5,000, the server will return up to 5,000 items.
-|`CamelAzureStorageBlobListBlobOptions`|`BlobConstants.LIST_BLOB_OPTIONS`|`ListBlobsOptions`|`listBlobs`|Defines options available to configure the behavior of a call to listBlobsFlatSegment on a {@link BlobContainerClient} object.
-|`CamelAzureStorageBlobHttpHeaders`|`BlobConstants.BLOB_HTTP_HEADERS`|`BlobHttpHeaders`|`uploadBlockBlob`, `commitBlobBlockList`, `createAppendBlob`, `createPageBlob`|  Additional parameters for a set of operations.
-|`CamelAzureStorageBlobAccessTier`|`BlobConstants.ACCESS_TIER`|`AccessTier`|`uploadBlockBlob`, `commitBlobBlockList`| Defines values for AccessTier.
-|`CamelAzureStorageBlobContentMD5`|`BlobConstants.CONTENT_MD5`|`byte[]`|Most operations related to upload blob|An MD5 hash of the block content. This hash is used to verify the integrity of the block during transport. When this header is specified, the storage service compares the hash of the content that has arrived with this header value. Note that this MD5 hash is not stored with the blob. If the two hashes do not match, the operation will fail.
-|`CamelAzureStorageBlobPageBlobRange`|`BlobConstants.PAGE_BLOB_RANGE`|`PageRange`|Operations related to page blob| A {@link PageRange} object. Given that pages must be aligned with 512-byte boundaries, the start offset must be a modulus of 512 and the end offset must be a modulus of 512 - 1. Examples of valid byte ranges are 0-511, 512-1023, etc.
-|`CamelAzureStorageBlobCommitBlobBlockListLater`|`BlobConstants.COMMIT_BLOCK_LIST_LATER`|`boolean`|`stageBlockBlobList`| When is set to `true`, the staged blocks will not be committed directly.
-|`CamelAzureStorageBlobCreateAppendBlob`|`BlobConstants.CREATE_APPEND_BLOB`|`boolean`|`commitAppendBlob`| When is set to `true`, the append blocks will be created when committing append blocks.
-|`CamelAzureStorageBlobCreatePageBlob`|`BlobConstants.CREATE_PAGE_BLOB`|`boolean`|`uploadPageBlob`| When is set to `true`, the page blob will be created when uploading page blob.
-|`CamelAzureStorageBlobBlockListType`|`BlobConstants.BLOCK_LIST_TYPE`|`BlockListType`|`getBlobBlockList`| Specifies which type of blocks to return.
-|`CamelAzureStorageBlobPageBlobSize`|`BlobConstants.PAGE_BLOB_SIZE`|`Long`|`createPageBlob`, `resizePageBlob`| Specifies the maximum size for the page blob, up to 8 TB. The page blob size must be aligned to a 512-byte boundary.
-|`CamelAzureStorageBlobSequenceNumber`|`BlobConstants.BLOB_SEQUENCE_NUMBER`|`Long`|`createPageBlob`|A user-controlled value that you can use to track requests. The value of the sequence number must be between 0 and 2^63 - 1.The default value is 0.
-|`CamelAzureStorageBlobDeleteSnapshotsOptionType`|`BlobConstants.DELETE_SNAPSHOT_OPTION_TYPE`|`DeleteSnapshotsOptionType`|`deleteBlob`| Specifies the behavior for deleting the snapshots on this blob. {@code Include} will delete the base blob and all snapshots. {@code Only} will delete only the snapshots. If a snapshot is being deleted, you must pass null.
-|`CamelAzureStorageBlobListBlobContainersOptions`|`BlobConstants.LIST_BLOB_CONTAINERS_OPTIONS`|`ListBlobContainersOptions`|`listBlobContainers`| A {@link ListBlobContainersOptions} which specifies what data should be returned by the service.
-|`CamelAzureStorageBlobParallelTransferOptions`|`BlobConstants.PARALLEL_TRANSFER_OPTIONS`|`ParallelTransferOptions`|`downloadBlobToFile`| {@link ParallelTransferOptions} to use to download to file. Number of parallel transfers parameter is ignored.
-|`CamelAzureStorageBlobFileDir`|`BlobConstants.FILE_DIR`|`String`|`downloadBlobToFile`|The file directory where the downloaded blobs will be saved to.
-|`CamelAzureStorageBlobDownloadLinkExpiration`|`BlobConstants.DOWNLOAD_LINK_EXPIRATION`|`Long`|`downloadLink`| Override the default expiration (millis) of URL download link.
-|`CamelAzureStorageBlobBlobName`|`BlobConstants.BLOB_NAME`|`String`|Operations related to blob| Override/set the blob name on the exchange headers.
-|`CamelAzureStorageBlobContainerName`|`BlobConstants.BLOB_CONTAINER_NAME`|`String`|Operations related to container and blob|Override/set the container name on the exchange headers.
-|`CamelAzureStorageBlobOperation`|`BlobConstants.BLOB_OPERATION`|`BlobOperationsDefinition`|All|Specify the producer operation to execute, please see the doc on this page related to producer operation.
-|`CamelAzureStorageBlobRegex`|`BlobConstants.REGEX`|`String`|`listBlobs`,`getBlob`|Filters the results to return only blobs whose names match the specified regular expression. May be null to return all. If both prefix and regex are set, regex takes the priority and prefix is ignored.
-|`CamelAzureStorageBlobChangeFeedStartTime`|`BlobConstants.CHANGE_FEED_START_TIME`|`OffsetDateTime`|`getChangeFeed`| It filters the results to return events approximately after the start time. Note: A few events belonging to the previous hour can also be returned. A few events belonging to this hour can be missing; to ensure all events from the hour are returned, round the start time down by an hour.
-|`CamelAzureStorageBlobChangeFeedEndTime`|`BlobConstants.CHANGE_FEED_END_TIME`|`OffsetDateTime`|`getChangeFeed`| It filters  the results to return events approximately before the end time. Note: A few events belonging to the next hour can also be returned. A few events belonging to this hour can be missing; to ensure all events from the hour are returned, round the end time up by an hour.
-|`CamelAzureStorageBlobChangeFeedContext`|`BlobConstants.CHANGE_FEED_CONTEXT`|`Context`|`getChangeFeed`| This gives additional context that is passed through the Http pipeline during the service call.
-|`CamelAzureStorageBlobSourceBlobAccountName`|`BlobConstants.SOURCE_BLOB_ACCOUNT_NAME`|`String`|`copyBlob`| The source blob account name to be used as source account name in a copy blob operation
-|`CamelAzureStorageBlobSourceBlobContainerName`|`BlobConstants.SOURCE_BLOB_CONTAINER_NAME`|`String`|`copyBlob`| The source blob container name to be used as source container name in a copy blob operation
-|=======================================================================
-
-=== Message headers set by either component producer or consumer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelAzureStorageBlobAccessTier`|`BlobConstants.ACCESS_TIER`|`AccessTier`| Access tier of the blob.
-|`CamelAzureStorageBlobAccessTierChangeTime`|`BlobConstants.ACCESS_TIER_CHANGE_TIME`|`OffsetDateTime`| Datetime when the access tier of the blob last changed.
-|`CamelAzureStorageBlobArchiveStatus`|`BlobConstants.ARCHIVE_STATUS`|`ArchiveStatus`|Archive status of the blob.
-|`CamelAzureStorageBlobCreationTime`|`BlobConstants.CREATION_TIME`|`OffsetDateTime`|Creation time of the blob.
-|`CamelAzureStorageBlobSequenceNumber`|`BlobConstants.BLOB_SEQUENCE_NUMBER`|`Long`|The current sequence number for a page blob.
-|`CamelAzureStorageBlobBlobSize`|`BlobConstants.BLOB_SIZE`|`long`|The size of the blob.
-|`CamelAzureStorageBlobBlobType`|`BlobConstants.BLOB_TYPE`|`BlobType`|The type of the blob.
-|`CamelAzureStorageBlobCacheControl`|`BlobConstants.CACHE_CONTROL`|`String`|Cache control specified for the blob.
-|`CamelAzureStorageBlobCommittedBlockCount`|`BlobConstants.COMMITTED_BLOCK_COUNT`|`Integer`|  Number of blocks committed to an append blob
-|`CamelAzureStorageBlobContentDisposition`|`BlobConstants.CONTENT_DISPOSITION`|`String`|Content disposition specified for the blob.
-|`CamelAzureStorageBlobContentEncoding`|`BlobConstants.CONTENT_ENCODING`|`String`|Content encoding specified for the blob.
-|`CamelAzureStorageBlobContentLanguage`|`BlobConstants.CONTENT_LANGUAGE`|`String`|Content language specified for the blob.
-|`CamelAzureStorageBlobContentMd5`|`BlobConstants.CONTENT_MD5`|`byte[]`|Content MD5 specified for the blob.
-|`CamelAzureStorageBlobContentType`|`BlobConstants.CONTENT_TYPE`|`String`|Content type specified for the blob.
-|`CamelAzureStorageBlobCopyCompletionTime`|`BlobConstants.COPY_COMPILATION_TIME`|`OffsetDateTime`|Datetime when the last copy operation on the blob completed.
-|`CamelAzureStorageBlobCopyDestinationSnapshot`|`BlobConstants.COPY_DESTINATION_SNAPSHOT`|`String`|Snapshot identifier of the last incremental copy snapshot for the blob.
-|`CamelAzureStorageBlobCopyId`|`BlobConstants.COPY_ID`|`String`|Identifier of the last copy operation performed on the blob.
-|`CamelAzureStorageBlobCopyProgress`|`BlobConstants.COPY_PROGRESS`|`String`|Progress of the last copy operation performed on the blob.
-|`CamelAzureStorageBlobCopySource`|`BlobConstants.COPY_SOURCE`|`String`|Source of the last copy operation performed on the blob.
-|`CamelAzureStorageBlobCopyStatus`|`BlobConstants.COPY_STATUS`|`CopyStatusType`|Status of the last copy operation performed on the blob.
-|`CamelAzureStorageBlobCopyStatusDescription` | `BlobConstants.COPY_STATUS_DESCRIPTION`|`String`|Description of the last copy operation on the blob.
-|`CamelAzureStorageBlobETag`|`BlobConstants.E_TAG`|`String`| The E Tag of the blob
-|`CamelAzureStorageBlobIsAccessTierInferred`|`BlobConstants.IS_ACCESS_TIER_INFRRRED`|`boolean`| Flag indicating if the access tier of the blob was inferred from properties of the blob.
-|`CamelAzureStorageBlobIsIncrementalCopy`|`BlobConstants.IS_INCREMENTAL_COPY`|`boolean`|Flag indicating if the blob was incrementally copied.
-|`CamelAzureStorageBlobIsServerEncrypted`|`BlobConstants.IS_SERVER_ENCRYPTED`|`boolean`|Flag indicating if the blob's content is encrypted on the server.
-|`CamelAzureStorageBlobLastModified`|`BlobConstants.LAST_MODIFIED`|`OffsetDateTime`|Datetime when the blob was last modified.
-|`CamelAzureStorageBlobLeaseDuration`|`BlobConstants.LEASE_DURATION`|`LeaseDurationType`|Type of lease on the blob.
-|`CamelAzureStorageBlobLeaseState`|`BlobConstants.LEASE_STATE`|`LeaseStateType`|State of the lease on the blob.
-|`CamelAzureStorageBlobLeaseStatus`|`BlobConstants.LEASE_STATUS`|`LeaseStatusType`|Status of the lease on the blob.
-|`CamelAzureStorageBlobMetadata`|`BlobConstants.METADATA`|`Map<String, String>`| Additional metadata associated with the blob.
-|`CamelAzureStorageBlobAppendOffset`|`BlobConstants.APPEND_OFFSET`|`String`| The offset at which the block was committed to the block blob.
-|`CamelAzureStorageBlobFileName`|`BlobConstants.FILE_NAME`|`String`|The downloaded filename from the operation `downloadBlobToFile`.
-|`CamelAzureStorageBlobDownloadLink`|`BlobConstants.DOWNLOAD_LINK`|`String`|The download link generated by `downloadLink` operation.
-|`CamelAzureStorageBlobRawHttpHeaders`|`BlobConstants.RAW_HTTP_HEADERS`|`HttpHeaders`|Returns non-parsed httpHeaders that can be used by the user.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced Azure Storage Blob configuration
 
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
index 5fb7691..ec068d8 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
@@ -16,77 +16,239 @@
  */
 package org.apache.camel.component.azure.storage.blob;
 
+import org.apache.camel.spi.Metadata;
+
 public final class BlobConstants {
     // constants
     public static final Long PAGE_BLOB_DEFAULT_SIZE = 512L;
     private static final String HEADER_PREFIX = "CamelAzureStorageBlob";
     // header names
+    @Metadata(label = "producer",
+              description = "(All) Specify the producer operation to execute, please see the doc on this page related to producer operation.",
+              javaType = "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition")
     public static final String BLOB_OPERATION = HEADER_PREFIX + "Operation";
+    @Metadata(label = "producer",
+              description = "(uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob) Additional parameters for a set of operations.",
+              javaType = "BlobHttpHeaders")
     public static final String BLOB_HTTP_HEADERS = HEADER_PREFIX + "HttpHeaders";
+    @Metadata(label = "consumer", description = "The E Tag of the blob", javaType = "String")
     public static final String E_TAG = HEADER_PREFIX + "ETag";
+    @Metadata(label = "consumer", description = "Creation time of the blob.", javaType = "OffsetDateTime")
     public static final String CREATION_TIME = HEADER_PREFIX + "CreationTime";
+    @Metadata(label = "consumer", description = "Datetime when the blob was last modified.", javaType = "OffsetDateTime")
     public static final String LAST_MODIFIED = HEADER_PREFIX + "LastModified";
+    @Metadata(label = "consumer", description = "Content type specified for the blob.", javaType = "String")
     public static final String CONTENT_TYPE = HEADER_PREFIX + "ContentType";
+    @Metadata(description = "(producer) (Most operations related to upload blob) Most operations related to upload blob|An MD5 hash of the block content. "
+                            +
+                            "This hash is used to verify the integrity of the block during transport. " +
+                            "When this header is specified, the storage service compares the hash of the content that has arrived with this header value. "
+                            +
+                            "Note that this MD5 hash is not stored with the blob. If the two hashes do not match, the operation will fail.\n"
+                            +
+                            "(consumer) Content MD5 specified for the blob.",
+              javaType = "byte[]")
     public static final String CONTENT_MD5 = HEADER_PREFIX + "ContentMD5";
+    @Metadata(label = "consumer", description = "Content encoding specified for the blob.", javaType = "String")
     public static final String CONTENT_ENCODING = HEADER_PREFIX + "ContentEncoding";
+    @Metadata(label = "consumer", description = "Content disposition specified for the blob.", javaType = "String")
     public static final String CONTENT_DISPOSITION = HEADER_PREFIX + "ContentDisposition";
+    @Metadata(label = "consumer", description = "Content language specified for the blob.", javaType = "String")
     public static final String CONTENT_LANGUAGE = HEADER_PREFIX + "ContentLanguage";
+    @Metadata(label = "consumer", description = "Cache control specified for the blob.", javaType = "String")
     public static final String CACHE_CONTROL = HEADER_PREFIX + "CacheControl";
+    @Metadata(label = "consumer", description = "The size of the blob.", javaType = "long")
     public static final String BLOB_SIZE = HEADER_PREFIX + "BlobSize";
+    @Metadata(description = "(producer) (createPageBlob) A user-controlled value that you can use to track requests. " +
+                            "The value of the sequence number must be between 0 and 2^63 - 1. The default value is 0.\n" +
+                            "(consumer) The current sequence number for a page blob.",
+              javaType = "Long")
     public static final String BLOB_SEQUENCE_NUMBER = HEADER_PREFIX + "SequenceNumber";
+    @Metadata(label = "consumer", description = "The type of the blob.",
+              javaType = "org.apache.camel.component.azure.storage.blob.BlobType")
     public static final String BLOB_TYPE = HEADER_PREFIX + "BlobType";
+    @Metadata(label = "consumer", description = "Status of the lease on the blob.",
+              javaType = "com.azure.storage.blob.models.LeaseStatusType")
     public static final String LEASE_STATUS = HEADER_PREFIX + "LeaseStatus";
+    @Metadata(label = "consumer", description = "State of the lease on the blob.",
+              javaType = "com.azure.storage.blob.models.LeaseStateType")
     public static final String LEASE_STATE = HEADER_PREFIX + "LeaseState";
+    @Metadata(label = "consumer", description = "Type of lease on the blob.",
+              javaType = "com.azure.storage.blob.models.LeaseDurationType")
     public static final String LEASE_DURATION = HEADER_PREFIX + "LeaseDuration";
+    @Metadata(label = "consumer", description = "Identifier of the last copy operation performed on the blob.",
+              javaType = "String")
     public static final String COPY_ID = HEADER_PREFIX + "CopyId";
+    @Metadata(label = "consumer", description = "Status of the last copy operation performed on the blob.",
+              javaType = "com.azure.storage.blob.models.CopyStatusType")
     public static final String COPY_STATUS = HEADER_PREFIX + "CopyStatus";
+    @Metadata(label = "consumer", description = "Source of the last copy operation performed on the blob.", javaType = "String")
     public static final String COPY_SOURCE = HEADER_PREFIX + "CopySource";
+    @Metadata(label = "consumer", description = "Progress of the last copy operation performed on the blob.",
+              javaType = "String")
     public static final String COPY_PROGRESS = HEADER_PREFIX + "CopyProgress";
+    @Metadata(label = "consumer", description = "Datetime when the last copy operation on the blob completed.",
+              javaType = "OffsetDateTime")
     public static final String COPY_COMPILATION_TIME = HEADER_PREFIX + "CopyCompletionTime";
+    @Metadata(label = "consumer", description = "Description of the last copy operation on the blob.", javaType = "String")
     public static final String COPY_STATUS_DESCRIPTION = HEADER_PREFIX + "CopyStatusDescription";
+    @Metadata(label = "consumer", description = "Snapshot identifier of the last incremental copy snapshot for the blob.",
+              javaType = "String")
     public static final String COPY_DESTINATION_SNAPSHOT = HEADER_PREFIX + "CopyDestinationSnapshot";
+    @Metadata(label = "consumer", description = "Flag indicating if the blob's content is encrypted on the server.",
+              javaType = "boolean")
     public static final String IS_SERVER_ENCRYPTED = HEADER_PREFIX + "IsServerEncrypted";
+    @Metadata(label = "consumer", description = "Flag indicating if the blob was incrementally copied.", javaType = "boolean")
     public static final String IS_INCREMENTAL_COPY = HEADER_PREFIX + "IsIncrementalCopy";
+    @Metadata(description = "(producer) (uploadBlockBlob, commitBlobBlockList) Defines values for AccessTier.\n"
+                            + "(consumer) Access tier of the blob.",
+              javaType = "AccessTier")
     public static final String ACCESS_TIER = HEADER_PREFIX + "AccessTier";
+    @Metadata(label = "consumer",
+              description = "Flag indicating if the access tier of the blob was inferred from properties of the blob.",
+              javaType = "boolean")
     public static final String IS_ACCESS_TIER_INFRRRED = HEADER_PREFIX + "IsAccessTierInferred";
+    @Metadata(label = "consumer", description = "Archive status of the blob.", javaType = "ArchiveStatus")
     public static final String ARCHIVE_STATUS = HEADER_PREFIX + "ArchiveStatus";
     public static final String ENCRYPTION_KEY_SHA_256 = HEADER_PREFIX + "EncryptionKeySha256";
     public static final String ENCRYPTION_SCOPE = HEADER_PREFIX + "EncryptionScope";
+    @Metadata(label = "consumer", description = "Datetime when the access tier of the blob last changed.",
+              javaType = "OffsetDateTime")
     public static final String ACCESS_TIER_CHANGE_TIME = HEADER_PREFIX + "accessTierChangeTime";
+    @Metadata(description = "(producer) (Operations related to container and blob) Operations related to container and blob| Metadata to associate with the container or blob.\n"
+                            + "(consumer) Additional metadata associated with the blob.",
+              javaType = "Map<String,String>")
     public static final String METADATA = HEADER_PREFIX + "Metadata";
+    @Metadata(label = "consumer", description = "Number of blocks committed to an append blob", javaType = "Integer")
     public static final String COMMITTED_BLOCK_COUNT = HEADER_PREFIX + "CommittedBlockCount";
+    @Metadata(label = "consumer", description = "The offset at which the block was committed to the block blob.",
+              javaType = "String")
     public static final String APPEND_OFFSET = HEADER_PREFIX + "AppendOffset";
+    @Metadata(label = "consumer", description = "Returns non-parsed httpHeaders that can be used by the user.",
+              javaType = "HttpHeaders")
     public static final String RAW_HTTP_HEADERS = HEADER_PREFIX + "RawHttpHeaders";
+    @Metadata(label = "consumer", description = "The downloaded filename from the operation `downloadBlobToFile`.",
+              javaType = "String")
     public static final String FILE_NAME = HEADER_PREFIX + "FileName";
+    @Metadata(label = "consumer", description = "The download link generated by `downloadLink` operation.", javaType = "String")
     public static final String DOWNLOAD_LINK = HEADER_PREFIX + "DownloadLink";
     // headers to be retrieved
+    @Metadata(label = "producer",
+              description = "(listBlobs) Defines options available to configure the behavior of a call to listBlobsFlatSegment on a `BlobContainerClient` object.",
+              javaType = "ListBlobsOptions")
     public static final String LIST_BLOB_OPTIONS = HEADER_PREFIX + "ListBlobOptions";
+    @Metadata(label = "producer", description = "(listBlobs) The details for listing specific blobs",
+              javaType = "BlobListDetails")
     public static final String BLOB_LIST_DETAILS = HEADER_PREFIX + "ListDetails";
+    @Metadata(label = "producer",
+              description = "(listBlobs,getBlob) Filters the results to return only blobs whose names begin with the specified prefix. May be null to return all blobs.",
+              javaType = "String")
     public static final String PREFIX = HEADER_PREFIX + "Prefix";
+    @Metadata(label = "producer",
+              description = "(listBlobs,getBlob) Filters the results to return only blobs whose names match the specified regular expression. "
+                            +
+                            "May be null to return all. If both prefix and regex are set, regex takes the priority and prefix is ignored.",
+              javaType = "String")
     public static final String REGEX = HEADER_PREFIX + "Regex";
+    @Metadata(label = "producer",
+              description = "(listBlobs) Specifies the maximum number of blobs to return, including all BlobPrefix elements. " +
+                            "If the request does not specify maxResultsPerPage or specifies a value greater than 5,000, the server will return up to 5,000 items.",
+              javaType = "Integer")
     public static final String MAX_RESULTS_PER_PAGE = HEADER_PREFIX + "MaxResultsPerPage";
+    @Metadata(label = "producer",
+              description = "(All) An optional timeout value beyond which a `RuntimeException` will be raised.",
+              javaType = "Duration")
     public static final String TIMEOUT = HEADER_PREFIX + "Timeout";
+    @Metadata(label = "producer",
+              description = "(createContainer) Specifies how the data in this container is available to the public. Pass `null` for no public access.",
+              javaType = "PublicAccessType")
     public static final String PUBLIC_ACCESS_TYPE = HEADER_PREFIX + "PublicAccessType";
+    @Metadata(label = "producer",
+              description = "(Operations related to container and blob) This contains values which will restrict the successful operation of a variety of requests to the conditions present. "
+                            +
+                            "These conditions are entirely optional.",
+              javaType = "BlobRequestConditions")
     public static final String BLOB_REQUEST_CONDITION = HEADER_PREFIX + "RequestCondition";
+    @Metadata(label = "producer",
+              description = "(Operations related to container and blob) Override/set the container name on the exchange headers.",
+              javaType = "String")
     public static final String BLOB_CONTAINER_NAME = HEADER_PREFIX + "BlobContainerName";
+    @Metadata(label = "producer",
+              description = "(Operations related to blob) Override/set the blob name on the exchange headers.",
+              javaType = "String")
     public static final String BLOB_NAME = HEADER_PREFIX + "BlobName";
+    @Metadata(label = "producer",
+              description = "(downloadBlobToFile) The file directory where the downloaded blobs will be saved to.",
+              javaType = "String")
     public static final String FILE_DIR = HEADER_PREFIX + "FileDir";
+    @Metadata(label = "producer",
+              description = "(Operations related to page blob) A `PageRange` object. Given that pages must be aligned with 512-byte boundaries, "
+                            +
+                            "the start offset must be a modulus of 512 and the end offset must be a modulus of 512 - 1." +
+                            " Examples of valid byte ranges are 0-511, 512-1023, etc.",
+              javaType = "PageRange")
     public static final String PAGE_BLOB_RANGE = HEADER_PREFIX + "PageBlobRange";
+    @Metadata(label = "producer",
+              description = "(createPageBlob, resizePageBlob) Specifies the maximum size for the page blob, up to 8 TB. The page blob size must be aligned to a 512-byte boundary.",
+              javaType = "Long")
     public static final String PAGE_BLOB_SIZE = HEADER_PREFIX + "PageBlobSize";
+    @Metadata(label = "producer",
+              description = "(stageBlockBlobList) When is set to `true`, the staged blocks will not be committed directly.",
+              javaType = "boolean")
     public static final String COMMIT_BLOCK_LIST_LATER = HEADER_PREFIX + "CommitBlobBlockListLater";
+    @Metadata(label = "producer", description = "(getBlobBlockList) Specifies which type of blocks to return.",
+              javaType = "com.azure.storage.blob.models.BlockListType")
     public static final String BLOCK_LIST_TYPE = HEADER_PREFIX + "BlockListType";
+    @Metadata(label = "producer",
+              description = "(commitAppendBlob) When is set to `true`, the append blocks will be created when committing append blocks.",
+              javaType = "boolean")
     public static final String CREATE_APPEND_BLOB = HEADER_PREFIX + "CreateAppendBlob";
+    @Metadata(label = "producer",
+              description = "(uploadPageBlob) When is set to `true`, the page blob will be created when uploading page blob.",
+              javaType = "boolean")
     public static final String CREATE_PAGE_BLOB = HEADER_PREFIX + "CreatePageBlob";
+    @Metadata(label = "producer",
+              description = "(deleteBlob) Specifies the behavior for deleting the snapshots on this blob. `Include` will delete the base blob and all snapshots. "
+                            +
+                            "`Only` will delete only the snapshots. If a snapshot is being deleted, you must pass null.",
+              javaType = "com.azure.storage.blob.models.DeleteSnapshotsOptionType")
     public static final String DELETE_SNAPSHOT_OPTION_TYPE = HEADER_PREFIX + "DeleteSnapshotsOptionType";
+    @Metadata(label = "producer",
+              description = "(listBlobContainers) A `ListBlobContainersOptions` which specifies what data should be returned by the service.",
+              javaType = "ListBlobContainersOptions")
     public static final String LIST_BLOB_CONTAINERS_OPTIONS = HEADER_PREFIX + "ListBlobContainersOptions";
+    @Metadata(label = "producer",
+              description = "(downloadBlobToFile) `ParallelTransferOptions` to use to download to file. Number of parallel transfers parameter is ignored.",
+              javaType = "ParallelTransferOptions")
     public static final String PARALLEL_TRANSFER_OPTIONS = HEADER_PREFIX + "ParallelTransferOptions";
+    @Metadata(label = "producer", description = "(downloadLink) Override the default expiration (millis) of URL download link.",
+              javaType = "Long")
     public static final String DOWNLOAD_LINK_EXPIRATION = HEADER_PREFIX + "DownloadLinkExpiration";
+    @Metadata(label = "producer",
+              description = "(copyBlob) The source blob account name to be used as source account name in a copy blob operation",
+              javaType = "String")
     public static final String SOURCE_BLOB_ACCOUNT_NAME = HEADER_PREFIX + "SourceBlobAccountName";
+    @Metadata(label = "producer",
+              description = "(copyBlob) The source blob container name to be used as source container name in a copy blob operation",
+              javaType = "String")
     public static final String SOURCE_BLOB_CONTAINER_NAME = HEADER_PREFIX + "SourceBlobContainerName";
     public static final String DESTINATION_BLOB_NAME = HEADER_PREFIX + "DestinationBlobContainerName";
-    // changefeed
+    // change feed
+    @Metadata(label = "producer",
+              description = "(getChangeFeed) It filters the results to return events approximately after the start time. " +
+                            "Note: A few events belonging to the previous hour can also be returned. " +
+                            "A few events belonging to this hour can be missing; to ensure all events from the hour are returned, round the start time down by an hour.",
+              javaType = "OffsetDateTime")
     public static final String CHANGE_FEED_START_TIME = HEADER_PREFIX + "ChangeFeedStartTime";
+    @Metadata(label = "producer",
+              description = "(getChangeFeed) It filters  the results to return events approximately before the end time. " +
+                            "Note: A few events belonging to the next hour can also be returned. " +
+                            "A few events belonging to this hour can be missing; to ensure all events from the hour are returned, round the end time up by an hour.",
+              javaType = "OffsetDateTime")
     public static final String CHANGE_FEED_END_TIME = HEADER_PREFIX + "ChangeFeedEndTime";
+    @Metadata(label = "producer",
+              description = "(getChangeFeed) This gives additional context that is passed through the Http pipeline during the service call.",
+              javaType = "Context")
     public static final String CHANGE_FEED_CONTEXT = HEADER_PREFIX + "Context";
 
     private BlobConstants() {
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobEndpoint.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobEndpoint.java
index 4f0b00d..2afa53d 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobEndpoint.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobEndpoint.java
@@ -37,7 +37,8 @@ import org.apache.camel.util.ObjectHelper;
  * Store and retrieve blobs from Azure Storage Blob Service.
  */
 @UriEndpoint(firstVersion = "3.3.0", scheme = "azure-storage-blob", title = "Azure Storage Blob Service",
-             syntax = "azure-storage-blob:accountName/containerName", category = { Category.CLOUD, Category.FILE })
+             syntax = "azure-storage-blob:accountName/containerName", category = { Category.CLOUD, Category.FILE },
+             headersClass = BlobConstants.class)
 public class BlobEndpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git a/components/camel-azure/camel-azure-storage-datalake/src/generated/resources/org/apache/camel/component/azure/storage/datalake/azure-storage-datalake.json b/components/camel-azure/camel-azure-storage-datalake/src/generated/resources/org/apache/camel/component/azure/storage/datalake/azure-storage-datalake.json
index b960f95..51d6eca 100644
--- a/components/camel-azure/camel-azure-storage-datalake/src/generated/resources/org/apache/camel/component/azure/storage/datalake/azure-storage-datalake.json
+++ b/components/camel-azure/camel-azure-storage-datalake/src/generated/resources/org/apache/camel/component/azure/storage/datalake/azure-storage-datalake.json
@@ -56,6 +56,69 @@
     "operation": { "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.azure.storage.datalake.DataLakeOperationsDefinition", "enum": [ "listFileSystem", "listFiles" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "listFileSystem", "configurationClass": "org.apache.camel.component.azure.storage.datalake.DataLakeConfiguration", "configurationField" [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "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 t [...]
   },
+  "headers": {
+    "CamelAzureStorageDataLakeListFileSystemsOptions": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "ListFileSystemsOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Defines options available to configure the behavior of a call to listFileSystemsSegment on a DataLakeServiceAsyncClient object. Null may be passed." },
+    "CamelAzureStorageDataLakeTimeout": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An optional timeout value beyond which a RuntimeException will be raised." },
+    "CamelAzureStorageDataLakeOperation": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "org.apache.camel.component.azure.storage.datalake.DataLakeOperationsDefinition", "enum": [ "listFileSystem", "createFileSystem", "deleteFileSystem", "listPaths", "getFile", "downloadToFile", "downloadLink", "deleteFile", "appendToFile", "flushToFile", "uploadFromFile", "upload", "openQueryInputStream", "createFile", "deleteDirectory" [...]
+    "CamelAzureStorageDataLakeFileSystemName": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the file system in azure datalake on which operation is to be performed. Please make sure that filesystem name is all lowercase." },
+    "CamelAzureStorageDataLakeDirectoryName": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the directory in azure datalake on which operation is to be performed." },
+    "CamelAzureStorageDataLakeFileName": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the file in azure datalake on which operation is to be performed." },
+    "CamelAzureStorageDataLakeMetadata": { "kind": "header", "displayName": "", "group": "from both", "label": "from both", "required": false, "javaType": "Map<String, String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The metadata to associate with the file." },
+    "CamelAzureStorageDataLakePublicAccessType": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "PublicAccessType", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Defines options available to configure the behavior of a call to listFileSystemsSegment on a DataLakeServiceAsyncClient object." },
+    "CamelAzureStorageDataLakeRawHttpHeaders": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "HttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Non parsed http headers that can be used by the user." },
+    "CamelAzureStorageDataLakeRequestCondition": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "DataLakeRequestConditions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This contains values which will restrict the successful operation of a variety of requests to the conditions present. These conditions are entirely optional." },
+    "CamelAzureStorageDataLakeListPathOptions": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "ListPathOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Defines options available to configure the behavior of a call to listContainersSegment on a DataLakeFileSystemClient object. Null may be passed." },
+    "CamelAzureStorageDataLakePath": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Path of the file to be used for upload operations." },
+    "CamelAzureStorageDataLakeRecursive": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies if the call to listContainersSegment should recursively include all paths." },
+    "CamelAzureStorageDataLakeMaxResults": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies the maximum number of blobs to return, including all BlobPrefix elements." },
+    "CamelAzureStorageDataLakeUserPrincipalNameReturned": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specifies if the name of the user principal should be returned." },
+    "CamelAzureStorageDataLakeRegex": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Filter the results to return only those files with match the specified regular expression." },
+    "CamelAzureStorageDataLakeFileDir": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Directory in which the file is to be downloaded." },
+    "CamelAzureStorageDataLakeAccessTier": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "AccessTier", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Access tier of file." },
+    "CamelAzureStorageDataLakeContentMD5": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "byte[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An MD5 hash of the content. The hash is used to verify the integrity of the file during transport." },
+    "CamelAzureStorageDataLakeFileRange": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "FileRange", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This is a representation of a range of bytes on a file, typically used during a download operation. Passing null as a FileRange value will default to the entire range of the file." },
+    "CamelAzureStorageDataLakeParallelTransferOptions": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "ParallelTransferOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The configuration used to parallelize data transfer operations." },
+    "CamelAzureStorageDataLakeOpenOptions": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Set<OpenOption>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set of OpenOption used to configure how to open or create a file." },
+    "CamelAzureStorageDataLakeAccessTierChangeTime": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Datetime when the access tier of the blob last changed." },
+    "CamelAzureStorageDataLakeArchiveStatus": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "ArchiveStatus", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Archive status of file." },
+    "CamelAzureStorageDataLakeCacheControl": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Cache control specified for the file." },
+    "CamelAzureStorageDataLakeContentDisposition": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content disposition specified for the file." },
+    "CamelAzureStorageDataLakeContentEncoding": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content encoding specified for the file." },
+    "CamelAzureStorageDataLakeContentLanguage": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content language specified for the file." },
+    "CamelAzureStorageDataLakeContentType": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Content type specified for the file." },
+    "CamelAzureStorageDataLakeCopyCompletionTime": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Conclusion time of the last attempted Copy Blob operation where this file was the destination file." },
+    "CamelAzureStorageDataLakeCopyId": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "String identifier for this copy operation." },
+    "CamelAzureStorageDataLakeCopyProgress": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this file was the destination file." },
+    "CamelAzureStorageDataLakeCopySource": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "URL up to 2 KB in length that specifies the source file or file used in the last attempted Copy Blob operation where this file was the destination file." },
+    "CamelAzureStorageDataLakeCopyStatus": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "com.azure.storage.file.datalake.models.CopyStatusType", "enum": [ "pending", "success", "aborted", "failed" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Status of the last copy operation performed on the file." },
+    "CamelAzureStorageDataLakeCopyStatusDescription": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The description of the copy's status" },
+    "CamelAzureStorageDataLakeCreationTime": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Creation time of the file." },
+    "CamelAzureStorageDataLakeEncryptionKeySha256": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The SHA-256 hash of the encryption key used to encrypt the file." },
+    "CamelAzureStorageDataLakeETag": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The E Tag of the file." },
+    "CamelAzureStorageDataLakeFileSize": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Size of the file." },
+    "CamelAzureStorageDataLakeLastModified": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Datetime when the file was last modified." },
+    "CamelAzureStorageDataLakeLeaseDuration": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "com.azure.storage.file.datalake.models.LeaseDurationType", "enum": [ "infinite", "fixed" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Type of lease on the file." },
+    "CamelAzureStorageDataLakeLeaseState": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "com.azure.storage.file.datalake.models.LeaseStateType", "enum": [ "available", "leased", "expired", "breaking", "broken" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "State of the lease on the file." },
+    "CamelAzureStorageDataLakeLeaseStatus": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "com.azure.storage.file.datalake.models.LeaseStatusType", "enum": [ "locked", "unlocked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Status of the lease on the file." },
+    "CamelAzureStorageDataLakeIncrementalCopy": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Flag indicating if the file was incrementally copied." },
+    "CamelAzureStorageDataLakeServerEncrypted": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Flag indicating if the file's content is encrypted on the server." },
+    "CamelAzureStorageDataLakeDownloadLinkExpiration": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set the Expiration time of the download link." },
+    "CamelAzureStorageDataLakeDownloadLink": { "kind": "header", "displayName": "", "group": "from component", "label": "from component", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The link that can be used to download the file from datalake." },
+    "CamelAzureStorageDataLakeFileOffset": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The position where the data is to be appended." },
+    "CamelAzureStorageDataLakeLeaseId": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "By setting lease id, requests will fail if the provided lease does not match the active lease on the file." },
+    "CamelAzureStorageDataLakePathHttpHeaders": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "PathHttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Additional parameters for a set of operations." },
+    "CamelAzureStorageDataLakeRetainCommitedData": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Determines Whether or not uncommitted data is to be retained after the operation." },
+    "CamelAzureStorageDataLakeClose": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether or not a file changed event raised indicates completion (true) or modification (false)." },
+    "CamelAzureStorageDataLakePosition": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The length of the file after all data has been written." },
+    "CamelAzureStorageDataLakeExpression": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query expression on the file." },
+    "CamelAzureStorageDataLakeInputSerialization": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "FileQuerySerialization", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Defines the input serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization" },
+    "CamelAzureStorageDataLakeOutputSerialization": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "FileQuerySerialization", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Defines the output serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization" },
+    "CamelAzureStorageDataLakeErrorConsumer": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Consumer<FileQueryError>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets error consumer for file query" },
+    "CamelAzureStorageDataLakeProgressConsumer": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "Consumer<FileQueryProgress>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets progress consumer for file query" },
+    "CamelAzureStorageDataLakeQueryOptions": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "FileQueryOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Optional parameters for File Query." },
+    "CamelAzureStorageDataLakePermission": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the permission for file." },
+    "CamelAzureStorageDataLakeUmask": { "kind": "header", "displayName": "", "group": "from user", "label": "from user", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the umask for file." }
+  },
   "properties": {
     "accountName": { "kind": "path", "displayName": "Account Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.datalake.DataLakeConfiguration", "configurationField": "configuration", "description": "name of the azure account" },
     "fileSystemName": { "kind": "path", "displayName": "File System Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.datalake.DataLakeConfiguration", "configurationField": "configuration", "description": "name of filesystem to be used" },
diff --git a/components/camel-azure/camel-azure-storage-datalake/src/main/docs/azure-storage-datalake-component.adoc b/components/camel-azure/camel-azure-storage-datalake/src/main/docs/azure-storage-datalake-component.adoc
index 0f88b49..fcfc635 100644
--- a/components/camel-azure/camel-azure-storage-datalake/src/main/docs/azure-storage-datalake-component.adoc
+++ b/components/camel-azure/camel-azure-storage-datalake/src/main/docs/azure-storage-datalake-component.adoc
@@ -79,87 +79,15 @@ from("azure-storage-datalake:camelTesting/filesystem?fileName=test.txt&accountKe
 to("file://fileDirectory");
 ----
 
-=== Message Headers specified by user
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|===
-|Header |Variable Name |Type |Description
-|`CamelAzureStorageDataLakeListFileSystemsOptions` |`DataLakeConstants.LIST_FILESYSTEMS_OPTIONS` | `ListFileSystemsOptions` | Defines options available to configure the behavior of a call to listFileSystemsSegment on a DataLakeServiceAsyncClient object. Null may be passed.
-|`CamelAzureStorageDataLakeTimeout` |`DataLakeConstants.TIMEOUT` |`Duration` | An optional timeout value beyond which a RuntimeException will be raised.
-|`CamelAzureStorageDataLakeOperation` |`DataLakeConstants.DATALAKE_OPERATION` |`DataLakeOperationsDefinition` | Specify the producer operation to execute. Different operations allowed are shown below.
-|`CamelAzureStorageDataLakeFileSystemName` |`DataLakeConstants.FILESYSTEM_NAME` |`String` | Name of the file system in azure datalake on which operation is to be performed. Please make sure that filesystem name is all lowercase.
-|`CamelAzureStorageDataLakeDirectoryName` |`DataLakeConstants.DIRECTORY_NAME` |`String` | Name of the directory in azure datalake on which operation is to be performed.
-|`CamelAzureStorageDataLakeFileName` |`DataLakeConstants.FILE_NAME` |`String` | Name of the file in azure datalake on which operation is to be performed.
-|`CamelAzureStorageDataLakeMetadata` |`DataLakeConstants.METADATA` |`Map<String,String>` | The metadata to associate with the file.
-|`CamelAzureStorageDataLakePublicAccessType` |`DataLakeConstants.PUBLIC_ACCESS_TYPE` |`PublicAccessType` |
-|`CamelAzureStorageDataLakeRequestCondition` |`DataLakeConstants.DATALAKE_REQUEST_CONDITION` |`DataLakeRequestConditions` | This contains values which will restrict the successful operation of a variety of requests to the conditions present. These conditions are entirely optional.
-|`CamelAzureStorageDataLakeListPathOptions` |`DataLakeConstants.LIST_PATH_OPTIONS` |`ListPathOptions` | Defines options available to configure the behavior of a call to listContainersSegment on a DataLakeFileSystemClient object. Null may be passed.
-|`CamelAzureStorageDataLakePath` |`DataLakeConstants.PATH` |`String` | Path of the file to be used for upload operations.
-|`CamelAzureStorageDataLakeRecursive` |`DataLakeConstants.RECURSIVE` |`Boolean` | Specifies if the call to listContainersSegment should recursively include all paths.
-|`CamelAzureStorageDataLakeMaxResults` |`DataLakeConstants.MAX_RESULTS` |`Integer` | Specifies the maximum number of blobs to return, including all BlobPrefix elements.
-|`CamelAzureStorageDataLakeUserPrincipalNameReturned` |`DataLakeConstants.USER_PRINCIPAL_NAME_RETURNED` |`Boolean` | 
-|`CamelAzureStorageDataLakeRegex` |`DataLakeConstants.REGEX` |`String` | Filter the results to return only those files with match the specified regular expression.
-|`CamelAzureStorageDataLakeFileDir` |`DataLakeConstants.FILE_DIR` |`String` | Directory in which the file is to be downloaded.
-|`CamelAzureStorageDataLakeContentMD5` |`DataLakeConstants.CONTENT_MD5` |`byte[]` | An MD5 hash of the content. The hash is used to verify the intergity of the file during transport.
-|`CamelAzureStorageDataLakeFileRange` |`DataLakeConstants.FILE_RANGE` |`FileRange` | This is a representation of a range of bytes on a file, typically used during a download operation. Passing null as a FileRange value will default to the entire range of the file.
-|`CamelAzureStorageDataLakeParallelTransferOptions` |`DataLakeConstants.PARALLEL_TRANSFER_OPTIONS` | `ParallelTransferOptions` | 
-|`CamelAzureStorageDataLakeOpenOptions` |`DataLakeConstants.OPEN_OPTIONS` |`Set<OpenOption>` | Set of OpenOption used to configure how to open or create a file.
-|`CamelAzureStorageDataLakeIncrementalCopy` |`DataLakeConstants.INCREMENTAL_COPY` |`Boolean` | Flag indicating if the file was incrementally copied.
-|`CamelAzureStorageDataLakeDownloadLinkExpiration` |`DataLakeConstants.DOWNLOAD_LINK_EXPIRATION` |`Long` | Set the Expiration time of the download link.
-|`CamelAzureStorageDataLakeFileOffset` |`DataLakeConstants.FILE_OFFSET` |`Long` | The position where the data is to be appended.
-|`CamelAzureStorageDataLakeLeaseId` |`DataLakeConstants.LEASE_ID` |`String` | By setting lease id, requests will fail if the provided lease does not match the active lease on the file.
-|`CamelAzureStorageDataLakePathHttpHeaders` |`DataLakeConstants.PATH_HTTP_HEADERS` |`PathHttpHeaders` | Additional parameters for a set of operations.
-|`CamelAzureStorageDataLakeRetainCommitedData` |`DataLakeConstants.RETAIN_UNCOMMITED_DATA` |`Boolean` | Determines Whether or not uncommitted data is to be retained after the operation.
-|`CamelAzureStorageDataLakeClose` |`DataLakeConstants.CLOSE` |`Boolean` | Whether or not a file changed event raised indicates completion (true) or modification (false).
-|`CamelAzureStorageDataLakePosition` |`DataLakeConstants.POSITION` |`Long` | The length of the file after all data has been written.
-|`CamelAzureStorageDataLakeExpression` |`DataLakeConstants.EXPRESSION` |`String` | The query expression on the file.
-|`CamelAzureStorageDataLakeInputSerialization` |`DataLakeConstants.INPUT_SERIALIZATION` |`FileQuerySerialization` | Defines the input serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization
-|`CamelAzureStorageDataLakeOutputSerialization` |`DataLakeConstants.OUTPUT_SERIALIZATION` |`FileQuerySerialization` | Defines the output serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization
-|`CamelAzureStorageDataLakeErrorConsumer` |`DataLakeConstants.ERROR_CONSUMER` |`Consumer<FileQueryError>` | Sets error consumer for file query
-|`CamelAzureStorageDataLakeProgressConsumer` |`DataLakeConstants.PROGRESS_CONSUMER` |`Consumer<FileQueryProgress>` | Sets progress consumer for file query
-|`CamelAzureStorageDataLakeQueryOptions` |`DataLakeConstants.QUERY_OPTIONS` |`FileQueryOptions` | Optional parameters for File Query.
-|`CamelAzureStorageDataLakePermission` |`DataLakeConstants.PERMISSION` |`String` | Sets the permission for file.
-|`CamelAzureStorageDataLakeUmask` |`DataLakeConstants.UMASK` |`String` | Sets the umask for file.
-|===
-
-=== Message headers set by the component
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|===
-|Header |Variable Name |Type |Description
-|`CamelAzureStorageDataLakeMetadata` |`DataLakeConstants.METADATA` |`Map<String,String>` | The metadata to associate with the file.
-|`CamelAzureStorageDataLakeRawHttpHeaders` |`DataLakeConstants.RAW_HTTP_HEADERS` |`HttpHeaders` | Non parsed http headers that can be used by the user.
-|`CamelAzureStorageDataLakeAccessTier` |`DataLakeConstants.ACCESS_TIER` |`AccessTier` | Access tier of file.
-|`CamelAzureStorageDataLakeAccessTierChangeTime` |`DataLakeConstants.ACCESS_TIER_CHANGE_TIME` |`OffsetDateTime` | Datetime when the access tier of the blob last changed.
-|`CamelAzureStorageDataLakeArchiveStatus` |`DataLakeConstants.ARCHIVE_STATUS` |`ArchiveStatus` | Archive status of file. 
-|`CamelAzureStorageDataLakeCacheControl` |`DataLakeConstants.CACHE_CONTROL` |`String` | Cache control specified for the file. 
-|`CamelAzureStorageDataLakeContentDisposition` |`DataLakeConstants.CONTENT_DISPOSITION` |`String` | Content disposition specified for the file.
-|`CamelAzureStorageDataLakeContentEncoding` |`DataLakeConstants.CONTENT_ENCODING` |`String` | Content encoding specified for the file.
-|`CamelAzureStorageDataLakeContentLanguage` |`DataLakeConstants.CONTENT_LANGUAGE` |`String` | Content language specified for the file.
-|`CamelAzureStorageDataLakeContentType` |`DataLakeConstants.CONTENT_TYPE` |`String` | Content type specified for the file.
-|`CamelAzureStorageDataLakeCopyCompletionTime` |`DataLakeConstants.COPY_COMPLETION_TIME` |`OffsetDateTime` | Conclusion time of the last attempted Copy Blob operation where this file was the destination file.
-|`CamelAzureStorageDataLakeCopyId` |`DataLakeConstants.COPY_ID` |`String` | String identifier for this copy operation.
-|`CamelAzureStorageDataLakeCopyProgress` |`DataLakeConstants.COPY_PROGRESS` |`String` | Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this file was the destination file.
-|`CamelAzureStorageDataLakeCopySource` |`DataLakeConstants.COPY_SOURCE` |`String` | URL up to 2 KB in length that specifies the source file or file used in the last attempted Copy Blob operation where this file was the destination file.
-|`CamelAzureStorageDataLakeCopyStatus` |`DataLakeConstants.COPY_STATUS` |`CopyStatusType` | Status of the last copy operation performed on the file.
-|`CamelAzureStorageDataLakeCopyStatusDescription` |`DataLakeConstants.COPY_STATUS_DESCRIPTION` |`String` |
-|`CamelAzureStorageDataLakeCreationTime` |`DataLakeConstants.CREATION_TIME` |`OffsetDateTime` | Creation time of the file.
-|`CamelAzureStorageDataLakeEncryptionKeySha256` |`DataLakeConstants.ENCRYPTION_KEY_SHA_256` |`String` | The SHA-256 hash of the encryption key used to encrypt the file.
-|`CamelAzureStorageDataLakeServerEncrypted` |`DataLakeConstants.SERVER_ENCRYPTED` |`Boolean` | Flag indicating if the file's content is encrypted on the server.
-|`CamelAzureStorageDataLakeETag` |`DataLakeConstants.E_TAG` |`String` | The E Tag of the file.
-|`CamelAzureStorageDataLakeFileSize` |`DataLakeConstants.FILE_SIZE` |`Long` | Size of the file.
-|`CamelAzureStorageDataLakeLastModified` |`DataLakeConstants.LAST_MODIFIED` |`OffsetDateTime` | Datetime when the file was last modified.
-|`CamelAzureStorageDataLakeLeaseDuration` |`DataLakeConstants.LEASE_DURATION` |`LeaseDurationType` | Type of lease on the file.
-|`CamelAzureStorageDataLakeLeaseState` |`DataLakeConstants.LEASE_STATE` |`LeaseStateType` | State of the lease on the file.
-|`CamelAzureStorageDataLakeLeaseStatus` |`DataLakeConstants.LEASE_STATUS` |`LeaseStatusType` | Status of the lease on the file.
-|`CamelAzureStorageDataLakeDownloadLink` |`DataLakeConstants.DOWNLOAD_LINK` |`String` | The link that can be used to download the file from datalake.
-|===
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Automatic detection of service client
 
 The component is capable of automatically detecting the presence of a DataLakeServiceClient bean in the registry.
 Hence, if your registry has only one instance of type DataLakeServiceClient, it will be automatically used as the default client.
-You won't have to explicitly define it as an uri paramater.
+You won't have to explicitly define it as an uri parameter.
 
 === Azure Storage DataLake Producer Operations
 
diff --git a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConstants.java b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConstants.java
index 31b8cf7..2d29ee6 100644
--- a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConstants.java
+++ b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeConstants.java
@@ -16,69 +16,193 @@
  */
 package org.apache.camel.component.azure.storage.datalake;
 
+import org.apache.camel.spi.Metadata;
+
 public final class DataLakeConstants {
     private static final String HEADER_PREFIX = "CamelAzureStorageDataLake";
 
+    @Metadata(label = "from user",
+              description = "Defines options available to configure the behavior of a call to listFileSystemsSegment on a DataLakeServiceAsyncClient object. Null may be passed.",
+              javaType = "ListFileSystemsOptions")
     public static final String LIST_FILESYSTEMS_OPTIONS = HEADER_PREFIX + "ListFileSystemsOptions";
+    @Metadata(label = "from user", description = "An optional timeout value beyond which a RuntimeException will be raised.",
+              javaType = "Duration")
     public static final String TIMEOUT = HEADER_PREFIX + "Timeout";
+    @Metadata(label = "from user",
+              description = "Specify the producer operation to execute. Different operations allowed are shown below.",
+              javaType = "org.apache.camel.component.azure.storage.datalake.DataLakeOperationsDefinition")
     public static final String DATALAKE_OPERATION = HEADER_PREFIX + "Operation";
+    @Metadata(label = "from user",
+              description = "Name of the file system in azure datalake on which operation is to be performed. Please make sure that filesystem name is all lowercase.",
+              javaType = "String")
     public static final String FILESYSTEM_NAME = HEADER_PREFIX + "FileSystemName";
+    @Metadata(label = "from user",
+              description = "Name of the directory in azure datalake on which operation is to be performed.",
+              javaType = "String")
     public static final String DIRECTORY_NAME = HEADER_PREFIX + "DirectoryName";
+    @Metadata(label = "from user", description = "Name of the file in azure datalake on which operation is to be performed.",
+              javaType = "String")
     public static final String FILE_NAME = HEADER_PREFIX + "FileName";
+    @Metadata(label = "from both", description = "The metadata to associate with the file.",
+              javaType = "Map<String, String>")
     public static final String METADATA = HEADER_PREFIX + "Metadata";
+    @Metadata(label = "from user",
+              description = "Defines options available to configure the behavior of a call to listFileSystemsSegment on a DataLakeServiceAsyncClient object.",
+              javaType = "PublicAccessType")
     public static final String PUBLIC_ACCESS_TYPE = HEADER_PREFIX + "PublicAccessType";
+    @Metadata(label = "from component", description = "Non parsed http headers that can be used by the user.",
+              javaType = "HttpHeaders")
     public static final String RAW_HTTP_HEADERS = HEADER_PREFIX + "RawHttpHeaders";
+    @Metadata(label = "from user",
+              description = "This contains values which will restrict the successful operation of a variety of requests to the conditions present. These conditions are entirely optional.",
+              javaType = "DataLakeRequestConditions")
     public static final String DATALAKE_REQUEST_CONDITION = HEADER_PREFIX + "RequestCondition";
+    @Metadata(label = "from user",
+              description = "Defines options available to configure the behavior of a call to listContainersSegment on a DataLakeFileSystemClient object. Null may be passed.",
+              javaType = "ListPathOptions")
     public static final String LIST_PATH_OPTIONS = HEADER_PREFIX + "ListPathOptions";
+    @Metadata(label = "from user", description = "Path of the file to be used for upload operations.", javaType = "String")
     public static final String PATH = HEADER_PREFIX + "Path";
+    @Metadata(label = "from user",
+              description = "Specifies if the call to listContainersSegment should recursively include all paths.",
+              javaType = "Boolean")
     public static final String RECURSIVE = HEADER_PREFIX + "Recursive";
+    @Metadata(label = "from user",
+              description = "Specifies the maximum number of blobs to return, including all BlobPrefix elements.",
+              javaType = "Integer")
     public static final String MAX_RESULTS = HEADER_PREFIX + "MaxResults";
+    @Metadata(label = "from user", description = "Specifies if the name of the user principal should be returned.",
+              javaType = "Boolean")
     public static final String USER_PRINCIPAL_NAME_RETURNED = HEADER_PREFIX + "UserPrincipalNameReturned";
+    @Metadata(label = "from user",
+              description = "Filter the results to return only those files with match the specified regular expression.",
+              javaType = "String")
     public static final String REGEX = HEADER_PREFIX + "Regex";
+    @Metadata(label = "from user", description = "Directory in which the file is to be downloaded.", javaType = "String")
     public static final String FILE_DIR = HEADER_PREFIX + "FileDir";
+    @Metadata(label = "from component", description = "Access tier of file.", javaType = "AccessTier")
     public static final String ACCESS_TIER = HEADER_PREFIX + "AccessTier";
+    @Metadata(label = "from user",
+              description = "An MD5 hash of the content. The hash is used to verify the integrity of the file during transport.",
+              javaType = "byte[]")
     public static final String CONTENT_MD5 = HEADER_PREFIX + "ContentMD5";
+    @Metadata(label = "from user",
+              description = "This is a representation of a range of bytes on a file, typically used during a download operation. "
+                            +
+                            "Passing null as a FileRange value will default to the entire range of the file.",
+              javaType = "FileRange")
     public static final String FILE_RANGE = HEADER_PREFIX + "FileRange";
+    @Metadata(label = "from user", description = "The configuration used to parallelize data transfer operations.",
+              javaType = "ParallelTransferOptions")
     public static final String PARALLEL_TRANSFER_OPTIONS = HEADER_PREFIX + "ParallelTransferOptions";
+    @Metadata(label = "from user", description = "Set of OpenOption used to configure how to open or create a file.",
+              javaType = "Set<OpenOption>")
     public static final String OPEN_OPTIONS = HEADER_PREFIX + "OpenOptions";
+    @Metadata(label = "from component", description = "Datetime when the access tier of the blob last changed.",
+              javaType = "OffsetDateTime")
     public static final String ACCESS_TIER_CHANGE_TIME = HEADER_PREFIX + "AccessTierChangeTime";
+    @Metadata(label = "from component", description = "Archive status of file.", javaType = "ArchiveStatus")
     public static final String ARCHIVE_STATUS = HEADER_PREFIX + "ArchiveStatus";
+    @Metadata(label = "from component", description = "Cache control specified for the file.", javaType = "String")
     public static final String CACHE_CONTROL = HEADER_PREFIX + "CacheControl";
+    @Metadata(label = "from component", description = "Content disposition specified for the file.", javaType = "String")
     public static final String CONTENT_DISPOSITION = HEADER_PREFIX + "ContentDisposition";
+    @Metadata(label = "from component", description = "Content encoding specified for the file.", javaType = "String")
     public static final String CONTENT_ENCODING = HEADER_PREFIX + "ContentEncoding";
+    @Metadata(label = "from component", description = "Content language specified for the file.", javaType = "String")
     public static final String CONTENT_LANGUAGE = HEADER_PREFIX + "ContentLanguage";
+    @Metadata(label = "from component", description = "Content type specified for the file.", javaType = "String")
     public static final String CONTENT_TYPE = HEADER_PREFIX + "ContentType";
+    @Metadata(label = "from component",
+              description = "Conclusion time of the last attempted Copy Blob operation where this file was the destination file.",
+              javaType = "OffsetDateTime")
     public static final String COPY_COMPLETION_TIME = HEADER_PREFIX + "CopyCompletionTime";
+    @Metadata(label = "from component", description = "String identifier for this copy operation.", javaType = "String")
     public static final String COPY_ID = HEADER_PREFIX + "CopyId";
+    @Metadata(label = "from component",
+              description = "Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob operation where this file was the destination file.",
+              javaType = "String")
     public static final String COPY_PROGRESS = HEADER_PREFIX + "CopyProgress";
+    @Metadata(label = "from component",
+              description = "URL up to 2 KB in length that specifies the source file or file used in the last attempted Copy Blob operation where this file was the destination file.",
+              javaType = "String")
     public static final String COPY_SOURCE = HEADER_PREFIX + "CopySource";
+    @Metadata(label = "from component", description = "Status of the last copy operation performed on the file.",
+              javaType = "com.azure.storage.file.datalake.models.CopyStatusType")
     public static final String COPY_STATUS = HEADER_PREFIX + "CopyStatus";
+    @Metadata(label = "from component", description = "The description of the copy's status", javaType = "String")
     public static final String COPY_STATUS_DESCRIPTION = HEADER_PREFIX + "CopyStatusDescription";
+    @Metadata(label = "from component", description = "Creation time of the file.", javaType = "OffsetDateTime")
     public static final String CREATION_TIME = HEADER_PREFIX + "CreationTime";
+    @Metadata(label = "from component", description = "The SHA-256 hash of the encryption key used to encrypt the file.",
+              javaType = "String")
     public static final String ENCRYPTION_KEY_SHA_256 = HEADER_PREFIX + "EncryptionKeySha256";
+    @Metadata(label = "from component", description = "The E Tag of the file.", javaType = "String")
     public static final String E_TAG = HEADER_PREFIX + "ETag";
+    @Metadata(label = "from component", description = "Size of the file.", javaType = "Long")
     public static final String FILE_SIZE = HEADER_PREFIX + "FileSize";
+    @Metadata(label = "from component", description = "Datetime when the file was last modified.",
+              javaType = "OffsetDateTime")
     public static final String LAST_MODIFIED = HEADER_PREFIX + "LastModified";
+    @Metadata(label = "from component", description = "Type of lease on the file.",
+              javaType = "com.azure.storage.file.datalake.models.LeaseDurationType")
     public static final String LEASE_DURATION = HEADER_PREFIX + "LeaseDuration";
+    @Metadata(label = "from component", description = "State of the lease on the file.",
+              javaType = "com.azure.storage.file.datalake.models.LeaseStateType")
     public static final String LEASE_STATE = HEADER_PREFIX + "LeaseState";
+    @Metadata(label = "from component", description = "Status of the lease on the file.",
+              javaType = "com.azure.storage.file.datalake.models.LeaseStatusType")
     public static final String LEASE_STATUS = HEADER_PREFIX + "LeaseStatus";
+    @Metadata(label = "from user", description = "Flag indicating if the file was incrementally copied.",
+              javaType = "Boolean")
     public static final String INCREMENTAL_COPY = HEADER_PREFIX + "IncrementalCopy";
+    @Metadata(label = "from component", description = "Flag indicating if the file's content is encrypted on the server.",
+              javaType = "Boolean")
     public static final String SERVER_ENCRYPTED = HEADER_PREFIX + "ServerEncrypted";
+    @Metadata(label = "from user", description = "Set the Expiration time of the download link.", javaType = "Long")
     public static final String DOWNLOAD_LINK_EXPIRATION = HEADER_PREFIX + "DownloadLinkExpiration";
+    @Metadata(label = "from component", description = "The link that can be used to download the file from datalake.",
+              javaType = "String")
     public static final String DOWNLOAD_LINK = HEADER_PREFIX + "DownloadLink";
+    @Metadata(label = "from user", description = "The position where the data is to be appended.", javaType = "Long")
     public static final String FILE_OFFSET = HEADER_PREFIX + "FileOffset";
+    @Metadata(label = "from user",
+              description = "By setting lease id, requests will fail if the provided lease does not match the active lease on the file.",
+              javaType = "String")
     public static final String LEASE_ID = HEADER_PREFIX + "LeaseId";
+    @Metadata(label = "from user", description = "Additional parameters for a set of operations.",
+              javaType = "PathHttpHeaders")
     public static final String PATH_HTTP_HEADERS = HEADER_PREFIX + "PathHttpHeaders";
+    @Metadata(label = "from user",
+              description = "Determines Whether or not uncommitted data is to be retained after the operation.",
+              javaType = "Boolean")
     public static final String RETAIN_UNCOMMITED_DATA = HEADER_PREFIX + "RetainCommitedData";
+    @Metadata(label = "from user",
+              description = "Whether or not a file changed event raised indicates completion (true) or modification (false).",
+              javaType = "Boolean")
     public static final String CLOSE = HEADER_PREFIX + "Close";
+    @Metadata(label = "from user", description = "The length of the file after all data has been written.", javaType = "Long")
     public static final String POSITION = HEADER_PREFIX + "Position";
+    @Metadata(label = "from user", description = "The query expression on the file.", javaType = "String")
     public static final String EXPRESSION = HEADER_PREFIX + "Expression";
+    @Metadata(label = "from user",
+              description = "Defines the input serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization",
+              javaType = "FileQuerySerialization")
     public static final String INPUT_SERIALIZATION = HEADER_PREFIX + "InputSerialization";
+    @Metadata(label = "from user",
+              description = "Defines the output serialization for a file query request. either FileQueryJsonSerialization or FileQueryDelimitedSerialization",
+              javaType = "FileQuerySerialization")
     public static final String OUTPUT_SERIALIZATION = HEADER_PREFIX + "OutputSerialization";
+    @Metadata(label = "from user", description = "Sets error consumer for file query", javaType = "Consumer<FileQueryError>")
     public static final String ERROR_CONSUMER = HEADER_PREFIX + "ErrorConsumer";
+    @Metadata(label = "from user", description = "Sets progress consumer for file query",
+              javaType = "Consumer<FileQueryProgress>")
     public static final String PROGRESS_CONSUMER = HEADER_PREFIX + "ProgressConsumer";
+    @Metadata(label = "from user", description = "Optional parameters for File Query.", javaType = "FileQueryOptions")
     public static final String QUERY_OPTIONS = HEADER_PREFIX + "QueryOptions";
+    @Metadata(label = "from user", description = "Sets the permission for file.", javaType = "String")
     public static final String PERMISSION = HEADER_PREFIX + "Permission";
+    @Metadata(label = "from user", description = "Sets the umask for file.", javaType = "String")
     public static final String UMASK = HEADER_PREFIX + "Umask";
 
     private DataLakeConstants() {
diff --git a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeEndpoint.java b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeEndpoint.java
index 5c22fdc..da2cc05 100644
--- a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeEndpoint.java
+++ b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeEndpoint.java
@@ -35,7 +35,7 @@ import org.apache.camel.support.ScheduledPollEndpoint;
  */
 @UriEndpoint(firstVersion = "3.8.0", scheme = "azure-storage-datalake", title = "Azure Storage Datalake Service",
              syntax = "azure-storage-datalake:accountName/fileSystemName",
-             category = { Category.CLOUD, Category.FILE, Category.BIGDATA })
+             category = { Category.CLOUD, Category.FILE, Category.BIGDATA }, headersClass = DataLakeConstants.class)
 public class DataLakeEndpoint extends ScheduledPollEndpoint {
 
     @UriParam(description = "service client of datalake")
diff --git a/components/camel-azure/camel-azure-storage-queue/src/generated/resources/org/apache/camel/component/azure/storage/queue/azure-storage-queue.json b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/org/apache/camel/component/azure/storage/queue/azure-storage-queue.json
index be50f7d..86efe68 100644
--- a/components/camel-azure/camel-azure-storage-queue/src/generated/resources/org/apache/camel/component/azure/storage/queue/azure-storage-queue.json
+++ b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/org/apache/camel/component/azure/storage/queue/azure-storage-queue.json
@@ -38,6 +38,24 @@
     "accessKey": { "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.queue.QueueConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure queue services" },
     "credentials": { "kind": "property", "displayName": "Credentials", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "com.azure.storage.common.StorageSharedKeyCredential", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.queue.QueueConfiguration", "configurationField": "configuration", "description": "StorageSharedKeyCredential can be injected to create the azure client,  [...]
   },
+  "headers": {
+    "CamelAzureStorageQueueRawHttpHeaders": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "HttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Returns non-parsed httpHeaders that can be used by the user." },
+    "CamelAzureStorageQueueMetadata": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String,String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(createQueue) Metadata to associate with the queue" },
+    "CamelAzureStorageQueueMessageId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ID of the message." },
+    "CamelAzureStorageQueueInsertionTime": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The time the Message was inserted into the Queue." },
+    "CamelAzureStorageQueueExpirationTime": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The time that the Message will expire and be automatically deleted." },
+    "CamelAzureStorageQueuePopReceipt": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(deleteMessage, updateMessage) Unique identifier that must match for the message to be deleted or updated. If deletion fails using this pop receipt then the message has been dequeued by another client." },
+    "CamelAzureStorageQueueTimeNextVisible": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The time that the message will again become visible in the Queue." },
+    "CamelAzureStorageQueueDequeueCount": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of times the message has been dequeued." },
+    "CamelAzureStorageQueueOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.queue.QueueOperationDefinition", "enum": [ "listQueues", "createQueue", "deleteQueue", "clearQueue", "sendMessage", "deleteMessage", "receiveMessages", "peekMessages", "updateMessage" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(All) Specify t [...]
+    "CamelAzureStorageQueueName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(All) Override the queue name." },
+    "CamelAzureStorageQueueSegmentOptions": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "QueuesSegmentOptions", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(listQueues) Options for listing queues" },
+    "CamelAzureStorageQueueTimeout": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(All) An optional timeout value beyond which a `RuntimeException` will be raised." },
+    "CamelAzureStorageQueueMaxMessages": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(receiveMessages, peekMessages) Maximum number of messages to get, if there are less messages exist in the queue than requested all the messages will be returned. If left empty only 1 message will be retrieved, the allowed range is [...]
+    "CamelAzureStorageQueueVisibilityTimeout": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(sendMessage, receiveMessages, updateMessage) The timeout period for how long the message is invisible in the queue. If unset the value will default to 0 and the message will be instantly visible. The timeout must be between [...]
+    "CamelAzureStorageQueueTimeToLive": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Duration", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(sendMessage) How long the message will stay alive in the queue. If unset the value will default to 7 days, if -1 is passed the message will not expire. The time to live must be -1 or any positive number." },
+    "CamelAzureStorageQueueCreateQueue": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(sendMessage) When is set to `true`, the queue will be automatically created when sending messages to the queue." }
+  },
   "properties": {
     "accountName": { "kind": "path", "displayName": "Account Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.queue.QueueConfiguration", "configurationField": "configuration", "description": "Azure account name to be used for authentication with azure queue services" },
     "queueName": { "kind": "path", "displayName": "Queue Name", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.queue.QueueConfiguration", "configurationField": "configuration", "description": "The queue resource name" },
diff --git a/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc b/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
index 2e2ab27..0b9aa18 100644
--- a/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
+++ b/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
@@ -88,37 +88,9 @@ from("azure-storage-queue://storageAccount/messageQueue?accessKey=yourAccessKey"
 to("file://queuedirectory");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the component producer
-[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Operations |Description
-
-|`CamelAzureStorageQueueSegmentOptions`| `QueueConstants.QUEUES_SEGMENT_OPTIONS`|`QueuesSegmentOptions`|`listQueues`|Options for listing queues
-|`CamelAzureStorageQueueTimeout`|`QueueConstants.TIMEOUT`|`Duration`|All|An optional timeout value beyond which a {@link RuntimeException} will be raised.
-|`CamelAzureStorageQueueMetadata`|`QueueConstants.METADATA`|`Map<String,String>`|`createQueue`|Metadata to associate with the queue
-|`CamelAzureStorageQueueTimeToLive`|`QueueConstants.TIME_TO_LIVE`|`Duration`|`sendMessage`|How long the message will stay alive in the queue. If unset the value will default to 7 days, if -1 is passed the message will not expire. The time to live must be -1 or any positive number.
-|`CamelAzureStorageQueueVisibilityTimeout`|`QueueConstants.VISIBILITY_TIMEOUT`|`Duration`|`sendMessage`, `receiveMessages`, `updateMessage`| The timeout period for how long the message is invisible in the queue. If unset the value will default to 0 and the message will be instantly visible. The timeout must be between 0 seconds and 7 days.
-|`CamelAzureStorageQueueCreateQueue`|`QueueConstants.CREATE_QUEUE`|`boolean`|`sendMessage`| When is set to `true`, the queue will be automatically created when sending messages to the queue.
-|`CamelAzureStorageQueuePopReceipt`|`QueueConstants.POP_RECEIPT`|`String`|`deleteMessage`, `updateMessage`|Unique identifier that must match for the message to be deleted or updated.
-|`CamelAzureStorageQueueMessageId`|`QueueConstants.MESSAGE_ID`|`String`|`deleteMessage`, `updateMessage`| The ID of the message to be deleted or updated.
-|`CamelAzureStorageQueueMaxMessages`|`QueueConstants.MAX_MESSAGES`|`Integer`|`receiveMessages`, `peekMessages`|  Maximum number of messages to get, if there are less messages exist in the queue than requested all the messages will be returned. If left empty only 1 message will be retrieved, the allowed range is 1 to 32 messages.
-|`CamelAzureStorageQueueOperation`|`QueueConstants.QUEUE_OPERATION`|`QueueOperationDefinition`|All|Specify the producer operation to execute, please see the doc on this page related to producer operation.
-|`CamelAzureStorageQueueName`|`QueueConstants.QUEUE_NAME`|`String`|All| Override the queue name.
-|=======================================================================
-
-
-=== Message headers set by either component producer or consumer
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-|`CamelAzureStorageQueueMessageId`|`QueueConstants.MESSAGE_ID`|`String`| The ID of message that being sent to the queue.
-|`CamelAzureStorageQueueInsertionTime`|`QueueConstants.INSERTION_TIME`|`OffsetDateTime`|The time the Message was inserted into the Queue.
-|`CamelAzureStorageQueueExpirationTime`|`QueueConstants.EXPIRATION_TIME`|`OffsetDateTime`|The time that the Message will expire and be automatically deleted.
-|`CamelAzureStorageQueuePopReceipt`|`QueueConstants.POP_RECEIPT`|`String`|This value is required to delete/update the Message. If deletion fails using this popreceipt then the message has been dequeued by another client.
-|`CamelAzureStorageQueueTimeNextVisible`|`QueueConstants.TIME_NEXT_VISIBLE`|`OffsetDateTime`|The time that the message will again become visible in the Queue.
-|`CamelAzureStorageQueueDequeueCount` | `QueueConstants.DEQUEUE_COUNT`|`long`|The number of times the message has been dequeued.
-|`CamelAzureStorageQueueRawHttpHeaders`|`QueueConstants.RAW_HTTP_HEADERS`|`HttpHeaders`|Returns non-parsed httpHeaders that can be used by the user.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Advanced Azure Storage Queue configuration
 If your Camel Application is running behind a firewall or if you need to
diff --git a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConstants.java b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConstants.java
index 246a6d1..01ffc0a 100644
--- a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConstants.java
+++ b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueConstants.java
@@ -16,25 +16,64 @@
  */
 package org.apache.camel.component.azure.storage.queue;
 
+import org.apache.camel.spi.Metadata;
+
 public final class QueueConstants {
     private static final String HEADER_PREFIX = "CamelAzureStorageQueue";
     // header names
+    @Metadata(description = "Returns non-parsed httpHeaders that can be used by the user.", javaType = "HttpHeaders")
     public static final String RAW_HTTP_HEADERS = HEADER_PREFIX + "RawHttpHeaders";
+    @Metadata(label = "producer", description = "(createQueue) Metadata to associate with the queue",
+              javaType = "Map<String,String>")
     public static final String METADATA = HEADER_PREFIX + "Metadata";
+    @Metadata(description = "The ID of the message.", javaType = "String")
     public static final String MESSAGE_ID = HEADER_PREFIX + "MessageId";
+    @Metadata(description = "The time the Message was inserted into the Queue.", javaType = "OffsetDateTime")
     public static final String INSERTION_TIME = HEADER_PREFIX + "InsertionTime";
+    @Metadata(description = "The time that the Message will expire and be automatically deleted.", javaType = "OffsetDateTime")
     public static final String EXPIRATION_TIME = HEADER_PREFIX + "ExpirationTime";
+    @Metadata(label = "producer",
+              description = "(deleteMessage, updateMessage) Unique identifier that must match for the message to be deleted or updated. "
+                            +
+                            "If deletion fails using this pop receipt then the message has been dequeued by another client.",
+              javaType = "String")
     public static final String POP_RECEIPT = HEADER_PREFIX + "PopReceipt";
+    @Metadata(description = "The time that the message will again become visible in the Queue.", javaType = "OffsetDateTime")
     public static final String TIME_NEXT_VISIBLE = HEADER_PREFIX + "TimeNextVisible";
+    @Metadata(description = "The number of times the message has been dequeued.", javaType = "long")
     public static final String DEQUEUE_COUNT = HEADER_PREFIX + "DequeueCount";
     // headers to be retrieved
+    @Metadata(label = "producer",
+              description = "(All) Specify the producer operation to execute, please see the doc on this page related to producer operation.",
+              javaType = "org.apache.camel.component.azure.storage.queue.QueueOperationDefinition")
     public static final String QUEUE_OPERATION = HEADER_PREFIX + "Operation";
+    @Metadata(label = "producer", description = "(All) Override the queue name.", javaType = "String")
     public static final String QUEUE_NAME = HEADER_PREFIX + "Name";
+    @Metadata(label = "producer", description = "(listQueues) Options for listing queues", javaType = "QueuesSegmentOptions")
     public static final String QUEUES_SEGMENT_OPTIONS = HEADER_PREFIX + "SegmentOptions";
+    @Metadata(label = "producer",
+              description = "(All) An optional timeout value beyond which a `RuntimeException` will be raised.",
+              javaType = "Duration")
     public static final String TIMEOUT = HEADER_PREFIX + "Timeout";
+    @Metadata(label = "producer",
+              description = "(receiveMessages, peekMessages) Maximum number of messages to get, if there are less messages exist in the queue than requested all the messages will be returned. "
+                            +
+                            "If left empty only 1 message will be retrieved, the allowed range is 1 to 32 messages.",
+              javaType = "Integer")
     public static final String MAX_MESSAGES = HEADER_PREFIX + "MaxMessages";
+    @Metadata(label = "producer",
+              description = "(sendMessage, receiveMessages, updateMessage) The timeout period for how long the message is invisible in the queue. "
+                            +
+                            "If unset the value will default to 0 and the message will be instantly visible. The timeout must be between 0 seconds and 7 days.",
+              javaType = "Duration")
     public static final String VISIBILITY_TIMEOUT = HEADER_PREFIX + "VisibilityTimeout";
+    @Metadata(label = "producer", description = "(sendMessage) How long the message will stay alive in the queue. " +
+                                                "If unset the value will default to 7 days, if -1 is passed the message will not expire. The time to live must be -1 or any positive number.",
+              javaType = "Duration")
     public static final String TIME_TO_LIVE = HEADER_PREFIX + "TimeToLive";
+    @Metadata(label = "producer",
+              description = "(sendMessage) When is set to `true`, the queue will be automatically created when sending messages to the queue.",
+              javaType = "boolean")
     public static final String CREATE_QUEUE = HEADER_PREFIX + "CreateQueue";
 
     private QueueConstants() {
diff --git a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueEndpoint.java b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueEndpoint.java
index a28c20c..f3cae26 100644
--- a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueEndpoint.java
+++ b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueEndpoint.java
@@ -32,7 +32,8 @@ import org.apache.camel.util.ObjectHelper;
  * Stores and retrieves messages to/from Azure Storage Queue.
  */
 @UriEndpoint(firstVersion = "3.3.0", scheme = "azure-storage-queue", title = "Azure Storage Queue Service",
-             syntax = "azure-storage-queue:accountName/queueName", category = { Category.CLOUD, Category.MESSAGING })
+             syntax = "azure-storage-queue:accountName/queueName", category = { Category.CLOUD, Category.MESSAGING },
+             headersClass = QueueConstants.class)
 public class QueueEndpoint extends ScheduledPollEndpoint {
 
     private QueueServiceClient queueServiceClient;