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/04/05 18:02:11 UTC

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

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 67385348cd4 CAMEL-17792: Add documentation about the message headers (S) (#7372)
67385348cd4 is described below

commit 67385348cd4c5cfd1fc3e20bd951d3423bf80714
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Tue Apr 5 20:01:59 2022 +0200

    CAMEL-17792: Add documentation about the message headers (S) (#7372)
    
    ## Motivation
    
    It is now possible to document a message header using annotations, let's leverage it to document the headers of the components.
    
     ## Modifications
    
    For all the components whose name starts with a S
    
    * Document the messages headers using the annotations
    * Migrate the existing documentation of message headers to use the annotations instead
    * Move constants corresponding to headers to the headers class.
    * Re-define shared constants like those in `Exchange` in the local constants class to be able to document it within the context of current component.
    
    * CAMEL-17792: Add doc about the message headers of camel-saga
    * CAMEL-17792: Add doc about the message headers of camel-salesforce
    * CAMEL-17792: Add doc about the message headers of camel-sap-netweaver
    * CAMEL-17792: Add doc about the message headers of camel-scheduler
    * CAMEL-17792: Add doc about the message headers of camel-servicenow
    * CAMEL-17792: Add doc about the message headers of camel-sjms
    * CAMEL-17792: Add doc about the message headers of camel-sjms2
    * CAMEL-17792: Add doc about the message headers of camel-smpp
    * CAMEL-17792: Add doc about the message headers of camel-solr
    * CAMEL-17792: Add doc about the message headers of camel-spark
    * CAMEL-17792: Add doc about the message headers of camel-splunk-hec
    * CAMEL-17792: Add doc about the message headers of camel-spring-integration
    * CAMEL-17792: Add doc about the message headers of camel-spring-rabbitmq
    * CAMEL-17792: Add doc about the message headers of camel-spring-redis
    * CAMEL-17792: Add doc about the message headers of camel-spring-ws
    * CAMEL-17792: Add doc about the message headers of camel-sql
    * CAMEL-17792: Add doc about the message headers of camel-ssh
    * CAMEL-17792: Add doc about the message headers of camel-stitch
    * CAMEL-17792: Add doc about the message headers of camel-stream
    * CAMEL-17792: Add doc about the message headers of camel-stringtemplate
---
 .../org/apache/camel/component/saga/saga.json      |   3 +
 .../camel-saga/src/main/docs/saga-component.adoc   |   3 +
 .../camel/component/saga/SagaConstants.java}       |  13 +-
 .../apache/camel/component/saga/SagaEndpoint.java  |   2 +-
 .../apache/camel/component/saga/SagaProducer.java  |   2 +-
 .../camel/component/salesforce/salesforce.json     |  20 ++
 .../src/main/docs/salesforce-component.adoc        |   4 +-
 .../component/salesforce/SalesforceConstants.java  |  63 +++++
 .../component/salesforce/SalesforceConsumer.java   |  46 ++--
 .../component/salesforce/SalesforceEndpoint.java   |   3 +-
 .../component/sap/netweaver/sap-netweaver.json     |   5 +
 .../src/main/docs/sap-netweaver-component.adoc     |  16 +-
 .../sap/netweaver/NetWeaverConstants.java          |  11 +
 .../component/sap/netweaver/NetWeaverEndpoint.java |   3 +-
 .../component/sap/netweaver/NetWeaverProducer.java |   4 +-
 .../camel/component/scheduler/scheduler.json       |   3 +
 .../src/main/docs/scheduler-component.adoc         |   4 +-
 .../component/scheduler/SchedulerConstants.java}   |  13 +-
 .../component/scheduler/SchedulerConsumer.java     |   2 +-
 .../component/scheduler/SchedulerEndpoint.java     |   2 +-
 .../camel/component/servicenow/servicenow.json     |  65 +++++
 .../src/main/docs/servicenow-component.adoc        |  76 +-----
 .../component/servicenow/ServiceNowConstants.java  | 150 ++++++++++++
 .../component/servicenow/ServiceNowEndpoint.java   |   3 +-
 .../component/servicenow/ServiceNowParams.java     | 118 +++++-----
 .../org/apache/camel/component/sjms/sjms.json      |   6 +
 .../camel-sjms/src/main/docs/sjms-component.adoc   |   4 +-
 .../apache/camel/component/sjms/SjmsConstants.java |  15 ++
 .../apache/camel/component/sjms/SjmsEndpoint.java  |   2 +-
 .../apache/camel/component/sjms/SjmsProducer.java  |  10 +-
 .../camel/component/sjms/jms/JmsBinding.java       |   8 +-
 .../component/sjms/reply/ReplyManagerSupport.java  |   3 +-
 .../org/apache/camel/component/sjms2/sjms2.json    |   6 +
 .../camel-sjms2/src/main/docs/sjms2-component.adoc |   4 +-
 .../camel/component/sjms2/Sjms2Endpoint.java       |   4 +-
 .../org/apache/camel/component/smpp/smpp.json      |  44 ++++
 .../org/apache/camel/component/smpp/smpps.json     |  44 ++++
 .../camel-smpp/src/main/docs/smpp-component.adoc   | 261 +--------------------
 .../apache/camel/component/smpp/SmppConstants.java | 212 +++++++++++++++++
 .../apache/camel/component/smpp/SmppEndpoint.java  |   2 +-
 .../org/apache/camel/component/solr/solr.json      |   7 +
 .../org/apache/camel/component/solr/solrCloud.json |   7 +
 .../org/apache/camel/component/solr/solrs.json     |   7 +
 .../camel-solr/src/main/docs/solr-component.adoc   |  15 +-
 .../apache/camel/component/solr/SolrConstants.java |   9 +
 .../apache/camel/component/solr/SolrEndpoint.java  |   2 +-
 .../apache/camel/component/solr/SolrProducer.java  |   4 +-
 .../org/apache/camel/component/spark/spark.json    |   6 +
 .../camel-spark/src/main/docs/spark-component.adoc |  12 +-
 .../camel/component/spark/SparkConstants.java      |  12 +-
 .../camel/component/spark/SparkEndpoint.java       |   2 +-
 .../camel/component/splunkhec/splunk-hec.json      |   3 +
 .../src/main/docs/splunk-hec-component.adoc        |  16 +-
 .../component/splunkhec/SplunkHECConstants.java    |   6 +
 .../component/splunkhec/SplunkHECEndpoint.java     |   3 +-
 .../spring/integration/spring-integration.json     |   5 +
 .../main/docs/spring-integration-component.adoc    |   4 +-
 .../integration/SpringIntegrationConstants.java}   |  18 +-
 .../integration/SpringIntegrationEndpoint.java     |   2 +-
 .../integration/SpringIntegrationProducer.java     |   3 +-
 .../integration/adapter/CamelSourceAdapter.java    |   4 +-
 .../integration/adapter/CamelTargetAdapter.java    |   5 +-
 .../component/springrabbit/spring-rabbitmq.json    |   4 +
 .../src/main/docs/spring-rabbitmq-component.adoc   |   6 +-
 .../springrabbit/SpringRabbitMQConstants.java      |   4 +
 .../springrabbit/SpringRabbitMQEndpoint.java       |   2 +-
 .../apache/camel/component/redis/spring-redis.json |  31 +++
 .../src/main/docs/spring-redis-component.adoc      |   4 +-
 .../camel/component/redis/RedisConstants.java      |  31 +++
 .../camel/component/redis/RedisEndpoint.java       |   2 +-
 .../camel/component/spring/ws/spring-ws.json       |   9 +
 .../src/main/docs/spring-ws-component.adoc         |   8 +-
 .../spring/ws/SpringWebserviceConstants.java       |  31 ++-
 .../spring/ws/SpringWebserviceConsumer.java        |   8 +-
 .../spring/ws/SpringWebserviceEndpoint.java        |   2 +-
 .../spring/ws/filter/impl/BasicMessageFilter.java  |   4 +-
 .../org/apache/camel/component/sql/sql.json        |  10 +
 .../camel/component/sql/stored/sql-stored.json     |   5 +
 .../camel-sql/src/main/docs/sql-component.adoc     |  40 +---
 .../src/main/docs/sql-stored-component.adoc        |   6 +-
 .../apache/camel/component/sql/SqlConstants.java   |  25 +-
 .../apache/camel/component/sql/SqlEndpoint.java    |   2 +-
 .../component/sql/stored/SqlStoredConstants.java   |   8 +-
 .../component/sql/stored/SqlStoredEndpoint.java    |   2 +-
 .../org/apache/camel/component/ssh/ssh.json        |   6 +
 .../camel-ssh/src/main/docs/ssh-component.adoc     |   4 +-
 .../apache/camel/component/ssh/SshConstants.java   |  19 ++
 .../apache/camel/component/ssh/SshConsumer.java    |   4 +-
 .../apache/camel/component/ssh/SshEndpoint.java    |   3 +-
 .../apache/camel/component/ssh/SshProducer.java    |   4 +-
 .../org/apache/camel/component/ssh/SshResult.java  |  14 +-
 .../component/ssh/SshComponentConsumerTest.java    |   4 +-
 .../ssh/SshComponentKnownHostEdDSATest.java        |   4 +-
 .../component/ssh/SshComponentKnownHostTest.java   |  16 +-
 .../component/ssh/SshComponentProducerTest.java    |   8 +-
 .../org/apache/camel/component/stitch/stitch.json  |   8 +
 .../src/main/docs/stitch-component.adoc            |  35 +--
 .../camel/component/stitch/StitchConstants.java    |  20 ++
 .../camel/component/stitch/StitchEndpoint.java     |   3 +-
 .../org/apache/camel/component/stream/stream.json  |   4 +
 .../src/main/docs/stream-component.adoc            |   4 +-
 .../camel/component/stream/StreamConstants.java    |   4 +
 .../camel/component/stream/StreamEndpoint.java     |   2 +-
 .../component/stringtemplate/string-template.json  |   5 +
 .../src/main/docs/string-template-component.adoc   |  16 +-
 .../stringtemplate/StringTemplateConstants.java    |   6 +
 .../stringtemplate/StringTemplateEndpoint.java     |   2 +-
 107 files changed, 1198 insertions(+), 652 deletions(-)

diff --git a/components/camel-saga/src/generated/resources/org/apache/camel/component/saga/saga.json b/components/camel-saga/src/generated/resources/org/apache/camel/component/saga/saga.json
index 3378676e671..a95b801e470 100644
--- a/components/camel-saga/src/generated/resources/org/apache/camel/component/saga/saga.json
+++ b/components/camel-saga/src/generated/resources/org/apache/camel/component/saga/saga.json
@@ -25,6 +25,9 @@
     "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": {
+    "Long-Running-Action": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The long running action" }
+  },
   "properties": {
     "action": { "kind": "path", "displayName": "Action", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.saga.SagaEndpoint.SagaEndpointAction", "enum": [ "COMPLETE", "COMPENSATE" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Action to execute (complete or compensate)" },
     "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-saga/src/main/docs/saga-component.adoc b/components/camel-saga/src/main/docs/saga-component.adoc
index af889f275ba..74e7953a804 100644
--- a/components/camel-saga/src/main/docs/saga-component.adoc
+++ b/components/camel-saga/src/main/docs/saga-component.adoc
@@ -39,5 +39,8 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaConstants.java
similarity index 69%
copy from components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
copy to components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaConstants.java
index 0f0b72c1513..fc1d10bd52c 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
+++ b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaConstants.java
@@ -14,12 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.sap.netweaver;
+package org.apache.camel.component.saga;
 
-public final class NetWeaverConstants {
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
 
-    public static final String COMMAND = "CamelNetWeaverCommand";
+public final class SagaConstants {
+
+    @Metadata(description = "The long running action", javaType = "String")
+    public static final String SAGA_LONG_RUNNING_ACTION = Exchange.SAGA_LONG_RUNNING_ACTION;
+
+    private SagaConstants() {
 
-    private NetWeaverConstants() {
     }
 }
diff --git a/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaEndpoint.java b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaEndpoint.java
index fe55894b2dc..38f8bc2ec42 100644
--- a/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaEndpoint.java
+++ b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaEndpoint.java
@@ -30,7 +30,7 @@ import org.apache.camel.util.ObjectHelper;
  * Execute custom actions within a route using the Saga EIP.
  */
 @UriEndpoint(firstVersion = "2.21.0", scheme = "saga", title = "Saga", syntax = "saga:action", producerOnly = true,
-             category = { Category.CORE, Category.ENDPOINT })
+             category = { Category.CORE, Category.ENDPOINT }, headersClass = SagaConstants.class)
 public class SagaEndpoint extends DefaultEndpoint {
 
     public enum SagaEndpointAction {
diff --git a/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaProducer.java b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaProducer.java
index 7f65dc66ebc..81e29360d50 100644
--- a/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaProducer.java
+++ b/components/camel-saga/src/main/java/org/apache/camel/component/saga/SagaProducer.java
@@ -47,7 +47,7 @@ public class SagaProducer extends DefaultAsyncProducer {
 
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
-        String currentSaga = exchange.getIn().getHeader(Exchange.SAGA_LONG_RUNNING_ACTION, String.class);
+        String currentSaga = exchange.getIn().getHeader(SagaConstants.SAGA_LONG_RUNNING_ACTION, String.class);
         if (currentSaga == null) {
             exchange.setException(
                     new IllegalStateException("Current exchange is not bound to a saga context: cannot complete"));
diff --git a/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json b/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json
index 091c3cc98c9..015777f49b3 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json
+++ b/components/camel-salesforce/camel-salesforce-component/src/generated/resources/org/apache/camel/component/salesforce/salesforce.json
@@ -116,6 +116,26 @@
     "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" },
     "userName": { "kind": "property", "displayName": "User Name", "group": "security", "label": "common,security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Username used in OAuth flow to gain access to access token. It's easy to get started with password OAuth flow, but in general one should avoid it as it is deemed less secure than other flows." }
   },
+  "headers": {
+    "CamelSalesforceReplayId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The replay id." },
+    "CamelSalesforceChangeEventSchema": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The change event schema." },
+    "CamelSalesforceEventType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The event type." },
+    "CamelSalesforceCommitTimestamp": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The commit timestamp." },
+    "CamelSalesforceCommitUser": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The commit user." },
+    "CamelSalesforceCommitNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The commit number." },
+    "CamelSalesforceRecordIds": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The record ids." },
+    "CamelSalesforceChangeType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The change type." },
+    "CamelSalesforceChangeOrigin": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The change origin." },
+    "CamelSalesforceTransactionKey": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The transaction key." },
+    "CamelSalesforceSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number." },
+    "CamelSalesforceIsTransactionEnd": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Is transaction end." },
+    "CamelSalesforceEntityName": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The entity name." },
+    "CamelSalesforcePlatformEventSchema": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The platform event schema." },
+    "CamelSalesforceCreatedDate": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "java.time.ZonedDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The created date." },
+    "CamelSalesforceTopicName": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The topic name." },
+    "CamelSalesforceChannel": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The channel." },
+    "CamelSalesforceClientId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The client id." }
+  },
   "properties": {
     "operationName": { "kind": "path", "displayName": "Operation Name", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.salesforce.internal.OperationName", "enum": [ "getVersions", "getResources", "getGlobalObjects", "getBasicInfo", "getDescription", "getSObject", "createSObject", "updateSObject", "deleteSObject", "getSObjectWithId", "upsertSObject", "deleteSObjectWithId", "getBlobField", "query", "queryMore", "queryA [...]
     "topicName": { "kind": "path", "displayName": "Topic Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the topic\/channel to use" },
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
index 35d417fa45e..db55f8c0d37 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
@@ -67,7 +67,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Authenticating to Salesforce [[AuthenticatingToSalesforce]]
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConstants.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConstants.java
new file mode 100644
index 00000000000..e0b2781ad44
--- /dev/null
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConstants.java
@@ -0,0 +1,63 @@
+/*
+ * 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.salesforce;
+
+import org.apache.camel.spi.Metadata;
+
+public final class SalesforceConstants {
+
+    @Metadata(label = "consumer", description = "The replay id.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_REPLAY_ID = "CamelSalesforceReplayId";
+    @Metadata(label = "consumer", description = "The change event schema.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_CHANGE_EVENT_SCHEMA = "CamelSalesforceChangeEventSchema";
+    @Metadata(label = "consumer", description = "The event type.", javaType = "String")
+    public static final String HEADER_SALESFORCE_EVENT_TYPE = "CamelSalesforceEventType";
+    @Metadata(label = "consumer", description = "The commit timestamp.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_COMMIT_TIMESTAMP = "CamelSalesforceCommitTimestamp";
+    @Metadata(label = "consumer", description = "The commit user.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_COMMIT_USER = "CamelSalesforceCommitUser";
+    @Metadata(label = "consumer", description = "The commit number.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_COMMIT_NUMBER = "CamelSalesforceCommitNumber";
+    @Metadata(label = "consumer", description = "The record ids.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_RECORD_IDS = "CamelSalesforceRecordIds";
+    @Metadata(label = "consumer", description = "The change type.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_CHANGE_TYPE = "CamelSalesforceChangeType";
+    @Metadata(label = "consumer", description = "The change origin.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_CHANGE_ORIGIN = "CamelSalesforceChangeOrigin";
+    @Metadata(label = "consumer", description = "The transaction key.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_TRANSACTION_KEY = "CamelSalesforceTransactionKey";
+    @Metadata(label = "consumer", description = "The sequence number.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_SEQUENCE_NUMBER = "CamelSalesforceSequenceNumber";
+    @Metadata(label = "consumer", description = "Is transaction end.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_IS_TRANSACTION_END = "CamelSalesforceIsTransactionEnd";
+    @Metadata(label = "consumer", description = "The entity name.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_ENTITY_NAME = "CamelSalesforceEntityName";
+    @Metadata(label = "consumer", description = "The platform event schema.", javaType = "Object")
+    public static final String HEADER_SALESFORCE_PLATFORM_EVENT_SCHEMA = "CamelSalesforcePlatformEventSchema";
+    @Metadata(label = "consumer", description = "The created date.", javaType = "java.time.ZonedDateTime")
+    public static final String HEADER_SALESFORCE_CREATED_DATE = "CamelSalesforceCreatedDate";
+    @Metadata(label = "consumer", description = "The topic name.", javaType = "String")
+    public static final String HEADER_SALESFORCE_TOPIC_NAME = "CamelSalesforceTopicName";
+    @Metadata(label = "consumer", description = "The channel.", javaType = "String")
+    public static final String HEADER_SALESFORCE_CHANNEL = "CamelSalesforceChannel";
+    @Metadata(label = "consumer", description = "The client id.", javaType = "String")
+    public static final String HEADER_SALESFORCE_CLIENT_ID = "CamelSalesforceClientId";
+
+    private SalesforceConstants() {
+
+    }
+}
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
index 56ac9ae05ae..bda83acabb9 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceConsumer.java
@@ -149,24 +149,24 @@ public class SalesforceConsumer extends DefaultConsumer {
         final Map<String, Object> event = (Map<String, Object>) data.get(EVENT_PROPERTY);
         final Object replayId = event.get(REPLAY_ID_PROPERTY);
         if (replayId != null) {
-            in.setHeader("CamelSalesforceReplayId", replayId);
+            in.setHeader(SalesforceConstants.HEADER_SALESFORCE_REPLAY_ID, replayId);
         }
 
-        in.setHeader("CamelSalesforceChangeEventSchema", data.get(SCHEMA_PROPERTY));
-        in.setHeader("CamelSalesforceEventType", topicName.substring(topicName.lastIndexOf('/') + 1));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CHANGE_EVENT_SCHEMA, data.get(SCHEMA_PROPERTY));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_EVENT_TYPE, topicName.substring(topicName.lastIndexOf('/') + 1));
 
         final Map<String, Object> payload = (Map<String, Object>) data.get(PAYLOAD_PROPERTY);
         final Map<String, Object> changeEventHeader = (Map<String, Object>) payload.get("ChangeEventHeader");
-        in.setHeader("CamelSalesforceChangeType", changeEventHeader.get("changeType"));
-        in.setHeader("CamelSalesforceChangeOrigin", changeEventHeader.get("changeOrigin"));
-        in.setHeader("CamelSalesforceTransactionKey", changeEventHeader.get("transactionKey"));
-        in.setHeader("CamelSalesforceSequenceNumber", changeEventHeader.get("sequenceNumber"));
-        in.setHeader("CamelSalesforceIsTransactionEnd", changeEventHeader.get("isTransactionEnd"));
-        in.setHeader("CamelSalesforceCommitTimestamp", changeEventHeader.get("commitTimestamp"));
-        in.setHeader("CamelSalesforceCommitUser", changeEventHeader.get("commitUser"));
-        in.setHeader("CamelSalesforceCommitNumber", changeEventHeader.get("commitNumber"));
-        in.setHeader("CamelSalesforceEntityName", changeEventHeader.get("entityName"));
-        in.setHeader("CamelSalesforceRecordIds", changeEventHeader.get("recordIds"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CHANGE_TYPE, changeEventHeader.get("changeType"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CHANGE_ORIGIN, changeEventHeader.get("changeOrigin"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_TRANSACTION_KEY, changeEventHeader.get("transactionKey"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_SEQUENCE_NUMBER, changeEventHeader.get("sequenceNumber"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_IS_TRANSACTION_END, changeEventHeader.get("isTransactionEnd"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_COMMIT_TIMESTAMP, changeEventHeader.get("commitTimestamp"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_COMMIT_USER, changeEventHeader.get("commitUser"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_COMMIT_NUMBER, changeEventHeader.get("commitNumber"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_ENTITY_NAME, changeEventHeader.get("entityName"));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_RECORD_IDS, changeEventHeader.get("recordIds"));
 
         if (rawPayload) {
             // getJSON is used for raw payload
@@ -187,16 +187,16 @@ public class SalesforceConsumer extends DefaultConsumer {
 
         final Object replayId = event.get(REPLAY_ID_PROPERTY);
         if (replayId != null) {
-            in.setHeader("CamelSalesforceReplayId", replayId);
+            in.setHeader(SalesforceConstants.HEADER_SALESFORCE_REPLAY_ID, replayId);
         }
 
-        in.setHeader("CamelSalesforcePlatformEventSchema", data.get(SCHEMA_PROPERTY));
-        in.setHeader("CamelSalesforceEventType", topicName.substring(topicName.lastIndexOf('/') + 1));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_PLATFORM_EVENT_SCHEMA, data.get(SCHEMA_PROPERTY));
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_EVENT_TYPE, topicName.substring(topicName.lastIndexOf('/') + 1));
 
         final Object payload = data.get(PAYLOAD_PROPERTY);
 
         final PlatformEvent platformEvent = objectMapper.convertValue(payload, PlatformEvent.class);
-        in.setHeader("CamelSalesforceCreatedDate", platformEvent.getCreated());
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CREATED_DATE, platformEvent.getCreated());
 
         if (rawPayload) {
             // getJSON is used for raw payload
@@ -218,11 +218,11 @@ public class SalesforceConsumer extends DefaultConsumer {
         final Object createdDate = event.get(CREATED_DATE_PROPERTY);
         final Object replayId = event.get(REPLAY_ID_PROPERTY);
 
-        in.setHeader("CamelSalesforceTopicName", topicName);
-        in.setHeader("CamelSalesforceEventType", eventType);
-        in.setHeader("CamelSalesforceCreatedDate", createdDate);
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_TOPIC_NAME, topicName);
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_EVENT_TYPE, eventType);
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CREATED_DATE, createdDate);
         if (replayId != null) {
-            in.setHeader("CamelSalesforceReplayId", replayId);
+            in.setHeader(SalesforceConstants.HEADER_SALESFORCE_REPLAY_ID, replayId);
         }
 
         // get SObject
@@ -251,10 +251,10 @@ public class SalesforceConsumer extends DefaultConsumer {
     }
 
     void setHeaders(final org.apache.camel.Message in, final Message message) {
-        in.setHeader("CamelSalesforceChannel", message.getChannel());
+        in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CHANNEL, message.getChannel());
         final String clientId = message.getClientId();
         if (ObjectHelper.isNotEmpty(clientId)) {
-            in.setHeader("CamelSalesforceClientId", clientId);
+            in.setHeader(SalesforceConstants.HEADER_SALESFORCE_CLIENT_ID, clientId);
         }
     }
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java
index 3084597938b..f9ad7993098 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceEndpoint.java
@@ -34,7 +34,8 @@ import org.slf4j.LoggerFactory;
  * Communicate with Salesforce using Java DTOs.
  */
 @UriEndpoint(firstVersion = "2.12.0", scheme = "salesforce", title = "Salesforce",
-             syntax = "salesforce:operationName:topicName", category = { Category.CLOUD, Category.API, Category.CRM })
+             syntax = "salesforce:operationName:topicName", category = { Category.CLOUD, Category.API, Category.CRM },
+             headersClass = SalesforceConstants.class)
 public class SalesforceEndpoint extends DefaultEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(SalesforceEndpoint.class);
diff --git a/components/camel-sap-netweaver/src/generated/resources/org/apache/camel/component/sap/netweaver/sap-netweaver.json b/components/camel-sap-netweaver/src/generated/resources/org/apache/camel/component/sap/netweaver/sap-netweaver.json
index dde775d3cab..f89a8ee31f6 100644
--- a/components/camel-sap-netweaver/src/generated/resources/org/apache/camel/component/sap/netweaver/sap-netweaver.json
+++ b/components/camel-sap-netweaver/src/generated/resources/org/apache/camel/component/sap/netweaver/sap-netweaver.json
@@ -25,6 +25,11 @@
     "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": {
+    "CamelNetWeaverCommand": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The command to execute in http:\/\/msdn.microsoft.com\/en-us\/library\/cc956153.aspxMS ADO.Net Data Service format." },
+    "CamelHttpPath": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http path." },
+    "Accept": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The media type." }
+  },
   "properties": {
     "url": { "kind": "path", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Url to the SAP net-weaver gateway server." },
     "flatternMap": { "kind": "parameter", "displayName": "Flattern Map", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If the JSON Map contains only a single entry, then flattern by storing that single entry value as the message body." },
diff --git a/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc b/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
index e68a43ff2db..6a593599263 100644
--- a/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
+++ b/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
@@ -63,19 +63,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Message Headers
-
-The following headers can be used by the producer.
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Name |Type |Description
-
-|`CamelNetWeaverCommand` |`String` |*Mandatory*: The command to execute in
-http://msdn.microsoft.com/en-us/library/cc956153.aspx[MS ADO.Net Data
-Service] format.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Examples
 
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
index 0f0b72c1513..ff8231888df 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
+++ b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
@@ -16,9 +16,20 @@
  */
 package org.apache.camel.component.sap.netweaver;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public final class NetWeaverConstants {
 
+    @Metadata(description = "The command to execute in\n" +
+                            "http://msdn.microsoft.com/en-us/library/cc956153.aspx[MS ADO.Net Data\n" +
+                            "Service] format.",
+              javaType = "String", required = true)
     public static final String COMMAND = "CamelNetWeaverCommand";
+    @Metadata(description = "The http path.", javaType = "String")
+    public static final String HTTP_PATH = Exchange.HTTP_PATH;
+    @Metadata(description = "The media type.", javaType = "String")
+    public static final String ACCEPT = "Accept";
 
     private NetWeaverConstants() {
     }
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverEndpoint.java b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverEndpoint.java
index 51ddd692b96..2ddeca3abfd 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverEndpoint.java
+++ b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverEndpoint.java
@@ -31,7 +31,8 @@ import org.apache.camel.support.DefaultEndpoint;
  * Send requests to SAP NetWeaver Gateway using HTTP.
  */
 @UriEndpoint(firstVersion = "2.12.0", scheme = "sap-netweaver", title = "SAP NetWeaver", syntax = "sap-netweaver:url",
-             producerOnly = true, category = { Category.SAP, Category.CLOUD, Category.API })
+             producerOnly = true, category = { Category.SAP, Category.CLOUD, Category.API },
+             headersClass = NetWeaverConstants.class)
 public class NetWeaverEndpoint extends DefaultEndpoint {
 
     @UriPath
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
index 83ba2200bf7..9ff7fa8cd3d 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
+++ b/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverProducer.java
@@ -49,9 +49,9 @@ public class NetWeaverProducer extends DefaultProducer {
         String command = ExchangeHelper.getMandatoryHeader(exchange, NetWeaverConstants.COMMAND, String.class);
 
         Exchange httpExchange = getEndpoint().createExchange();
-        httpExchange.getIn().setHeader(Exchange.HTTP_PATH, command);
+        httpExchange.getIn().setHeader(NetWeaverConstants.HTTP_PATH, command);
         if (getEndpoint().isJson()) {
-            httpExchange.getIn().setHeader("Accept", "application/json");
+            httpExchange.getIn().setHeader(NetWeaverConstants.ACCEPT, "application/json");
         }
 
         LOG.debug("Calling SAP Net-Weaver {} with command {}", http, command);
diff --git a/components/camel-scheduler/src/generated/resources/org/apache/camel/component/scheduler/scheduler.json b/components/camel-scheduler/src/generated/resources/org/apache/camel/component/scheduler/scheduler.json
index 816ed4bb60d..082bb111caa 100644
--- a/components/camel-scheduler/src/generated/resources/org/apache/camel/component/scheduler/scheduler.json
+++ b/components/camel-scheduler/src/generated/resources/org/apache/camel/component/scheduler/scheduler.json
@@ -26,6 +26,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 [...]
     "poolSize": { "kind": "property", "displayName": "Pool Size", "group": "scheduler", "label": "scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Number of core threads in the thread pool used by the scheduling thread pool. Is by default using a single thread" }
   },
+  "headers": {
+    "CamelMessageTimestamp": { "kind": "header", "displayName": "", "group": "consumer", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the message" }
+  },
   "properties": {
     "name": { "kind": "path", "displayName": "Name", "group": "consumer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the scheduler" },
     "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-scheduler/src/main/docs/scheduler-component.adoc b/components/camel-scheduler/src/main/docs/scheduler-component.adoc
index 72f4b92eee8..8926b2821ce 100644
--- a/components/camel-scheduler/src/main/docs/scheduler-component.adoc
+++ b/components/camel-scheduler/src/main/docs/scheduler-component.adoc
@@ -50,7 +50,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == More information
 
diff --git a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConstants.java
similarity index 69%
copy from components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
copy to components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConstants.java
index 0f0b72c1513..56bbd5436d0 100644
--- a/components/camel-sap-netweaver/src/main/java/org/apache/camel/component/sap/netweaver/NetWeaverConstants.java
+++ b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConstants.java
@@ -14,12 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.sap.netweaver;
+package org.apache.camel.component.scheduler;
 
-public final class NetWeaverConstants {
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
 
-    public static final String COMMAND = "CamelNetWeaverCommand";
+public final class SchedulerConstants {
+
+    @Metadata(description = "The timestamp of the message", javaType = "long")
+    public static final String MESSAGE_TIMESTAMP = Exchange.MESSAGE_TIMESTAMP;
+
+    private SchedulerConstants() {
 
-    private NetWeaverConstants() {
     }
 }
diff --git a/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConsumer.java b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConsumer.java
index bea04d66214..d869b76c239 100644
--- a/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConsumer.java
+++ b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerConsumer.java
@@ -56,7 +56,7 @@ public class SchedulerConsumer extends ScheduledPollConsumer {
 
         Date now = new Date();
         exchange.setProperty(Exchange.TIMER_FIRED_TIME, now);
-        exchange.getIn().setHeader(Exchange.MESSAGE_TIMESTAMP, now.getTime());
+        exchange.getIn().setHeader(SchedulerConstants.MESSAGE_TIMESTAMP, now.getTime());
 
         if (LOG.isTraceEnabled()) {
             LOG.trace("Timer {} is firing", getEndpoint().getName());
diff --git a/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerEndpoint.java b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerEndpoint.java
index b460e5a0684..e5d33df54b5 100644
--- a/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerEndpoint.java
+++ b/components/camel-scheduler/src/main/java/org/apache/camel/component/scheduler/SchedulerEndpoint.java
@@ -35,7 +35,7 @@ import org.apache.camel.support.ScheduledPollEndpoint;
  * component uses JDK ScheduledExecutorService. Where as the timer uses a JDK Timer.
  */
 @UriEndpoint(firstVersion = "2.15.0", scheme = "scheduler", title = "Scheduler", syntax = "scheduler:name",
-             consumerOnly = true, category = { Category.CORE, Category.SCHEDULING })
+             consumerOnly = true, category = { Category.CORE, Category.SCHEDULING }, headersClass = SchedulerConstants.class)
 public class SchedulerEndpoint extends ScheduledPollEndpoint {
 
     @UriPath
diff --git a/components/camel-servicenow/camel-servicenow-component/src/generated/resources/org/apache/camel/component/servicenow/servicenow.json b/components/camel-servicenow/camel-servicenow-component/src/generated/resources/org/apache/camel/component/servicenow/servicenow.json
index 4d6ab01b095..1df4837911e 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/generated/resources/org/apache/camel/component/servicenow/servicenow.json
+++ b/components/camel-servicenow/camel-servicenow-component/src/generated/resources/org/apache/camel/component/servicenow/servicenow.json
@@ -72,6 +72,71 @@
     "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." },
     "userName": { "kind": "property", "displayName": "User Name", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.servicenow.ServiceNowConfiguration", "configurationField": "configuration", "description": "ServiceNow user account name, MUST be provided" }
   },
+  "headers": {
+    "CamelServiceNowResource": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The resource to access" },
+    "CamelServiceNowAction": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The action to perform" },
+    "CamelServiceNowActionSubject": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The action subject" },
+    "CamelServiceNowModel": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Class", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The data model" },
+    "CamelServiceNowRequestModel": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Class", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The request data model" },
+    "CamelServiceNowResponseModel": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Class", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The response data model" },
+    "CamelServiceNowContentType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type" },
+    "CamelServiceNowContentMeta": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content meta" },
+    "CamelServiceNowResponseMeta": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The response meta" },
+    "CamelServiceNowApiVersion": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The REST API version" },
+    "CamelServiceNowResponseType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Class", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type of the response" },
+    "CamelServiceNowRetrieveTargetRecord": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to retrieve the target record." },
+    "CamelServiceNowTable": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The default table" },
+    "CamelServiceNowSysId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys id" },
+    "CamelServiceNowUserSysId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The user sys id" },
+    "CamelServiceNowUserId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The user id" },
+    "CamelServiceNowCartItemId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cart item id" },
+    "CamelServiceNowFileName": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The file name" },
+    "CamelServiceNowTableSysId": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The table sys id" },
+    "CamelServiceNowEncryptionContext": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The encryption context" },
+    "CamelServiceNowCategory": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param category" },
+    "CamelServiceNowType": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param type" },
+    "CamelServiceNowCatalog": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param catalog" },
+    "CamelServiceNowQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param query" },
+    "CamelServiceNowDisplayValue": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "Return the display value (true), actual value (false), or both (all) for reference fields" },
+    "CamelServiceNowInputDisplayValue": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "True to set raw value of input fields" },
+    "CamelServiceNowExcludeReferenceLink": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "True to exclude Table API links for reference fields" },
+    "CamelServiceNowFields": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param fields" },
+    "CamelServiceNowLimit": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param limit" },
+    "CamelServiceNowText": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param text" },
+    "CamelServiceNowOffset": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param offset" },
+    "CamelServiceNowView": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param view" },
+    "CamelServiceNowSuppressAutoSysField": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "True to suppress auto generation of system fields" },
+    "CamelServiceNowSuppressPaginationHeader": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit" },
+    "CamelServiceNowMinFields": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param min fields" },
+    "CamelServiceNowMaxFields": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param max fields" },
+    "CamelServiceNowSumFields": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param sum fields" },
+    "CamelServiceNowAvgFields": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param avg fields" },
+    "CamelServiceNowCount": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param count" },
+    "CamelServiceNowGroupBy": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param group by" },
+    "CamelServiceNowOrderBy": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param order by" },
+    "CamelServiceNowHaving": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param having" },
+    "CamelServiceNowUUID": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param UUID" },
+    "CamelServiceNowBreakdown": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param breakdown" },
+    "CamelServiceNowIncludeScores": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return all scores for a scorecard. If a value is not specified, this parameter defaults to false and returns only the most recent score value." },
+    "CamelServiceNowIncludeScoreNotes": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added." },
+    "CamelServiceNowIncludeAggregates": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to always return all available aggregates for an indicator, including when an aggregate has already been applied. If a value is not specified, this parameter defaults to false and returns no aggregates." },
+    "CamelServiceNowIncludeAvailableBreakdowns": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified, this parameter defaults to false and returns no breakdowns." },
+    "CamelServiceNowIncludeAvailableAggregates": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified, this parameter defaults to false and returns no aggregates." },
+    "CamelServiceNowFavorites": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return only scorecards that are favorites of the querying user." },
+    "CamelServiceNowKey": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return only scorecards for key indicators." },
+    "CamelServiceNowTarget": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set this parameter to true to return only scorecards that have a target." },
+    "CamelServiceNowDisplay": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "true", "description": "Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value." },
+    "CamelServiceNowPerPage": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "10", "description": "Enter the maximum number of scorecards each query can return. By default this value is 10, and the maximum is 100." },
+    "CamelServiceNowSortBy": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specify the value to use when sorting results. By default, queries sort records by value." },
+    "CamelServiceNowSortDir": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Specify the sort direction, ascending or descending. By default, queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order." },
+    "CamelServiceNowContains": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param contains." },
+    "CamelServiceNowTags": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param tags." },
+    "CamelServiceNowPage": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param page." },
+    "CamelServiceNowElementsFilter": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param elements filter." },
+    "CamelServiceNowBreakdownRelation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param breakdown relation." },
+    "CamelServiceNowDataSource": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sys param data source." },
+    "CamelServiceNowTopLevelOnly": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Gets only those categories whose parent is a catalog." }
+  },
   "properties": {
     "instanceName": { "kind": "path", "displayName": "Instance Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The ServiceNow instance name" },
     "display": { "kind": "parameter", "displayName": "Display", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "false", "true", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.servicenow.ServiceNowConfiguration", "configurationField": "configuration", "description": "Set this parameter to true to return only scorecards where the in [...]
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/docs/servicenow-component.adoc b/components/camel-servicenow/camel-servicenow-component/src/main/docs/servicenow-component.adoc
index a370b3f9777..1a91cef4704 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/docs/servicenow-component.adoc
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/docs/servicenow-component.adoc
@@ -50,79 +50,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Headers
-
-[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
-|===
-|Name |Type |ServiceNow API Parameter |Endpoint option |Description
-|CamelServiceNowResource |String | - | - | The resource to access
-|CamelServiceNowAction |String | - | - | The action to perform
-|CamelServiceNowActionSubject | - | - | String |The subject to which the action should be applied
-|CamelServiceNowModel |Class | - | - | The data model
-|CamelServiceNowRequestModel |Class | - | - | The request data model
-|CamelServiceNowResponseModel |Class | - | - | The response data model
-|CamelServiceNowOffsetNext | - | - | - | -
-|CamelServiceNowOffsetPrev | - | - | - | -
-|CamelServiceNowOffsetFirst | - | - | - | -
-|CamelServiceNowOffsetLast | - | - | - | -
-|CamelServiceNowContentType | - | - | - | -
-|CamelServiceNowContentEncoding | - | - | - | -
-|CamelServiceNowContentMeta | - | - | - | -
-|CamelServiceNowSysId |String | sys_id | - | -
-|CamelServiceNowUserSysId |String | user_sysid | - | -
-|CamelServiceNowUserId |String | user_id | - | -
-|CamelServiceNowCartItemId |String | cart_item_id | - | -
-|CamelServiceNowFileName |String | file_name | - | -
-|CamelServiceNowTable |String | table_name | - | -
-|CamelServiceNowTableSysId |String | table_sys_id | - | -
-|CamelServiceNowEncryptionContext | String | encryption_context | - | -
-|CamelServiceNowCategory | String | sysparm_category  | - | -
-|CamelServiceNowType |String | sysparm_type | - | -
-|CamelServiceNowCatalog | String | sysparm_catalog | - | -
-|CamelServiceNowQuery |String | sysparm_query | - | -
-|CamelServiceNowDisplayValue |String | sysparm_display_value | displayValue  | -
-|CamelServiceNowInputDisplayValue |Boolean | sysparm_input_display_value | inputDisplayValue  | -
-|CamelServiceNowExcludeReferenceLink |Boolean | sysparm_exclude_reference_link | excludeReferenceLink  | -
-|CamelServiceNowFields |String | sysparm_fields | - | -
-|CamelServiceNowLimit |Integer | sysparm_limit | - | -
-|CamelServiceNowText | String | sysparm_text | - | -
-|CamelServiceNowOffset | Integer | sysparm_offset | - | -
-|CamelServiceNowView |String | sysparm_view | - | -
-|CamelServiceNowSuppressAutoSysField |Boolean | sysparm_suppress_auto_sys_field | suppressAutoSysField | -
-|CamelServiceNowSuppressPaginationHeader | Booleab | sysparm_suppress_pagination_header | suppressPaginationHeader | -
-|CamelServiceNowMinFields |String | sysparm_min_fields | - | -
-|CamelServiceNowMaxFields |String | sysparm_max_fields | - | -
-|CamelServiceNowSumFields |String | sysparm_sum_fields | - | -
-|CamelServiceNowAvgFields |String | sysparm_avg_fields | - | -
-|CamelServiceNowCount |Boolean | sysparm_count | - | -
-|CamelServiceGroupBy |String | sysparm_group_by | - | -
-|CamelServiceOrderBy |String | sysparm_order_by | - | -
-|CamelServiceHaving |String | sysparm_having | - | -
-|CamelServiceNowUUID |String | sysparm_uuid | - | -
-|CamelServiceNowBreakdown| String| sysparm_breakdown | - | -
-|CamelServiceNowIncludeScores| Boolean | sysparm_include_scores | includeScores | -
-|CamelServiceNowIncludeScoreNotes | Boolean | sysparm_include_score_notes | includeScoreNotes | -
-|CamelServiceNowIncludeAggregates | Boolean | sysparm_include_aggregates | includeAggregates | -
-|CamelServiceNowIncludeAvailableBreakdowns | Boolean | sysparm_include_available_breakdowns | includeAvailableBreakdowns | -
-|CamelServiceNowIncludeAvailableAggregates | Boolean | sysparm_include_available_aggregates | includeAvailableAggregates | -
-|CamelServiceNowFavorites | Boolean | sysparm_favorites | favorites | -
-|CamelServiceNowKey  | Boolean | sysparm_key | key | -
-|CamelServiceNowTarget | Boolean | sysparm_target | target | -
-|CamelServiceNowDisplay | String | sysparm_display | display | -
-|CamelServiceNowPerPage | Integer | sysparm_per_page | perPage | -
-|CamelServiceNowSortBy | String | sysparm_sortby | sortBy | -
-|CamelServiceNowSortDir | String | sysparm_sortdit | sortDir | -
-|CamelServiceNowContains | String | sysparm_contains | - | -
-|CamelServiceNowTags | String | sysparm_tags | - | -
-|CamelServiceNowPage | String | sysparm_page | - | -
-|CamelServiceNowElementsFilter | String | sysparm_elements_filter | - | -
-|CamelServiceNowBreakdownRelation | String | sysparm_breakdown_relation | - | -
-|CamelServiceNowDataSource | String | sysparm_data_source | - | -
-|CamelServiceNowTopLevelOnly | Boolean | sysparm_top_level_only | topLevelOnly | -
-|CamelServiceNowApiVersion | String | - | - | The REST API version
-|CamelServiceNowResponseMeta | Map | - | - | Meta data provided along with a response
-|===
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 [[ServiceNow-Fuji]]
 [cols="10%a,10%a,10%a,70%a", options="header"]
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
index 59a2baadf74..d1e91f85d74 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowConstants.java
@@ -16,29 +16,179 @@
  */
 package org.apache.camel.component.servicenow;
 
+import org.apache.camel.spi.Metadata;
+
 public final class ServiceNowConstants {
     public static final String COMPONENT_SCHEME = "servicenow";
 
     public static final String CAMEL_HEADER_PREFIX = "CamelServiceNow";
 
+    @Metadata(description = "The resource to access", javaType = "String")
     public static final String RESOURCE = "CamelServiceNowResource";
+    @Metadata(description = "The action to perform", javaType = "String")
     public static final String ACTION = "CamelServiceNowAction";
+    @Metadata(description = "The action subject", javaType = "String")
     public static final String ACTION_SUBJECT = "CamelServiceNowActionSubject";
+    @Metadata(description = "The data model", javaType = "Class")
     public static final String MODEL = "CamelServiceNowModel";
+    @Metadata(description = "The request data model", javaType = "Class")
     public static final String REQUEST_MODEL = "CamelServiceNowRequestModel";
+    @Metadata(description = "The response data model", javaType = "Class")
     public static final String RESPONSE_MODEL = "CamelServiceNowResponseModel";
     public static final String OFFSET_NEXT = "CamelServiceNowOffsetNext";
     public static final String OFFSET_PREV = "CamelServiceNowOffsetPrev";
     public static final String OFFSET_FIRST = "CamelServiceNowOffsetFirst";
     public static final String OFFSET_LAST = "CamelServiceNowOffsetLast";
+    @Metadata(description = "The content type", javaType = "String")
     public static final String CONTENT_TYPE = "CamelServiceNowContentType";
     public static final String CONTENT_ENCODING = "CamelServiceNowContentEncoding";
+    @Metadata(description = "The content meta", javaType = "Map")
     public static final String CONTENT_META = "CamelServiceNowContentMeta";
+    @Metadata(description = "The response meta", javaType = "Map")
     public static final String RESPONSE_META = "CamelServiceNowResponseMeta";
+    @Metadata(description = "The REST API version", javaType = "String")
     public static final String API_VERSION = "CamelServiceNowApiVersion";
+    @Metadata(description = "The type of the response", javaType = "Class")
     public static final String RESPONSE_TYPE = "CamelServiceNowResponseType";
+    @Metadata(description = "Set this parameter to true to retrieve the target record.", javaType = "Boolean")
     public static final String RETRIEVE_TARGET_RECORD = "CamelServiceNowRetrieveTargetRecord";
 
+    @Metadata(description = "The default table", javaType = "String")
+    public static final String PARAM_TABLE_NAME = "CamelServiceNowTable";
+    @Metadata(description = "The sys id", javaType = "String")
+    public static final String PARAM_SYS_ID = "CamelServiceNowSysId";
+    @Metadata(description = "The user sys id", javaType = "String")
+    public static final String PARAM_USER_SYS_ID = "CamelServiceNowUserSysId";
+    @Metadata(description = "The user id", javaType = "String")
+    public static final String PARAM_USER_ID = "CamelServiceNowUserId";
+    @Metadata(description = "The cart item id", javaType = "String")
+    public static final String PARAM_CART_ITEM_ID = "CamelServiceNowCartItemId";
+    @Metadata(description = "The file name", javaType = "String")
+    public static final String PARAM_FILE_NAME = "CamelServiceNowFileName";
+    @Metadata(description = "The table sys id", javaType = "String")
+    public static final String PARAM_TABLE_SYS_ID = "CamelServiceNowTableSysId";
+    @Metadata(description = "The encryption context", javaType = "String")
+    public static final String PARAM_ENCRYPTION_CONTEXT = "CamelServiceNowEncryptionContext";
+    @Metadata(description = "The sys param category", javaType = "String")
+    public static final String SYSPARM_CATEGORY = "CamelServiceNowCategory";
+    @Metadata(description = "The sys param type", javaType = "String")
+    public static final String SYSPARM_TYPE = "CamelServiceNowType";
+    @Metadata(description = "The sys param catalog", javaType = "String")
+    public static final String SYSPARM_CATALOG = "CamelServiceNowCatalog";
+    @Metadata(description = "The sys param query", javaType = "String")
+    public static final String SYSPARM_QUERY = "CamelServiceNowQuery";
+    @Metadata(description = "Return the display value (true), actual value (false), or both (all) for reference fields",
+              javaType = "String", defaultValue = "false")
+    public static final String SYSPARM_DISPLAY_VALUE = "CamelServiceNowDisplayValue";
+    @Metadata(description = "True to set raw value of input fields", javaType = "Boolean", defaultValue = "false")
+    public static final String SYSPARM_INPUT_DISPLAY_VALUE = "CamelServiceNowInputDisplayValue";
+    @Metadata(description = "True to exclude Table API links for reference fields", javaType = "Boolean",
+              defaultValue = "false")
+    public static final String SYSPARM_EXCLUDE_REFERENCE_LINK = "CamelServiceNowExcludeReferenceLink";
+    @Metadata(description = "The sys param fields", javaType = "String")
+    public static final String SYSPARM_FIELDS = "CamelServiceNowFields";
+    @Metadata(description = "The sys param limit", javaType = "Integer")
+    public static final String SYSPARM_LIMIT = "CamelServiceNowLimit";
+    @Metadata(description = "The sys param text", javaType = "String")
+    public static final String SYSPARM_TEXT = "CamelServiceNowText";
+    @Metadata(description = "The sys param offset", javaType = "Integer")
+    public static final String SYSPARM_OFFSET = "CamelServiceNowOffset";
+    @Metadata(description = "The sys param view", javaType = "String")
+    public static final String SYSPARM_VIEW = "CamelServiceNowView";
+    @Metadata(description = "True to suppress auto generation of system fields", javaType = "Boolean", defaultValue = "false")
+    public static final String SYSPARM_SUPPRESS_AUTO_SYS_FIELD = "CamelServiceNowSuppressAutoSysField";
+    @Metadata(description = "Set this value to true to remove the Link header from the response. The Link header allows you to request\n"
+                            +
+                            " additional pages of data when the number of records matching your query exceeds the query limit",
+              javaType = "Boolean")
+    public static final String SYSPARM_SUPPRESS_PAGINATION_HEADER = "CamelServiceNowSuppressPaginationHeader";
+    @Metadata(description = "The sys param min fields", javaType = "String")
+    public static final String SYSPARM_MIN_FIELDS = "CamelServiceNowMinFields";
+    @Metadata(description = "The sys param max fields", javaType = "String")
+    public static final String SYSPARM_MAX_FIELDS = "CamelServiceNowMaxFields";
+    @Metadata(description = "The sys param sum fields", javaType = "String")
+    public static final String SYSPARM_SUM_FIELDS = "CamelServiceNowSumFields";
+    @Metadata(description = "The sys param avg fields", javaType = "String")
+    public static final String SYSPARM_AVG_FIELDS = "CamelServiceNowAvgFields";
+    @Metadata(description = "The sys param count", javaType = "Boolean")
+    public static final String SYSPARM_COUNT = "CamelServiceNowCount";
+    @Metadata(description = "The sys param group by", javaType = "String")
+    public static final String SYSPARM_GROUP_BY = "CamelServiceNowGroupBy";
+    @Metadata(description = "The sys param order by", javaType = "String")
+    public static final String SYSPARM_ORDER_BY = "CamelServiceNowOrderBy";
+    @Metadata(description = "The sys param having", javaType = "String")
+    public static final String SYSPARM_HAVING = "CamelServiceNowHaving";
+    @Metadata(description = "The sys param UUID", javaType = "String")
+    public static final String SYSPARM_UUID = "CamelServiceNowUUID";
+    @Metadata(description = "The sys param breakdown", javaType = "String")
+    public static final String SYSPARM_BREAKDOWN = "CamelServiceNowBreakdown";
+    @Metadata(description = "Set this parameter to true to return all scores for a scorecard. If a value is not specified, this parameter\n"
+                            +
+                            " defaults to false and returns only the most recent score value.",
+              javaType = "Boolean")
+    public static final String SYSPARM_INCLUDE_SCORES = "CamelServiceNowIncludeScores";
+    @Metadata(description = "Set this parameter to true to return all notes associated with the score. The note element contains the note text\n"
+                            +
+                            " as well as the author and timestamp when the note was added.",
+              javaType = "Boolean")
+    public static final String SYSPARM_INCLUDE_SCORE_NOTES = "CamelServiceNowIncludeScoreNotes";
+    @Metadata(description = "Set this parameter to true to always return all available aggregates for an indicator, including when an\n"
+                            +
+                            " aggregate has already been applied. If a value is not specified, this parameter defaults to false and returns no\n"
+                            +
+                            " aggregates.",
+              javaType = "Boolean")
+    public static final String SYSPARM_INCLUDE_AGGREGATES = "CamelServiceNowIncludeAggregates";
+    @Metadata(description = "Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified, this\n"
+                            +
+                            " parameter defaults to false and returns no breakdowns.",
+              javaType = "Boolean")
+    public static final String SYSPARM_INCLUDE_AVAILABLE_BREAKDOWNS = "CamelServiceNowIncludeAvailableBreakdowns";
+    @Metadata(description = "Set this parameter to true to return all available aggregates for an indicator when no aggregate has been\n"
+                            +
+                            " applied. If a value is not specified, this parameter defaults to false and returns no aggregates.",
+              javaType = "Boolean")
+    public static final String SYSPARM_INCLUDE_AVAILABLE_AGGREGATES = "CamelServiceNowIncludeAvailableAggregates";
+    @Metadata(description = "Set this parameter to true to return only scorecards that are favorites of the querying user.",
+              javaType = "Boolean")
+    public static final String SYSPARM_FAVORITES = "CamelServiceNowFavorites";
+    @Metadata(description = "Set this parameter to true to return only scorecards for key indicators.", javaType = "Boolean")
+    public static final String SYSPARM_KEY = "CamelServiceNowKey";
+    @Metadata(description = "Set this parameter to true to return only scorecards that have a target.", javaType = "Boolean")
+    public static final String SYSPARM_TARGET = "CamelServiceNowTarget";
+    @Metadata(description = "Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this\n"
+                            +
+                            " parameter to all to return scorecards with any Display field value.",
+              javaType = "String", defaultValue = "true")
+    public static final String SYSPARM_DISPLAY = "CamelServiceNowDisplay";
+    @Metadata(description = "Enter the maximum number of scorecards each query can return. By default this value is 10, and the maximum is\n"
+                            +
+                            " 100.",
+              javaType = "Integer", defaultValue = "10")
+    public static final String SYSPARM_PER_PAGE = "CamelServiceNowPerPage";
+    @Metadata(description = "Specify the value to use when sorting results. By default, queries sort records by value.",
+              javaType = "String")
+    public static final String SYSPARM_SORT_BY = "CamelServiceNowSortBy";
+    @Metadata(description = "Specify the sort direction, ascending or descending. By default, queries sort records in descending order. Use\n"
+                            +
+                            " sysparm_sortdir=asc to sort in ascending order.",
+              javaType = "String")
+    public static final String SYSPARM_SORT_DIR = "CamelServiceNowSortDir";
+    @Metadata(description = "The sys param contains.", javaType = "String")
+    public static final String SYSPARM_CONTAINS = "CamelServiceNowContains";
+    @Metadata(description = "The sys param tags.", javaType = "String")
+    public static final String SYSPARM_TAGS = "CamelServiceNowTags";
+    @Metadata(description = "The sys param page.", javaType = "String")
+    public static final String SYSPARM_PAGE = "CamelServiceNowPage";
+    @Metadata(description = "The sys param elements filter.", javaType = "String")
+    public static final String SYSPARM_ELEMENTS_FILTER = "CamelServiceNowElementsFilter";
+    @Metadata(description = "The sys param breakdown relation.", javaType = "String")
+    public static final String SYSPARM_BREAKDOWN_RELATION = "CamelServiceNowBreakdownRelation";
+    @Metadata(description = "The sys param data source.", javaType = "String")
+    public static final String SYSPARM_DATA_SOURCE = "CamelServiceNowDataSource";
+    @Metadata(description = "Gets only those categories whose parent is a catalog.", javaType = "Boolean")
+    public static final String SYSPARM_TOP_LEVEL_ONLY = "CamelServiceNowTopLevelOnly";
+
     public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
     public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
     public static final String DEFAULT_DATE_TIME_FORMAT = DEFAULT_DATE_FORMAT + " " + DEFAULT_TIME_FORMAT;
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowEndpoint.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowEndpoint.java
index 9aa2d5b57ce..ad7af9c0117 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowEndpoint.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowEndpoint.java
@@ -32,7 +32,8 @@ import org.slf4j.LoggerFactory;
  * Interact with <a href="http://www.servicenow.com/">ServiceNow</a> via its REST API.
  */
 @UriEndpoint(firstVersion = "2.18.0", scheme = "servicenow", title = "ServiceNow", syntax = "servicenow:instanceName",
-             producerOnly = true, category = { Category.API, Category.CLOUD, Category.MANAGEMENT })
+             producerOnly = true, category = { Category.API, Category.CLOUD, Category.MANAGEMENT },
+             headersClass = ServiceNowConstants.class)
 public class ServiceNowEndpoint extends DefaultEndpoint {
     private static final Logger LOGGER = LoggerFactory.getLogger(ServiceNowEndpoint.class);
 
diff --git a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowParams.java b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowParams.java
index e60fbc60d2c..f9b2aa2081c 100644
--- a/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowParams.java
+++ b/components/camel-servicenow/camel-servicenow-component/src/main/java/org/apache/camel/component/servicenow/ServiceNowParams.java
@@ -23,67 +23,73 @@ import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 
 public enum ServiceNowParams implements ServiceNowParam {
-    PARAM_SYS_ID("sys_id", "CamelServiceNowSysId", String.class),
-    PARAM_USER_SYS_ID("user_sysid", "CamelServiceNowUserSysId", String.class),
-    PARAM_USER_ID("user_id", "CamelServiceNowUserId", String.class),
-    PARAM_CART_ITEM_ID("cart_item_id", "CamelServiceNowCartItemId", String.class),
-    PARAM_FILE_NAME("file_name", "CamelServiceNowFileName", String.class),
-    PARAM_TABLE_NAME("table_name", "CamelServiceNowTable", String.class),
-    PARAM_TABLE_SYS_ID("table_sys_id", "CamelServiceNowTableSysId", String.class),
-    PARAM_ENCRYPTION_CONTEXT("encryption_context", "CamelServiceNowEncryptionContext", String.class),
-    SYSPARM_CATEGORY("sysparm_category", "CamelServiceNowCategory", String.class),
-    SYSPARM_TYPE("sysparm_type", "CamelServiceNowType", String.class),
-    SYSPARM_CATALOG("sysparm_catalog", "CamelServiceNowCatalog", String.class),
-    SYSPARM_QUERY("sysparm_query", "CamelServiceNowQuery", String.class),
-    SYSPARM_DISPLAY_VALUE("sysparm_display_value", "CamelServiceNowDisplayValue", String.class,
+    PARAM_SYS_ID("sys_id", ServiceNowConstants.PARAM_SYS_ID, String.class),
+    PARAM_USER_SYS_ID("user_sysid", ServiceNowConstants.PARAM_USER_SYS_ID, String.class),
+    PARAM_USER_ID("user_id", ServiceNowConstants.PARAM_USER_ID, String.class),
+    PARAM_CART_ITEM_ID("cart_item_id", ServiceNowConstants.PARAM_CART_ITEM_ID, String.class),
+    PARAM_FILE_NAME("file_name", ServiceNowConstants.PARAM_FILE_NAME, String.class),
+    PARAM_TABLE_NAME("table_name", ServiceNowConstants.PARAM_TABLE_NAME, String.class),
+    PARAM_TABLE_SYS_ID("table_sys_id", ServiceNowConstants.PARAM_TABLE_SYS_ID, String.class),
+    PARAM_ENCRYPTION_CONTEXT("encryption_context", ServiceNowConstants.PARAM_ENCRYPTION_CONTEXT, String.class),
+    SYSPARM_CATEGORY("sysparm_category", ServiceNowConstants.SYSPARM_CATEGORY, String.class),
+    SYSPARM_TYPE("sysparm_type", ServiceNowConstants.SYSPARM_TYPE, String.class),
+    SYSPARM_CATALOG("sysparm_catalog", ServiceNowConstants.SYSPARM_CATALOG, String.class),
+    SYSPARM_QUERY("sysparm_query", ServiceNowConstants.SYSPARM_QUERY, String.class),
+    SYSPARM_DISPLAY_VALUE("sysparm_display_value", ServiceNowConstants.SYSPARM_DISPLAY_VALUE, String.class,
                           ServiceNowConfiguration::getDisplayValue),
-    SYSPARM_INPUT_DISPLAY_VALUE("sysparm_input_display_value", "CamelServiceNowInputDisplayValue", Boolean.class,
+    SYSPARM_INPUT_DISPLAY_VALUE("sysparm_input_display_value", ServiceNowConstants.SYSPARM_INPUT_DISPLAY_VALUE, Boolean.class,
                                 ServiceNowConfiguration::getInputDisplayValue),
-    SYSPARM_EXCLUDE_REFERENCE_LINK("sysparm_exclude_reference_link", "CamelServiceNowExcludeReferenceLink", Boolean.class,
-                                   ServiceNowConfiguration::getExcludeReferenceLink),
-    SYSPARM_FIELDS("sysparm_fields", "CamelServiceNowFields", String.class),
-    SYSPARM_LIMIT("sysparm_limit", "CamelServiceNowLimit", Integer.class),
-    SYSPARM_TEXT("sysparm_text", "CamelServiceNowText", String.class),
-    SYSPARM_OFFSET("sysparm_offset", "CamelServiceNowOffset", Integer.class),
-    SYSPARM_VIEW("sysparm_view", "CamelServiceNowView", String.class),
-    SYSPARM_SUPPRESS_AUTO_SYS_FIELD("sysparm_suppress_auto_sys_field", "CamelServiceNowSuppressAutoSysField", Boolean.class,
-                                    ServiceNowConfiguration::getSuppressAutoSysField),
-    SYSPARM_SUPPRESS_PAGINATION_HEADER("sysparm_suppress_pagination_header", "CamelServiceNowSuppressPaginationHeader",
-                                       Boolean.class, ServiceNowConfiguration::getSuppressPaginationHeader),
-    SYSPARM_MIN_FIELDS("sysparm_min_fields", "CamelServiceNowMinFields", String.class),
-    SYSPARM_MAX_FIELDS("sysparm_max_fields", "CamelServiceNowMaxFields", String.class),
-    SYSPARM_SUM_FIELDS("sysparm_sum_fields", "CamelServiceNowSumFields", String.class),
-    SYSPARM_AVG_FIELDS("sysparm_avg_fields", "CamelServiceNowAvgFields", String.class),
-    SYSPARM_COUNT("sysparm_count", "CamelServiceNowCount", Boolean.class),
-    SYSPARM_GROUP_BY("sysparm_group_by", "CamelServiceNowGroupBy", String.class),
-    SYSPARM_ORDER_BY("sysparm_order_by", "CamelServiceNowOrderBy", String.class),
-    SYSPARM_HAVING("sysparm_having", "CamelServiceNowHaving", String.class),
-    SYSPARM_UUID("sysparm_uuid", "CamelServiceNowUUID", String.class),
-    SYSPARM_BREAKDOWN("sysparm_breakdown", "CamelServiceNowBreakdown", String.class),
-    SYSPARM_INCLUDE_SCORES("sysparm_include_scores", "CamelServiceNowIncludeScores", Boolean.class,
+    SYSPARM_EXCLUDE_REFERENCE_LINK("sysparm_exclude_reference_link", ServiceNowConstants.SYSPARM_EXCLUDE_REFERENCE_LINK,
+                                   Boolean.class, ServiceNowConfiguration::getExcludeReferenceLink),
+    SYSPARM_FIELDS("sysparm_fields", ServiceNowConstants.SYSPARM_FIELDS, String.class),
+    SYSPARM_LIMIT("sysparm_limit", ServiceNowConstants.SYSPARM_LIMIT, Integer.class),
+    SYSPARM_TEXT("sysparm_text", ServiceNowConstants.SYSPARM_TEXT, String.class),
+    SYSPARM_OFFSET("sysparm_offset", ServiceNowConstants.SYSPARM_OFFSET, Integer.class),
+    SYSPARM_VIEW("sysparm_view", ServiceNowConstants.SYSPARM_VIEW, String.class),
+    SYSPARM_SUPPRESS_AUTO_SYS_FIELD("sysparm_suppress_auto_sys_field", ServiceNowConstants.SYSPARM_SUPPRESS_AUTO_SYS_FIELD,
+                                    Boolean.class, ServiceNowConfiguration::getSuppressAutoSysField),
+    SYSPARM_SUPPRESS_PAGINATION_HEADER("sysparm_suppress_pagination_header",
+                                       ServiceNowConstants.SYSPARM_SUPPRESS_PAGINATION_HEADER, Boolean.class,
+                                       ServiceNowConfiguration::getSuppressPaginationHeader),
+    SYSPARM_MIN_FIELDS("sysparm_min_fields", ServiceNowConstants.SYSPARM_MIN_FIELDS, String.class),
+    SYSPARM_MAX_FIELDS("sysparm_max_fields", ServiceNowConstants.SYSPARM_MAX_FIELDS, String.class),
+    SYSPARM_SUM_FIELDS("sysparm_sum_fields", ServiceNowConstants.SYSPARM_SUM_FIELDS, String.class),
+    SYSPARM_AVG_FIELDS("sysparm_avg_fields", ServiceNowConstants.SYSPARM_AVG_FIELDS, String.class),
+    SYSPARM_COUNT("sysparm_count", ServiceNowConstants.SYSPARM_COUNT, Boolean.class),
+    SYSPARM_GROUP_BY("sysparm_group_by", ServiceNowConstants.SYSPARM_GROUP_BY, String.class),
+    SYSPARM_ORDER_BY("sysparm_order_by", ServiceNowConstants.SYSPARM_ORDER_BY, String.class),
+    SYSPARM_HAVING("sysparm_having", ServiceNowConstants.SYSPARM_HAVING, String.class),
+    SYSPARM_UUID("sysparm_uuid", ServiceNowConstants.SYSPARM_UUID, String.class),
+    SYSPARM_BREAKDOWN("sysparm_breakdown", ServiceNowConstants.SYSPARM_BREAKDOWN, String.class),
+    SYSPARM_INCLUDE_SCORES("sysparm_include_scores", ServiceNowConstants.SYSPARM_INCLUDE_SCORES, Boolean.class,
                            ServiceNowConfiguration::getIncludeScores),
-    SYSPARM_INCLUDE_SCORE_NOTES("sysparm_include_score_notes", "CamelServiceNowIncludeScoreNotes", Boolean.class,
+    SYSPARM_INCLUDE_SCORE_NOTES("sysparm_include_score_notes", ServiceNowConstants.SYSPARM_INCLUDE_SCORE_NOTES, Boolean.class,
                                 ServiceNowConfiguration::getIncludeScoreNotes),
-    SYSPARM_INCLUDE_AGGREGATES("sysparm_include_aggregates", "CamelServiceNowIncludeAggregates", Boolean.class,
+    SYSPARM_INCLUDE_AGGREGATES("sysparm_include_aggregates", ServiceNowConstants.SYSPARM_INCLUDE_AGGREGATES, Boolean.class,
                                ServiceNowConfiguration::getIncludeAggregates),
-    SYSPARM_INCLUDE_AVAILABLE_BREAKDOWNS("sysparm_include_available_breakdowns", "CamelServiceNowIncludeAvailableBreakdowns",
-                                         Boolean.class, ServiceNowConfiguration::getIncludeAvailableBreakdowns),
-    SYSPARM_INCLUDE_AVAILABLE_AGGREGATES("sysparm_include_available_aggregates", "CamelServiceNowIncludeAvailableAggregates",
-                                         Boolean.class, ServiceNowConfiguration::getIncludeAvailableAggregates),
-    SYSPARM_FAVORITES("sysparm_favorites", "CamelServiceNowFavorites", Boolean.class, ServiceNowConfiguration::getFavorites),
-    SYSPARM_KEY("sysparm_key", "CamelServiceNowKey", Boolean.class, ServiceNowConfiguration::getKey),
-    SYSPARM_TARGET("sysparm_target", "CamelServiceNowTarget", Boolean.class, ServiceNowConfiguration::getTarget),
-    SYSPARM_DISPLAY("sysparm_display", "CamelServiceNowDisplay", String.class, ServiceNowConfiguration::getDisplay),
-    SYSPARM_PER_PAGE("sysparm_per_page", "CamelServiceNowPerPage", Integer.class, ServiceNowConfiguration::getPerPage),
-    SYSPARM_SORT_BY("sysparm_sortby", "CamelServiceNowSortBy", String.class, ServiceNowConfiguration::getSortBy),
-    SYSPARM_SORT_DIR("sysparm_sortdir", "CamelServiceNowSortDir", String.class, ServiceNowConfiguration::getSortDir),
-    SYSPARM_CONTAINS("sysparm_contains", "CamelServiceNowContains", String.class),
-    SYSPARM_TAGS("sysparm_tags", "CamelServiceNowTags", String.class),
-    SYSPARM_PAGE("sysparm_page", "CamelServiceNowPage", String.class),
-    SYSPARM_ELEMENTS_FILTER("sysparm_elements_filter", "CamelServiceNowElementsFilter", String.class),
-    SYSPARM_BREAKDOWN_RELATION("sysparm_breakdown_relation", "CamelServiceNowBreakdownRelation", String.class),
-    SYSPARM_DATA_SOURCE("sysparm_data_source", "CamelServiceNowDataSource", String.class),
-    SYSPARM_TOP_LEVEL_ONLY("sysparm_top_level_only", "CamelServiceNowTopLevelOnly", Boolean.class,
+    SYSPARM_INCLUDE_AVAILABLE_BREAKDOWNS("sysparm_include_available_breakdowns",
+                                         ServiceNowConstants.SYSPARM_INCLUDE_AVAILABLE_BREAKDOWNS, Boolean.class,
+                                         ServiceNowConfiguration::getIncludeAvailableBreakdowns),
+    SYSPARM_INCLUDE_AVAILABLE_AGGREGATES("sysparm_include_available_aggregates",
+                                         ServiceNowConstants.SYSPARM_INCLUDE_AVAILABLE_AGGREGATES, Boolean.class,
+                                         ServiceNowConfiguration::getIncludeAvailableAggregates),
+    SYSPARM_FAVORITES("sysparm_favorites", ServiceNowConstants.SYSPARM_FAVORITES, Boolean.class,
+                      ServiceNowConfiguration::getFavorites),
+    SYSPARM_KEY("sysparm_key", ServiceNowConstants.SYSPARM_KEY, Boolean.class, ServiceNowConfiguration::getKey),
+    SYSPARM_TARGET("sysparm_target", ServiceNowConstants.SYSPARM_TARGET, Boolean.class, ServiceNowConfiguration::getTarget),
+    SYSPARM_DISPLAY("sysparm_display", ServiceNowConstants.SYSPARM_DISPLAY, String.class, ServiceNowConfiguration::getDisplay),
+    SYSPARM_PER_PAGE("sysparm_per_page", ServiceNowConstants.SYSPARM_PER_PAGE, Integer.class,
+                     ServiceNowConfiguration::getPerPage),
+    SYSPARM_SORT_BY("sysparm_sortby", ServiceNowConstants.SYSPARM_SORT_BY, String.class, ServiceNowConfiguration::getSortBy),
+    SYSPARM_SORT_DIR("sysparm_sortdir", ServiceNowConstants.SYSPARM_SORT_DIR, String.class,
+                     ServiceNowConfiguration::getSortDir),
+    SYSPARM_CONTAINS("sysparm_contains", ServiceNowConstants.SYSPARM_CONTAINS, String.class),
+    SYSPARM_TAGS("sysparm_tags", ServiceNowConstants.SYSPARM_TAGS, String.class),
+    SYSPARM_PAGE("sysparm_page", ServiceNowConstants.SYSPARM_PAGE, String.class),
+    SYSPARM_ELEMENTS_FILTER("sysparm_elements_filter", ServiceNowConstants.SYSPARM_ELEMENTS_FILTER, String.class),
+    SYSPARM_BREAKDOWN_RELATION("sysparm_breakdown_relation", ServiceNowConstants.SYSPARM_BREAKDOWN_RELATION, String.class),
+    SYSPARM_DATA_SOURCE("sysparm_data_source", ServiceNowConstants.SYSPARM_DATA_SOURCE, String.class),
+    SYSPARM_TOP_LEVEL_ONLY("sysparm_top_level_only", ServiceNowConstants.SYSPARM_TOP_LEVEL_ONLY, Boolean.class,
                            ServiceNowConfiguration::getTopLevelOnly);
 
     private final String id;
diff --git a/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json b/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
index eec96123fe6..0eff1123106 100644
--- a/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
+++ b/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
@@ -34,6 +34,12 @@
     "requestTimeoutCheckerInterval": { "kind": "property", "displayName": "Request Timeout Checker Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Configures how often Camel should check for timed out Exchanges when doing request\/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeou [...]
     "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": {
+    "CamelJMSDestinationName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
+    "CamelJmsRequestTimeout": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)." },
+    "JMSCorrelationID": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The correlation ID." },
+    "JMSReplyTo": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)" }
+  },
   "properties": {
     "destinationType": { "kind": "path", "displayName": "Destination Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "queue", "topic" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "queue", "description": "The kind of destination to use" },
     "destinationName": { "kind": "path", "displayName": "Destination Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
diff --git a/components/camel-sjms/src/main/docs/sjms-component.adoc b/components/camel-sjms/src/main/docs/sjms-component.adoc
index 89f29db34c7..ffc29cf11b8 100644
--- a/components/camel-sjms/src/main/docs/sjms-component.adoc
+++ b/components/camel-sjms/src/main/docs/sjms-component.adoc
@@ -85,7 +85,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Reuse endpoint and send to different destinations computed at runtime
 
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsConstants.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsConstants.java
index 55d36a7813c..09c22832c64 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsConstants.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsConstants.java
@@ -16,12 +16,27 @@
  */
 package org.apache.camel.component.sjms;
 
+import org.apache.camel.component.sjms.jms.JmsConstants;
+import org.apache.camel.spi.Metadata;
+
 public interface SjmsConstants {
 
     String JMS_MESSAGE_TYPE = "CamelJmsMessageType";
     String JMS_SESSION = "CamelJMSSession";
+    @Metadata(label = "producer", description = "DestinationName is a JMS queue or topic name. " +
+                                                "By default, the destinationName is interpreted as a queue name.",
+              javaType = "String")
     String JMS_DESTINATION_NAME = "CamelJMSDestinationName";
+    @Metadata(label = "producer",
+              description = "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds).",
+              javaType = "long")
     String JMS_REQUEST_TIMEOUT = "CamelJmsRequestTimeout";
     String JMS_DELIVERY_MODE = "CamelJmsDeliveryMode";
+    @Metadata(label = "producer", description = "The correlation ID.", javaType = "String")
+    String JMS_CORRELATION_ID = JmsConstants.JMS_CORRELATION_ID;
+    @Metadata(label = "producer",
+              description = "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)",
+              javaType = "String")
+    String JMS_REPLY_TO = JmsConstants.JMS_REPLY_TO;
 
 }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
index 693d3725bf2..c31a571febd 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
@@ -63,7 +63,7 @@ import org.apache.camel.util.StringHelper;
  * This component uses plain JMS API where as the jms component uses Spring JMS.
  */
 @UriEndpoint(firstVersion = "2.11.0", scheme = "sjms", title = "Simple JMS", syntax = "sjms:destinationType:destinationName",
-             category = { Category.MESSAGING })
+             category = { Category.MESSAGING }, headersClass = SjmsConstants.class)
 public class SjmsEndpoint extends DefaultEndpoint
         implements AsyncEndpoint, MultipleConsumersSupport, HeaderFilterStrategyAware {
 
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
index 1a779fce3cd..1575833f042 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
@@ -264,7 +264,7 @@ public class SjmsProducer extends DefaultAsyncProducer {
         final org.apache.camel.Message in = exchange.getIn();
 
         String destinationName = in.getHeader(SjmsConstants.JMS_DESTINATION_NAME, String.class);
-        // remove the header so it wont be propagated
+        // remove the header so it won't be propagated
         in.removeHeader(SjmsConstants.JMS_DESTINATION_NAME);
         if (destinationName == null) {
             destinationName = endpoint.getDestinationName();
@@ -276,13 +276,13 @@ public class SjmsProducer extends DefaultAsyncProducer {
         final long timeout
                 = exchange.getIn().getHeader(SjmsConstants.JMS_REQUEST_TIMEOUT, endpoint.getRequestTimeout(), long.class);
 
-        final String originalCorrelationId = in.getHeader("JMSCorrelationID", String.class);
+        final String originalCorrelationId = in.getHeader(SjmsConstants.JMS_CORRELATION_ID, String.class);
 
         boolean generateFreshCorrId = ObjectHelper.isEmpty(originalCorrelationId)
                 || originalCorrelationId.startsWith(GENERATED_CORRELATION_ID_PREFIX);
         if (generateFreshCorrId) {
             // we append the 'Camel-' prefix to know it was generated by us
-            in.setHeader("JMSCorrelationID", GENERATED_CORRELATION_ID_PREFIX + getUuidGenerator().generateUuid());
+            in.setHeader(SjmsConstants.JMS_CORRELATION_ID, GENERATED_CORRELATION_ID_PREFIX + getUuidGenerator().generateUuid());
         }
 
         MessageCreator messageCreator = new MessageCreator() {
@@ -307,7 +307,7 @@ public class SjmsProducer extends DefaultAsyncProducer {
 
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Using {}: {}, JMSReplyTo destination: {}, with request timeout: {} ms.",
-                            "JMSCorrelationID", correlationId, replyTo, timeout);
+                            SjmsConstants.JMS_CORRELATION_ID, correlationId, replyTo, timeout);
                 }
 
                 LOG.trace("Created javax.jms.Message: {}", answer);
@@ -359,7 +359,7 @@ public class SjmsProducer extends DefaultAsyncProducer {
                     // if the binding did not create the reply to then we have to try to create it here
                     if (jmsReplyTo == null) {
                         // prefer reply to from header over endpoint configured
-                        jmsReplyTo = exchange.getIn().getHeader("JMSReplyTo", String.class);
+                        jmsReplyTo = exchange.getIn().getHeader(SjmsConstants.JMS_REPLY_TO, String.class);
                         if (jmsReplyTo == null) {
                             jmsReplyTo = endpoint.getReplyTo();
                         }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
index 0eb9b4ccb96..e68d256f89e 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
@@ -133,7 +133,7 @@ public class JmsBinding {
         if (jmsMessage != null) {
             // lets populate the standard JMS message headers
             try {
-                map.put("JMSCorrelationID", jmsMessage.getJMSCorrelationID());
+                map.put(JmsConstants.JMS_CORRELATION_ID, jmsMessage.getJMSCorrelationID());
                 map.put("JMSCorrelationIDAsBytes", JmsMessageHelper.getJMSCorrelationIDAsBytes(jmsMessage));
                 map.put("JMSDeliveryMode", jmsMessage.getJMSDeliveryMode());
                 map.put("JMSDestination", jmsMessage.getJMSDestination());
@@ -143,7 +143,7 @@ public class JmsBinding {
                 map.put("JMSRedelivered", jmsMessage.getJMSRedelivered());
                 map.put("JMSTimestamp", jmsMessage.getJMSTimestamp());
 
-                map.put("JMSReplyTo", JmsMessageHelper.getJMSReplyTo(jmsMessage));
+                map.put(JmsConstants.JMS_REPLY_TO, JmsMessageHelper.getJMSReplyTo(jmsMessage));
                 map.put("JMSType", JmsMessageHelper.getJMSType(jmsMessage));
 
                 // this works around a bug in the ActiveMQ property handling
@@ -251,9 +251,9 @@ public class JmsBinding {
     public void appendJmsProperty(Message jmsMessage, Exchange exchange, String headerName, Object headerValue)
             throws JMSException {
         if (isStandardJMSHeader(headerName)) {
-            if (headerName.equals("JMSCorrelationID")) {
+            if (headerName.equals(JmsConstants.JMS_CORRELATION_ID)) {
                 jmsMessage.setJMSCorrelationID(ExchangeHelper.convertToType(exchange, String.class, headerValue));
-            } else if (headerName.equals("JMSReplyTo") && headerValue != null) {
+            } else if (headerName.equals(JmsConstants.JMS_REPLY_TO) && headerValue != null) {
                 if (headerValue instanceof String) {
                     // if the value is a String we must normalize it first, and must include the prefix
                     // as ActiveMQ requires that when converting the String to a javax.jms.Destination type
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
index da1c0672dd5..46447136f29 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
@@ -31,6 +31,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.component.sjms.MessageListenerContainer;
+import org.apache.camel.component.sjms.SjmsConstants;
 import org.apache.camel.component.sjms.SjmsEndpoint;
 import org.apache.camel.component.sjms.SjmsMessage;
 import org.apache.camel.component.sjms.jms.JmsMessageHelper;
@@ -183,7 +184,7 @@ public abstract class ReplyManagerSupport extends ServiceSupport implements Repl
                     // restore correlation id in case the remote server messed with it
                     if (holder.getOriginalCorrelationId() != null) {
                         JmsMessageHelper.setCorrelationId(message, holder.getOriginalCorrelationId());
-                        exchange.getOut().setHeader("JMSCorrelationID", holder.getOriginalCorrelationId());
+                        exchange.getOut().setHeader(SjmsConstants.JMS_CORRELATION_ID, holder.getOriginalCorrelationId());
                     }
                 }
             } finally {
diff --git a/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json b/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
index cf422b0d683..8aa44776a06 100644
--- a/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
+++ b/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
@@ -34,6 +34,12 @@
     "requestTimeoutCheckerInterval": { "kind": "property", "displayName": "Request Timeout Checker Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Configures how often Camel should check for timed out Exchanges when doing request\/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeou [...]
     "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": {
+    "CamelJMSDestinationName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
+    "CamelJmsRequestTimeout": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)." },
+    "JMSCorrelationID": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The correlation ID." },
+    "JMSReplyTo": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)" }
+  },
   "properties": {
     "destinationType": { "kind": "path", "displayName": "Destination Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "queue", "topic" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "queue", "description": "The kind of destination to use" },
     "destinationName": { "kind": "path", "displayName": "Destination Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
diff --git a/components/camel-sjms2/src/main/docs/sjms2-component.adoc b/components/camel-sjms2/src/main/docs/sjms2-component.adoc
index d4edb10639e..8f1769a7d1f 100644
--- a/components/camel-sjms2/src/main/docs/sjms2-component.adoc
+++ b/components/camel-sjms2/src/main/docs/sjms2-component.adoc
@@ -87,7 +87,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Reuse endpoint and send to different destinations computed at runtime
 
diff --git a/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java b/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
index a035ae095aa..d542f64407f 100644
--- a/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
+++ b/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.sjms2;
 import org.apache.camel.AsyncEndpoint;
 import org.apache.camel.Category;
 import org.apache.camel.Component;
+import org.apache.camel.component.sjms.SjmsConstants;
 import org.apache.camel.component.sjms.SjmsEndpoint;
 import org.apache.camel.component.sjms2.jms.Jms2ObjectFactory;
 import org.apache.camel.spi.UriEndpoint;
@@ -30,7 +31,8 @@ import org.apache.camel.spi.UriParam;
  * This component uses plain JMS 2.x API where as the jms component uses Spring JMS.
  */
 @UriEndpoint(firstVersion = "2.19.0", scheme = "sjms2", extendsScheme = "sjms", title = "Simple JMS2",
-             syntax = "sjms2:destinationType:destinationName", category = { Category.MESSAGING })
+             syntax = "sjms2:destinationType:destinationName", category = { Category.MESSAGING },
+             headersClass = SjmsConstants.class)
 public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
 
     @UriParam(label = "consumer", description = "Sets the topic subscription id, required for durable or shared topics.")
diff --git a/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpp.json b/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpp.json
index c134f749dd3..58ea2f7429a 100644
--- a/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpp.json
+++ b/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpp.json
@@ -65,6 +65,50 @@
     "systemId": { "kind": "property", "displayName": "System Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "defaultValue": "smppclient", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "The system id (username) for connecting to SMSC server." },
     "usingSSL": { "kind": "property", "displayName": "Using SSL", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Whether using SSL with the smpps protocol" }
   },
+  "headers": {
+    "CamelSmppAlphabet": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "For SubmitSm, SubmitMulti and ReplaceSm The data coding according to the SMPP 3.4 specification, section 5.2.19. Use the URI option alphabet settings above." },
+    "CamelSmppCommand": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The command" },
+    "CamelSmppCommandId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification, DeliverSm and DataSm The command id field identifies the particular SMPP PDU. For the complete list of defined values see chapter 5.1.2.1 in the smpp specification v3.4." },
+    "CamelSmppCommandStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for DataSm The Command status of the message." },
+    "CamelSmppDataCoding": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "For SubmitSm, SubmitMulti and ReplaceSm The data coding according to the SMPP 3.4 specification, section 5.2.19. Use the URI option alphabet settings above." },
+    "CamelSmppSplitter": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.smpp.SmppSplitter", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The splitter" },
+    "CamelSmppDelivered": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt Number of short messages delivered. This is only relevant where the original message was submitted to a distribution list.The value is padded with leading zeros if necessary." },
+    "CamelSmppDestAddr": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "List or String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the destination SME address(es). For mobile terminated messages, this is the directory number of the recipient MS. It must be a List for SubmitMulti and a String otherwise. Consume [...]
+    "CamelSmppDestAddrNpi": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the numeric plan indicator (NPI) to be used in the SME destination address parameters. Use the URI option sourceAddrNpi values defined above. Consumer: only for DataSm Defines the numeric [...]
+    "CamelSmppDestAddrTon": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the type of number (TON) to be used in the SME destination address parameters. Use the sourceAddrTon URI option values defined above. Consumer: only for DataSm Defines the type of number  [...]
+    "CamelSmppDoneDate": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt The time and date at which the short message reached it's final state. The format is as follows: YYMMDDhhmm." },
+    "CamelSmppEncoding": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti and DataSm. Specifies the encoding (character set name) of the bytes in the message body. If the message body is a string then this is not relevant because Java Strings are always Unicode. If the body is a byte array  [...]
+    "CamelSmppError": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or Map<String, List<Map<String, Object>>>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitMultiSm The errors which occurred by sending the short message(s) the form Map (messageID : (destAddr : address, error : errorCode)). Consumer: only for smsc DeliveryReceipt Where appropriate th [...]
+    "CamelSmppClass": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.jsmpp.bean.ESMClass", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "the ASM class" },
+    "CamelSmppEsmeAddr": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the destination ESME address. For mobile terminated messages, this is the directory number of the recipient MS." },
+    "CamelSmppEsmeAddrNpi": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the numeric plan indicator (NPI) to be used in the ESME originator address parameters. Use the URI option sourceAddrNpi values defined above." },
+    "CamelSmppEsmeAddrTon": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the type of number (TON) to be used in the ESME originator address parameters. Use the sourceAddrTon URI option values defined above." },
+    "CamelSmppFinalDate": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.util.Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The final date" },
+    "CamelSmppStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "org.jsmpp.util.DeliveryReceiptState", "enum": [ "ENROUTE", "DELIVRD", "EXPIRED", "DELETED", "UNDELIV", "ACCEPTD", "UNKNOWN", "REJECTD" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt: The final status of the message." },
+    "CamelSmppId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: The id to identify the submitted short message(s) for later use. In case of a ReplaceSm, QuerySm, CancelSm and DataSm this header value is a String. In case of a SubmitSm or SubmitMultiSm this header value is a List. Consumer: only for sm [...]
+    "CamelSmppMessageState": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message date" },
+    "CamelSmppMessageType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Identifies the type of an incoming message: AlertNotification: an SMSC alert notification, DataSm: an SMSC data short message, DeliveryReceipt: an SMSC delivery receipt, DeliverSm: an SMSC deliver short message" },
+    "CamelSmppPriorityFlag": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMulti Allows the originating SME to assign a priority level to the short message. Use the URI option priorityFlag settings above." },
+    "CamelSmppProtocolId": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The protocol id" },
+    "CamelSmppRegisteredDelivery": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, ReplaceSm, SubmitMulti and DataSm Is used to request an SMSC delivery receipt and\/or SME originated acknowledgements. Use the URI option registeredDelivery settings above. Consumer: only for DataSm Is used to request an  [...]
+    "CamelSmppSingleDLR": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti Is used to request the SMSC delivery receipt only on the last segment of multi-segment (long) messages. Use the URI option singleDLR settings above." },
+    "CamelSmppReplaceIfPresentFlag": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMulti The replace if present flag parameter is used to request the SMSC to replace a previously submitted message, that is still pending delivery. The SMSC will replace an existing message provided that the  [...]
+    "CamelSmppScheduleDeliveryTime": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and ReplaceSm This parameter specifies the scheduled time at which the message delivery should be first attempted. It defines either the absolute date and time or relative time from the current SMSC time at  [...]
+    "CamelSmppSentMessageCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMultiSm The total number of messages which has been sent." },
+    "CamelSmppSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification, DeliverSm and DataSm A sequence number allows a response PDU to be correlated with a request PDU. The associated SMPP response PDU must preserve this field." },
+    "CamelSmppServiceType": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: The service type parameter can be used to indicate the SMS Application service associated with the message. Use the URI option serviceType settings above. Consumer: only for DeliverSm and DataSm The service type parameter indicates the SMS Appli [...]
+    "CamelSmppSourceAddr": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the address of SME (Short Message Entity) which originated this message. Consumer: Only for AlertNotification, DeliverSm and DataSm Defines the address of SME (Short Message Entity) which originated this message." },
+    "CamelSmppSourceAddrNpi": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the numeric plan indicator (NPI) to be used in the SME originator address parameters. Use the URI option sourceAddrNpi values defined above. Consumer: only for AlertNotification and DataSm Defines the numeric plan indicator (NPI) to be u [...]
+    "CamelSmppSourceAddrTon": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the type of number (TON) to be used in the SME originator address parameters. Use the sourceAddrTon URI option values defined above. Consumer: only for AlertNotification and DataSm Defines the type of number (TON) to be used in the SME o [...]
+    "CamelSmppSubmitted": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt Number of short messages originally submitted. This is only relevant when the original message was submitted to a distribution list.The value is padded with leading zeros if necessary." },
+    "CamelSmppSubmitDate": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt The time and date at which the short message was submitted. In the case of a message which has been replaced, this is the date that the original message was replaced. The format is as follows: YYMMDDhhmm." },
+    "CamelSmppSystemId": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The system id." },
+    "CamelSmppPassword": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The password." },
+    "CamelSmppValidityPeriod": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and ReplaceSm The validity period parameter indicates the SMSC expiration time, after which the message should be discarded if not delivered to the destination. If it's provided as Date, it's interpreted [...]
+    "CamelSmppOptionalParameters": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "Use CamelSmppOptionalParameter instead", "autowired": false, "secret": false, "description": "The optional parameters by name. Deprecation note: Use CamelSmppOptionalParameter instead" },
+    "CamelSmppOptionalParameter": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Map<Short, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and DataSm The optional parameter which are send to the SMSC. The value is converted in the following way: String - org.jsmpp.bean.OptionalParameter.COctetString, byte - org.jsmpp.bean.OptionalPar [...]
+    "CamelSmppSplittingPolicy": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti and DataSm. Specifies the policy for message splitting for this exchange. Possible values are described in the endpoint configuration parameter _splittingPolicy_" }
+  },
   "properties": {
     "host": { "kind": "path", "displayName": "Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Hostname for the SMSC server to use." },
     "port": { "kind": "path", "displayName": "Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "2775", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Port number for the SMSC server to use." },
diff --git a/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpps.json b/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpps.json
index b80191d9a01..9077b9724e6 100644
--- a/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpps.json
+++ b/components/camel-smpp/src/generated/resources/org/apache/camel/component/smpp/smpps.json
@@ -65,6 +65,50 @@
     "systemId": { "kind": "property", "displayName": "System Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "defaultValue": "smppclient", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "The system id (username) for connecting to SMSC server." },
     "usingSSL": { "kind": "property", "displayName": "Using SSL", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Whether using SSL with the smpps protocol" }
   },
+  "headers": {
+    "CamelSmppAlphabet": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "For SubmitSm, SubmitMulti and ReplaceSm The data coding according to the SMPP 3.4 specification, section 5.2.19. Use the URI option alphabet settings above." },
+    "CamelSmppCommand": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The command" },
+    "CamelSmppCommandId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification, DeliverSm and DataSm The command id field identifies the particular SMPP PDU. For the complete list of defined values see chapter 5.1.2.1 in the smpp specification v3.4." },
+    "CamelSmppCommandStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for DataSm The Command status of the message." },
+    "CamelSmppDataCoding": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "For SubmitSm, SubmitMulti and ReplaceSm The data coding according to the SMPP 3.4 specification, section 5.2.19. Use the URI option alphabet settings above." },
+    "CamelSmppSplitter": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.smpp.SmppSplitter", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The splitter" },
+    "CamelSmppDelivered": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt Number of short messages delivered. This is only relevant where the original message was submitted to a distribution list.The value is padded with leading zeros if necessary." },
+    "CamelSmppDestAddr": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "List or String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the destination SME address(es). For mobile terminated messages, this is the directory number of the recipient MS. It must be a List for SubmitMulti and a String otherwise. Consume [...]
+    "CamelSmppDestAddrNpi": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the numeric plan indicator (NPI) to be used in the SME destination address parameters. Use the URI option sourceAddrNpi values defined above. Consumer: only for DataSm Defines the numeric [...]
+    "CamelSmppDestAddrTon": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti, CancelSm and DataSm Defines the type of number (TON) to be used in the SME destination address parameters. Use the sourceAddrTon URI option values defined above. Consumer: only for DataSm Defines the type of number  [...]
+    "CamelSmppDoneDate": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt The time and date at which the short message reached it's final state. The format is as follows: YYMMDDhhmm." },
+    "CamelSmppEncoding": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti and DataSm. Specifies the encoding (character set name) of the bytes in the message body. If the message body is a string then this is not relevant because Java Strings are always Unicode. If the body is a byte array  [...]
+    "CamelSmppError": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or Map<String, List<Map<String, Object>>>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitMultiSm The errors which occurred by sending the short message(s) the form Map (messageID : (destAddr : address, error : errorCode)). Consumer: only for smsc DeliveryReceipt Where appropriate th [...]
+    "CamelSmppClass": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.jsmpp.bean.ESMClass", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "the ASM class" },
+    "CamelSmppEsmeAddr": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the destination ESME address. For mobile terminated messages, this is the directory number of the recipient MS." },
+    "CamelSmppEsmeAddrNpi": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the numeric plan indicator (NPI) to be used in the ESME originator address parameters. Use the URI option sourceAddrNpi values defined above." },
+    "CamelSmppEsmeAddrTon": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification Defines the type of number (TON) to be used in the ESME originator address parameters. Use the sourceAddrTon URI option values defined above." },
+    "CamelSmppFinalDate": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.util.Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The final date" },
+    "CamelSmppStatus": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "org.jsmpp.util.DeliveryReceiptState", "enum": [ "ENROUTE", "DELIVRD", "EXPIRED", "DELETED", "UNDELIV", "ACCEPTD", "UNKNOWN", "REJECTD" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt: The final status of the message." },
+    "CamelSmppId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: The id to identify the submitted short message(s) for later use. In case of a ReplaceSm, QuerySm, CancelSm and DataSm this header value is a String. In case of a SubmitSm or SubmitMultiSm this header value is a List. Consumer: only for sm [...]
+    "CamelSmppMessageState": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message date" },
+    "CamelSmppMessageType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Identifies the type of an incoming message: AlertNotification: an SMSC alert notification, DataSm: an SMSC data short message, DeliveryReceipt: an SMSC delivery receipt, DeliverSm: an SMSC deliver short message" },
+    "CamelSmppPriorityFlag": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMulti Allows the originating SME to assign a priority level to the short message. Use the URI option priorityFlag settings above." },
+    "CamelSmppProtocolId": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The protocol id" },
+    "CamelSmppRegisteredDelivery": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, ReplaceSm, SubmitMulti and DataSm Is used to request an SMSC delivery receipt and\/or SME originated acknowledgements. Use the URI option registeredDelivery settings above. Consumer: only for DataSm Is used to request an  [...]
+    "CamelSmppSingleDLR": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti Is used to request the SMSC delivery receipt only on the last segment of multi-segment (long) messages. Use the URI option singleDLR settings above." },
+    "CamelSmppReplaceIfPresentFlag": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMulti The replace if present flag parameter is used to request the SMSC to replace a previously submitted message, that is still pending delivery. The SMSC will replace an existing message provided that the  [...]
+    "CamelSmppScheduleDeliveryTime": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and ReplaceSm This parameter specifies the scheduled time at which the message delivery should be first attempted. It defines either the absolute date and time or relative time from the current SMSC time at  [...]
+    "CamelSmppSentMessageCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm and SubmitMultiSm The total number of messages which has been sent." },
+    "CamelSmppSequenceNumber": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for AlertNotification, DeliverSm and DataSm A sequence number allows a response PDU to be correlated with a request PDU. The associated SMPP response PDU must preserve this field." },
+    "CamelSmppServiceType": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: The service type parameter can be used to indicate the SMS Application service associated with the message. Use the URI option serviceType settings above. Consumer: only for DeliverSm and DataSm The service type parameter indicates the SMS Appli [...]
+    "CamelSmppSourceAddr": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the address of SME (Short Message Entity) which originated this message. Consumer: Only for AlertNotification, DeliverSm and DataSm Defines the address of SME (Short Message Entity) which originated this message." },
+    "CamelSmppSourceAddrNpi": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the numeric plan indicator (NPI) to be used in the SME originator address parameters. Use the URI option sourceAddrNpi values defined above. Consumer: only for AlertNotification and DataSm Defines the numeric plan indicator (NPI) to be u [...]
+    "CamelSmppSourceAddrTon": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Byte", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: Defines the type of number (TON) to be used in the SME originator address parameters. Use the sourceAddrTon URI option values defined above. Consumer: only for AlertNotification and DataSm Defines the type of number (TON) to be used in the SME o [...]
+    "CamelSmppSubmitted": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt Number of short messages originally submitted. This is only relevant when the original message was submitted to a distribution list.The value is padded with leading zeros if necessary." },
+    "CamelSmppSubmitDate": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for smsc DeliveryReceipt The time and date at which the short message was submitted. In the case of a message which has been replaced, this is the date that the original message was replaced. The format is as follows: YYMMDDhhmm." },
+    "CamelSmppSystemId": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The system id." },
+    "CamelSmppPassword": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The password." },
+    "CamelSmppValidityPeriod": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String or Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and ReplaceSm The validity period parameter indicates the SMSC expiration time, after which the message should be discarded if not delivered to the destination. If it's provided as Date, it's interpreted [...]
+    "CamelSmppOptionalParameters": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "Use CamelSmppOptionalParameter instead", "autowired": false, "secret": false, "description": "The optional parameters by name. Deprecation note: Use CamelSmppOptionalParameter instead" },
+    "CamelSmppOptionalParameter": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Map<Short, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Producer: only for SubmitSm, SubmitMulti and DataSm The optional parameter which are send to the SMSC. The value is converted in the following way: String - org.jsmpp.bean.OptionalParameter.COctetString, byte - org.jsmpp.bean.OptionalPar [...]
+    "CamelSmppSplittingPolicy": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "only for SubmitSm, SubmitMulti and DataSm. Specifies the policy for message splitting for this exchange. Possible values are described in the endpoint configuration parameter _splittingPolicy_" }
+  },
   "properties": {
     "host": { "kind": "path", "displayName": "Host", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "localhost", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Hostname for the SMSC server to use." },
     "port": { "kind": "path", "displayName": "Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "2775", "configurationClass": "org.apache.camel.component.smpp.SmppConfiguration", "configurationField": "configuration", "description": "Port number for the SMSC server to use." },
diff --git a/components/camel-smpp/src/main/docs/smpp-component.adoc b/components/camel-smpp/src/main/docs/smpp-component.adoc
index 2969d8ad673..a79c5c77264 100644
--- a/components/camel-smpp/src/main/docs/smpp-component.adoc
+++ b/components/camel-smpp/src/main/docs/smpp-component.adoc
@@ -171,264 +171,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-
-== Producer Message Headers
-
-The following message headers can be used to affect the behavior of the
-SMPP producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelSmppDestAddr` |`List`/`String` |*only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the
-destination SME address(es). For mobile terminated messages, this is the
-directory number of the recipient MS. It must be a `List<String>` for
-SubmitMulti and a `String` otherwise.
-
-|`CamelSmppDestAddrTon` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the type
-of number (TON) to be used in the SME destination address parameters.
-Use the `sourceAddrTon` URI option values defined above.
-
-|`CamelSmppDestAddrNpi` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the
-numeric plan indicator (NPI) to be used in the SME destination address
-parameters. Use the URI option `sourceAddrNpi` values defined above.
-
-|`CamelSmppSourceAddr` |`String` |Defines the address of SME (Short Message Entity) which originated this
-message.
-
-|`CamelSmppSourceAddrTon` |`Byte` |Defines the type of number (TON) to be used in the SME originator
-address parameters. Use the `sourceAddrTon` URI option values defined
-above.
-
-|`CamelSmppSourceAddrNpi` |`Byte` |Defines the numeric plan indicator (NPI) to be used in the SME
-originator address parameters. Use the URI option `sourceAddrNpi` values
-defined above.
-
-|`CamelSmppServiceType` |`String` |The service type parameter can be used to indicate the SMS Application
-service associated with the message. Use the URI option `serviceType`
-settings above.
-
-|`CamelSmppRegisteredDelivery` |`Byte` |*only for SubmitSm, ReplaceSm, SubmitMulti and DataSm* Is used to
-request an SMSC delivery receipt and/or SME originated acknowledgements.
-Use the URI option `registeredDelivery` settings above.
-
-|`CamelSmppSingleDLR` | `Boolean` | *only for SubmitSm, SubmitMulti* Is used to
-request the SMSC delivery receipt only on the last segment of multi-segment (long) messages.
-Use the URI option `singleDLR` settings above.
-
-|`CamelSmppPriorityFlag` |`Byte` |*only for SubmitSm and SubmitMulti* Allows the originating SME to assign
-a priority level to the short message. Use the URI option `priorityFlag`
-settings above.
-
-|`CamelSmppScheduleDeliveryTime` |`Date` |*only for SubmitSm, SubmitMulti and ReplaceSm* This parameter specifies
-the scheduled time at which the message delivery should be first
-attempted. It defines either the absolute date and time or relative time
-from the current SMSC time at which delivery of this message will be
-attempted by the SMSC. It can be specified in either absolute time
-format or relative time format. The encoding of a time format is
-specified in chapter 7.1.1. in the smpp specification v3.4.
-
-|`CamelSmppValidityPeriod` |`String`/`Date` |*only for SubmitSm, SubmitMulti and ReplaceSm* The validity period
-parameter indicates the SMSC expiration time, after which the message
-should be discarded if not delivered to the destination. If it's
-provided as `Date`, it's interpreted as absolute time or relative time
-format if you provide it as `String` as specified in chapter 7.1.1 in
-the smpp specification v3.4.
-
-|`CamelSmppReplaceIfPresentFlag` |`Byte` |*only for SubmitSm and SubmitMulti* The replace if present flag
-parameter is used to request the SMSC to replace a previously submitted
-message, that is still pending delivery. The SMSC will replace an
-existing message provided that the source address, destination address
-and service type match the same fields in the new message. The following
-values are defined: `0`, Don't replace and `1`, Replace
-
-|`CamelSmppAlphabet` / `CamelSmppDataCoding` |`Byte` |*For SubmitSm, SubmitMulti and ReplaceSm*  The data
-coding according to the SMPP 3.4 specification, section 5.2.19. Use the
-URI option `alphabet` settings above.
-
-|`CamelSmppOptionalParameter` |`Map<Short, Object>` |*only for SubmitSm, SubmitMulti and
-DataSm* The optional parameter which are send to the SMSC. The value is
-converted in the following way: `String` -> `org.jsmpp.bean.OptionalParameter.COctetString`, 
-`byte[]` -> `org.jsmpp.bean.OptionalParameter.OctetString`, 
-`Byte` -> `org.jsmpp.bean.OptionalParameter.Byte`,
-`Integer` -> `org.jsmpp.bean.OptionalParameter.Int`,
-`Short` -> `org.jsmpp.bean.OptionalParameter.Short`, 
-`null` -> `org.jsmpp.bean.OptionalParameter.Null`
-
-|CamelSmppEncoding |String |*only for SubmitSm,
-SubmitMulti and DataSm*.  Specifies the encoding (character set name) of
-the bytes in the message body.  If the message body is a string then
-this is not relevant because Java Strings are always Unicode.  If the
-body is a byte array then this header can be used to indicate that it is
-ISO-8859-1 or some other value.  Default value is specified by the
-endpoint configuration parameter _encoding_
-
-|CamelSmppSplittingPolicy |String |*only for SubmitSm,
-SubmitMulti and DataSm*.  Specifies the policy for message splitting for
-this exchange.  Possible values are described in the endpoint
-configuration parameter _splittingPolicy_
-|=======================================================================
-
-The following message headers are used by the SMPP producer to set the
-response from the SMSC in the message header
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelSmppId` |`List<String>`/`String` |The id to identify the submitted short message(s) for later use.
-In case of a ReplaceSm, QuerySm, CancelSm and DataSm this
-header vaule is a `String`. In case of a SubmitSm or SubmitMultiSm this
-header vaule is a `List<String>`.
-
-|`CamelSmppSentMessageCount` |`Integer` |*only for SubmitSm and SubmitMultiSm* The total
-number of messages which has been sent.
-
-|`CamelSmppError` |`Map<String, List<Map<String, Object>>>` |*only for SubmitMultiSm* The errors which
-occurred by sending the short message(s) the form `Map<String, List<Map<String, Object>>>` (messageID : (destAddr :
-address, error : errorCode)).
-
-|`CamelSmppOptionalParameter` |`Map<Short, Object>` |*only for DataSm* The optional
-parameter which are returned from the SMSC by sending the message. The
-key is the `Short` code for the optional parameter. The value is
-converted in the following way: 
-`org.jsmpp.bean.OptionalParameter.COctetString` -> `String`,
-`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,
-`org.jsmpp.bean.OptionalParameter.Byte` -> `Byte`,
-`org.jsmpp.bean.OptionalParameter.Int` -> `Integer`,
-`org.jsmpp.bean.OptionalParameter.Short` -> `Short`, 
-`org.jsmpp.bean.OptionalParameter.Null` -> `null`
-|=======================================================================
-
-== Consumer Message Headers
-
-The following message headers are used by the SMPP consumer to set the
-request data from the SMSC in the message header
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelSmppSequenceNumber` |`Integer` |*only for AlertNotification, DeliverSm and DataSm* A sequence number
-allows a response PDU to be correlated with a request PDU. The
-associated SMPP response PDU must preserve this field.
-
-|`CamelSmppCommandId` |`Integer` |*only for AlertNotification, DeliverSm and DataSm* The command id field
-identifies the particular SMPP PDU. For the complete list of defined
-values see chapter 5.1.2.1 in the smpp specification v3.4.
-
-|`CamelSmppSourceAddr` |`String` |*only for AlertNotification, DeliverSm and DataSm* Defines the address
-of SME (Short Message Entity) which originated this message.
-
-|`CamelSmppSourceAddrNpi` |`Byte` |*only for AlertNotification and DataSm* Defines the numeric plan
-indicator (NPI) to be used in the SME originator address parameters. Use
-the URI option `sourceAddrNpi` values defined above.
-
-|`CamelSmppSourceAddrTon` |`Byte` |*only for AlertNotification and DataSm* Defines the type of number (TON)
-to be used in the SME originator address parameters. Use the
-`sourceAddrTon` URI option values defined above.
-
-|`CamelSmppEsmeAddr` |`String` |*only for AlertNotification* Defines the destination ESME address. For
-mobile terminated messages, this is the directory number of the
-recipient MS.
-
-|`CamelSmppEsmeAddrNpi` |`Byte` |*only for AlertNotification* Defines the numeric plan indicator (NPI) to
-be used in the ESME originator address parameters. Use the URI option
-`sourceAddrNpi` values defined above.
-
-|`CamelSmppEsmeAddrTon` |`Byte` |*only for AlertNotification* Defines the type of number (TON) to be used
-in the ESME originator address parameters. Use the `sourceAddrTon` URI
-option values defined above.
-
-|`CamelSmppId` |`String` |*only for smsc DeliveryReceipt and DataSm* The message ID allocated to
-the message by the SMSC when originally submitted.
-
-|`CamelSmppDelivered` |`Integer` |*only for smsc DeliveryReceipt* Number of short messages delivered. This
-is only relevant where the original message was submitted to a
-distribution list.The value is padded with leading zeros if necessary.
-
-|`CamelSmppDoneDate` |`Date` |*only for smsc DeliveryReceipt* The time and date at which the short
-message reached it's final state. The format is as follows: YYMMDDhhmm.
-
-|`CamelSmppStatus` |`DeliveryReceiptState` |*only for smsc DeliveryReceipt:* The final status of the message. The
-following values are defined: `DELIVRD`: Message is delivered to destination,
-`EXPIRED`: Message validity period has expired,
-`DELETED`: Message has been deleted, 
-`UNDELIV`: Message is undeliverable, 
-`ACCEPTD`: Message is in accepted state (i.e. has been manually read on
-behalf of the subscriber by customer service),
-`UNKNOWN`: Message is in invalid state,
-`REJECTD`: Message is in a rejected state
-
-|`CamelSmppCommandStatus` |`Integer` |*only for DataSm* The Command status of the message.
-
-|`CamelSmppError` |`String` |*only for smsc DeliveryReceipt* Where appropriate this may hold a
-Network specific error code or an SMSC error code for the attempted
-delivery of the message. These errors are Network or SMSC specific and
-are not included here.
-
-|`CamelSmppSubmitDate` |`Date` |*only for smsc DeliveryReceipt* The time and date at which the short
-message was submitted. In the case of a message which has been replaced,
-this is the date that the original message was replaced. The format is
-as follows: YYMMDDhhmm.
-
-|`CamelSmppSubmitted` |`Integer` |*only for smsc DeliveryReceipt* Number of short messages originally
-submitted. This is only relevant when the original message was submitted
-to a distribution list.The value is padded with leading zeros if
-necessary.
-
-|`CamelSmppDestAddr` |`String` |*only for DeliverSm and DataSm:* Defines the destination SME address.
-For mobile terminated messages, this is the directory number of the
-recipient MS.
-
-|`CamelSmppScheduleDeliveryTime` |`String` |*only for DeliverSm:* This parameter specifies the scheduled time at
-which the message delivery should be first attempted. It defines either
-the absolute date and time or relative time from the current SMSC time
-at which delivery of this message will be attempted by the SMSC. It can
-be specified in either absolute time format or relative time format. The
-encoding of a time format is specified in Section 7.1.1. in the smpp
-specification v3.4.
-
-|`CamelSmppValidityPeriod` |`String` |*only for DeliverSm* The validity period parameter indicates the SMSC
-expiration time, after which the message should be discarded if not
-delivered to the destination. It can be defined in absolute time format
-or relative time format. The encoding of absolute and relative time
-format is specified in Section 7.1.1 in the smpp specification v3.4.
-
-|`CamelSmppServiceType` |`String` |*only for DeliverSm and DataSm* The service type parameter indicates the
-SMS Application service associated with the message.
-
-|`CamelSmppRegisteredDelivery` |`Byte` |*only for DataSm* Is used to request an delivery receipt and/or SME
-originated acknowledgements. Same values as in Producer header list
-above.
-
-|`CamelSmppDestAddrNpi` |`Byte` |*only for DataSm* Defines the numeric plan indicator (NPI) in the
-destination address parameters. Use the URI option `sourceAddrNpi`
-values defined above.
-
-|`CamelSmppDestAddrTon` |`Byte` |*only for DataSm* Defines the type of number (TON) in the destination
-address parameters. Use the `sourceAddrTon` URI option values defined
-above.
-
-|`CamelSmppMessageType` |`String` |Identifies the type of an incoming message:
-`AlertNotification`: an SMSC alert notification,
-`DataSm`: an SMSC data short message,
-`DeliveryReceipt`: an SMSC delivery receipt,
-`DeliverSm`: an SMSC deliver short message
-
-|`CamelSmppOptionalParameter` |`Map<Short, Object>` |*only for DeliverSm* The optional
-parameters send back by the SMSC. The key is the `Short` code for the
-optional parameter. The value is converted in the following way: 
-`org.jsmpp.bean.OptionalParameter.COctetString` -> `String`,
-`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,
-`org.jsmpp.bean.OptionalParameter.Byte` -> `Byte`,
-`org.jsmpp.bean.OptionalParameter.Int` -> `Integer`,
-`org.jsmpp.bean.OptionalParameter.Short` -> `Short`,
-`org.jsmpp.bean.OptionalParameter.Null` -> `null`
-|=======================================================================
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 [TIP]
 ====
 *JSMPP library*
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
index 98770ac2a86..651d2526e81 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConstants.java
@@ -16,53 +16,265 @@
  */
 package org.apache.camel.component.smpp;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel SMPP module
  *
  */
 public interface SmppConstants {
 
+    @Metadata(label = "producer", description = "*For SubmitSm, SubmitMulti and ReplaceSm*  The data\n" +
+                                                "coding according to the SMPP 3.4 specification, section 5.2.19. Use the\n" +
+                                                "URI option `alphabet` settings above.",
+              javaType = "Byte")
     String ALPHABET = "CamelSmppAlphabet";
+    @Metadata(description = "The command", javaType = "String")
     String COMMAND = "CamelSmppCommand";
+    @Metadata(label = "consumer", description = "*only for AlertNotification, DeliverSm and DataSm* The command id field\n" +
+                                                "identifies the particular SMPP PDU. For the complete list of defined\n" +
+                                                "values see chapter 5.1.2.1 in the smpp specification v3.4.",
+              javaType = "Integer")
     String COMMAND_ID = "CamelSmppCommandId";
+    @Metadata(label = "consumer", description = "*only for DataSm* The Command status of the message.", javaType = "Integer")
     String COMMAND_STATUS = "CamelSmppCommandStatus";
+    @Metadata(label = "producer", description = "*For SubmitSm, SubmitMulti and ReplaceSm*  The data\n" +
+                                                "coding according to the SMPP 3.4 specification, section 5.2.19. Use the\n" +
+                                                "URI option `alphabet` settings above.",
+              javaType = "Byte")
     String DATA_CODING = "CamelSmppDataCoding";
+    @Metadata(label = "producer", description = "The splitter", javaType = "org.apache.camel.component.smpp.SmppSplitter")
     String DATA_SPLITTER = "CamelSmppSplitter";
+    @Metadata(label = "consumer", description = "*only for smsc DeliveryReceipt* Number of short messages delivered. This\n" +
+                                                "is only relevant where the original message was submitted to a\n" +
+                                                "distribution list.The value is padded with leading zeros if necessary.",
+              javaType = "Integer")
     String DELIVERED = "CamelSmppDelivered";
+    @Metadata(description = "*Producer:* *only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the\n" +
+                            "destination SME address(es). For mobile terminated messages, this is the\n" +
+                            "directory number of the recipient MS. It must be a `List<String>` for\n" +
+                            "SubmitMulti and a `String` otherwise.\n" +
+                            "*Consumer:* *only for DeliverSm and DataSm:* Defines the destination SME address.\n" +
+                            "For mobile terminated messages, this is the directory number of the\n" +
+                            "recipient MS.",
+              javaType = "List or String")
     String DEST_ADDR = "CamelSmppDestAddr";
+    @Metadata(description = "*Producer:* *only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the\n" +
+                            "numeric plan indicator (NPI) to be used in the SME destination address\n" +
+                            "parameters. Use the URI option `sourceAddrNpi` values defined above.\n" +
+                            "*Consumer:* *only for DataSm* Defines the numeric plan indicator (NPI) in the\n" +
+                            "destination address parameters. Use the URI option `sourceAddrNpi`\n" +
+                            "values defined above.",
+              javaType = "Byte")
     String DEST_ADDR_NPI = "CamelSmppDestAddrNpi";
+    @Metadata(description = "*Producer:* *only for SubmitSm, SubmitMulti, CancelSm and DataSm* Defines the type\n" +
+                            "of number (TON) to be used in the SME destination address parameters.\n" +
+                            "Use the `sourceAddrTon` URI option values defined above.\n" +
+                            "*Consumer:* *only for DataSm* Defines the type of number (TON) in the destination\n" +
+                            "address parameters. Use the `sourceAddrTon` URI option values defined\n" +
+                            "above.",
+              javaType = "Byte")
     String DEST_ADDR_TON = "CamelSmppDestAddrTon";
+    @Metadata(label = "consumer", description = "*only for smsc DeliveryReceipt* The time and date at which the short\n" +
+                                                "message reached it's final state. The format is as follows: YYMMDDhhmm.",
+              javaType = "Date")
     String DONE_DATE = "CamelSmppDoneDate";
+    @Metadata(label = "producer", description = "*only for SubmitSm,\n" +
+                                                "SubmitMulti and DataSm*.  Specifies the encoding (character set name) of\n" +
+                                                "the bytes in the message body.  If the message body is a string then\n" +
+                                                "this is not relevant because Java Strings are always Unicode.  If the\n" +
+                                                "body is a byte array then this header can be used to indicate that it is\n" +
+                                                "ISO-8859-1 or some other value.  Default value is specified by the\n" +
+                                                "endpoint configuration parameter _encoding_",
+              javaType = "String")
     String ENCODING = "CamelSmppEncoding";
+    @Metadata(description = "*Producer:* *only for SubmitMultiSm* The errors which\n" +
+                            "occurred by sending the short message(s) the form `Map<String, List<Map<String, Object>>>` (messageID : (destAddr :\n"
+                            +
+                            "address, error : errorCode)).\n" +
+                            "*Consumer:* *only for smsc DeliveryReceipt* Where appropriate this may hold a\n" +
+                            "Network specific error code or an SMSC error code for the attempted\n" +
+                            "delivery of the message. These errors are Network or SMSC specific and\n" +
+                            "are not included here.",
+              javaType = "String or Map<String, List<Map<String, Object>>>")
     String ERROR = "CamelSmppError";
+    @Metadata(label = "producer", description = "the ASM class", javaType = "org.jsmpp.bean.ESMClass")
     String ESM_CLASS = "CamelSmppClass";
+    @Metadata(label = "consumer", description = "*only for AlertNotification* Defines the destination ESME address. For\n" +
+                                                "mobile terminated messages, this is the directory number of the\n" +
+                                                "recipient MS.",
+              javaType = "String")
     String ESME_ADDR = "CamelSmppEsmeAddr";
+    @Metadata(label = "consumer", description = "*only for AlertNotification* Defines the numeric plan indicator (NPI) to\n" +
+                                                "be used in the ESME originator address parameters. Use the URI option\n" +
+                                                "`sourceAddrNpi` values defined above.",
+              javaType = "Byte")
     String ESME_ADDR_NPI = "CamelSmppEsmeAddrNpi";
+    @Metadata(label = "consumer", description = "*only for AlertNotification* Defines the type of number (TON) to be used\n" +
+                                                "in the ESME originator address parameters. Use the `sourceAddrTon` URI\n" +
+                                                "option values defined above.",
+              javaType = "Byte")
     String ESME_ADDR_TON = "CamelSmppEsmeAddrTon";
+    @Metadata(label = "producer", description = "The final date", javaType = "java.util.Date")
     String FINAL_DATE = "CamelSmppFinalDate";
+    @Metadata(label = "consumer", description = "*only for smsc DeliveryReceipt:* The final status of the message.",
+              javaType = "org.jsmpp.util.DeliveryReceiptState")
     String FINAL_STATUS = "CamelSmppStatus";
+    @Metadata(description = "*Producer:* The id to identify the submitted short message(s) for later use.\n" +
+                            "In case of a ReplaceSm, QuerySm, CancelSm and DataSm this\n" +
+                            "header value is a `String`. In case of a SubmitSm or SubmitMultiSm this\n" +
+                            "header value is a `List<String>`.\n" +
+                            "*Consumer:* *only for smsc DeliveryReceipt and DataSm* The message ID allocated to\n" +
+                            "the message by the SMSC when originally submitted.",
+              javaType = "String or List<String>")
     String ID = "CamelSmppId";
+    @Metadata(label = "producer", description = "The message date", javaType = "String")
     String MESSAGE_STATE = "CamelSmppMessageState";
+    @Metadata(label = "consumer", description = "Identifies the type of an incoming message:\n" +
+                                                "`AlertNotification`: an SMSC alert notification,\n" +
+                                                "`DataSm`: an SMSC data short message,\n" +
+                                                "`DeliveryReceipt`: an SMSC delivery receipt,\n" +
+                                                "`DeliverSm`: an SMSC deliver short message",
+              javaType = "String")
     String MESSAGE_TYPE = "CamelSmppMessageType";
+    @Metadata(label = "producer", description = "*only for SubmitSm and SubmitMulti* Allows the originating SME to assign\n" +
+                                                "a priority level to the short message. Use the URI option `priorityFlag`\n" +
+                                                "settings above.",
+              javaType = "Byte")
     String PRIORITY_FLAG = "CamelSmppPriorityFlag";
+    @Metadata(label = "producer", description = "The protocol id", javaType = "Byte")
     String PROTOCOL_ID = "CamelSmppProtocolId";
+    @Metadata(description = "*Producer:* *only for SubmitSm, ReplaceSm, SubmitMulti and DataSm* Is used to\n" +
+                            "request an SMSC delivery receipt and/or SME originated acknowledgements.\n" +
+                            "Use the URI option `registeredDelivery` settings above.\n" +
+                            "*Consumer:* *only for DataSm* Is used to request an delivery receipt and/or SME\n" +
+                            "originated acknowledgements. Same values as in Producer header list\n" +
+                            "above.",
+              javaType = "Byte")
     String REGISTERED_DELIVERY = "CamelSmppRegisteredDelivery";
+    @Metadata(label = "producer", description = "*only for SubmitSm, SubmitMulti* Is used to\n" +
+                                                "request the SMSC delivery receipt only on the last segment of multi-segment (long) messages.\n"
+                                                +
+                                                "Use the URI option `singleDLR` settings above.",
+              javaType = "Boolean")
     String SINGLE_DLR = "CamelSmppSingleDLR";
+    @Metadata(label = "producer", description = "*only for SubmitSm and SubmitMulti* The replace if present flag\n" +
+                                                "parameter is used to request the SMSC to replace a previously submitted\n" +
+                                                "message, that is still pending delivery. The SMSC will replace an\n" +
+                                                "existing message provided that the source address, destination address\n" +
+                                                "and service type match the same fields in the new message. The following\n" +
+                                                "values are defined: `0`, Don't replace and `1`, Replace",
+              javaType = "Boolean")
     String REPLACE_IF_PRESENT_FLAG = "CamelSmppReplaceIfPresentFlag";
+    @Metadata(description = "*Producer:* only for SubmitSm, SubmitMulti and ReplaceSm* This parameter specifies\n" +
+                            "the scheduled time at which the message delivery should be first\n" +
+                            "attempted. It defines either the absolute date and time or relative time\n" +
+                            "from the current SMSC time at which delivery of this message will be\n" +
+                            "attempted by the SMSC. It can be specified in either absolute time\n" +
+                            "format or relative time format. The encoding of a time format is\n" +
+                            "specified in chapter 7.1.1. in the smpp specification v3.4.\n" +
+                            "*Consumer:* *only for DeliverSm:* This parameter specifies the scheduled time at\n" +
+                            "which the message delivery should be first attempted. It defines either\n" +
+                            "the absolute date and time or relative time from the current SMSC time\n" +
+                            "at which delivery of this message will be attempted by the SMSC. It can\n" +
+                            "be specified in either absolute time format or relative time format. The\n" +
+                            "encoding of a time format is specified in Section 7.1.1. in the smpp\n" +
+                            "specification v3.4.",
+              javaType = "Date")
     String SCHEDULE_DELIVERY_TIME = "CamelSmppScheduleDeliveryTime";
+    @Metadata(label = "producer", description = "*only for SubmitSm and SubmitMultiSm* The total\n" +
+                                                "number of messages which has been sent.",
+              javaType = "Integer")
     String SENT_MESSAGE_COUNT = "CamelSmppSentMessageCount";
+    @Metadata(label = "consumer", description = "*only for AlertNotification, DeliverSm and DataSm* A sequence number\n" +
+                                                "allows a response PDU to be correlated with a request PDU. The\n" +
+                                                "associated SMPP response PDU must preserve this field.",
+              javaType = "int")
     String SEQUENCE_NUMBER = "CamelSmppSequenceNumber";
+    @Metadata(description = "*Producer:* The service type parameter can be used to indicate the SMS Application\n" +
+                            "service associated with the message. Use the URI option `serviceType`\n" +
+                            "settings above.\n" +
+                            "*Consumer:* *only for DeliverSm and DataSm* The service type parameter indicates the\n" +
+                            "SMS Application service associated with the message.",
+              javaType = "String")
     String SERVICE_TYPE = "CamelSmppServiceType";
+    @Metadata(description = "*Producer:* Defines the address of SME (Short Message Entity) which originated this message.\n" +
+                            "*Consumer:* *Only for AlertNotification, DeliverSm and DataSm* Defines the address\n" +
+                            "of SME (Short Message Entity) which originated this message.",
+              javaType = "String")
     String SOURCE_ADDR = "CamelSmppSourceAddr";
+    @Metadata(description = "*Producer:* Defines the numeric plan indicator (NPI) to be used in the SME\n" +
+                            "originator address parameters. Use the URI option `sourceAddrNpi` values\n" +
+                            "defined above.\n" +
+                            "*Consumer:* *only for AlertNotification and DataSm* Defines the numeric plan\n" +
+                            "indicator (NPI) to be used in the SME originator address parameters. Use\n" +
+                            "the URI option `sourceAddrNpi` values defined above.",
+              javaType = "Byte")
     String SOURCE_ADDR_NPI = "CamelSmppSourceAddrNpi";
+    @Metadata(description = "*Producer:* Defines the type of number (TON) to be used in the SME originator\n" +
+                            "address parameters. Use the `sourceAddrTon` URI option values defined\n" +
+                            "above.\n" +
+                            "*Consumer:* *only for AlertNotification and DataSm* Defines the type of number (TON)\n" +
+                            "to be used in the SME originator address parameters. Use the\n" +
+                            "`sourceAddrTon` URI option values defined above.",
+              javaType = "Byte")
     String SOURCE_ADDR_TON = "CamelSmppSourceAddrTon";
+    @Metadata(label = "consumer", description = "*only for smsc DeliveryReceipt* Number of short messages originally\n" +
+                                                "submitted. This is only relevant when the original message was submitted\n" +
+                                                "to a distribution list.The value is padded with leading zeros if\n" +
+                                                "necessary.",
+              javaType = "Integer")
     String SUBMITTED = "CamelSmppSubmitted";
+    @Metadata(label = "consumer", description = "*only for smsc DeliveryReceipt* The time and date at which the short\n" +
+                                                "message was submitted. In the case of a message which has been replaced,\n" +
+                                                "this is the date that the original message was replaced. The format is\n" +
+                                                "as follows: YYMMDDhhmm.",
+              javaType = "Date")
     String SUBMIT_DATE = "CamelSmppSubmitDate";
+    @Metadata(label = "producer", description = "The system id.", javaType = "String")
     String SYSTEM_ID = "CamelSmppSystemId";
+    @Metadata(label = "producer", description = "The password.", javaType = "String")
     String PASSWORD = "CamelSmppPassword";
+    @Metadata(description = "*Producer:* *only for SubmitSm, SubmitMulti and ReplaceSm* The validity period\n" +
+                            "parameter indicates the SMSC expiration time, after which the message\n" +
+                            "should be discarded if not delivered to the destination. If it's\n" +
+                            "provided as `Date`, it's interpreted as absolute time or relative time\n" +
+                            "format if you provide it as `String` as specified in chapter 7.1.1 in\n" +
+                            "the smpp specification v3.4.\n" +
+                            "*Consumer:* *only for DeliverSm* The validity period parameter indicates the SMSC\n" +
+                            "expiration time, after which the message should be discarded if not\n" +
+                            "delivered to the destination. It can be defined in absolute time format\n" +
+                            "or relative time format. The encoding of absolute and relative time\n" +
+                            "format is specified in Section 7.1.1 in the smpp specification v3.4.",
+              javaType = "String or Date")
     String VALIDITY_PERIOD = "CamelSmppValidityPeriod";
+    @Metadata(label = "consumer", description = "The optional parameters by name.", javaType = "Map<String, Object>",
+              deprecationNote = "Use CamelSmppOptionalParameter instead")
     String OPTIONAL_PARAMETERS = "CamelSmppOptionalParameters";
+    @Metadata(description = "*Producer:* *only for SubmitSm, SubmitMulti and\n" +
+                            "DataSm* The optional parameter which are send to the SMSC. The value is\n" +
+                            "converted in the following way: `String` -> `org.jsmpp.bean.OptionalParameter.COctetString`, \n" +
+                            "`byte[]` -> `org.jsmpp.bean.OptionalParameter.OctetString`, \n" +
+                            "`Byte` -> `org.jsmpp.bean.OptionalParameter.Byte`,\n" +
+                            "`Integer` -> `org.jsmpp.bean.OptionalParameter.Int`,\n" +
+                            "`Short` -> `org.jsmpp.bean.OptionalParameter.Short`, \n" +
+                            "`null` -> `org.jsmpp.bean.OptionalParameter.Null`\n" +
+                            "*Consumer:* *only for DeliverSm* The optional\n" +
+                            "parameters send back by the SMSC. The key is the `Short` code for the\n" +
+                            "optional parameter. The value is converted in the following way: \n" +
+                            "`org.jsmpp.bean.OptionalParameter.COctetString` -> `String`,\n" +
+                            "`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,\n" +
+                            "`org.jsmpp.bean.OptionalParameter.Byte` -> `Byte`,\n" +
+                            "`org.jsmpp.bean.OptionalParameter.Int` -> `Integer`,\n" +
+                            "`org.jsmpp.bean.OptionalParameter.Short` -> `Short`,\n" +
+                            "`org.jsmpp.bean.OptionalParameter.Null` -> `null`",
+              javaType = "Map<Short, Object>")
     String OPTIONAL_PARAMETER = "CamelSmppOptionalParameter";
+    @Metadata(label = "producer", description = "*only for SubmitSm,\n" +
+                                                "SubmitMulti and DataSm*.  Specifies the policy for message splitting for\n" +
+                                                "this exchange.  Possible values are described in the endpoint\n" +
+                                                "configuration parameter _splittingPolicy_",
+              javaType = "String")
     String SPLITTING_POLICY = "CamelSmppSplittingPolicy";
 
     String UCS2_ENCODING = "UTF-16BE";
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java
index 6f3b6d2e66c..ab4dc6032a0 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java
@@ -33,7 +33,7 @@ import org.jsmpp.bean.DeliverSm;
  * Send and receive SMS messages using a SMSC (Short Message Service Center).
  */
 @UriEndpoint(firstVersion = "2.2.0", scheme = "smpp,smpps", title = "SMPP", syntax = "smpp:host:port",
-             category = { Category.MOBILE }, lenientProperties = true)
+             category = { Category.MOBILE }, lenientProperties = true, headersClass = SmppConstants.class)
 public class SmppEndpoint extends DefaultEndpoint {
 
     private SmppBinding binding;
diff --git a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solr.json b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solr.json
index 8abee04a9c5..a0dcde76fd8 100644
--- a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solr.json
+++ b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solr.json
@@ -26,6 +26,13 @@
     "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": {
+    "CamelSolrClient": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.solr.client.solrj.SolrClient", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The client." },
+    "CamelSolrCollection": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection to execute the request again." },
+    "SolrOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation to perform." },
+    "CamelSolrQueryString": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query to execute." },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type." }
+  },
   "properties": {
     "url": { "kind": "path", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "Hostname and port for the Solr server(s). Multiple hosts can be specified, separated with a comma. See the solrClient parame [...]
     "autoCommit": { "kind": "parameter", "displayName": "Auto Commit", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "If true, each producer operation will be automatically followed by a commit" },
diff --git a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrCloud.json b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrCloud.json
index e8c5e585c10..34f6dc30fa4 100644
--- a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrCloud.json
+++ b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrCloud.json
@@ -26,6 +26,13 @@
     "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": {
+    "CamelSolrClient": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.solr.client.solrj.SolrClient", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The client." },
+    "CamelSolrCollection": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection to execute the request again." },
+    "SolrOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation to perform." },
+    "CamelSolrQueryString": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query to execute." },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type." }
+  },
   "properties": {
     "url": { "kind": "path", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "Hostname and port for the Solr server(s). Multiple hosts can be specified, separated with a comma. See the solrClient parame [...]
     "autoCommit": { "kind": "parameter", "displayName": "Auto Commit", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "If true, each producer operation will be automatically followed by a commit" },
diff --git a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrs.json b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrs.json
index ffbd8d97c22..373d9fa29be 100644
--- a/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrs.json
+++ b/components/camel-solr/src/generated/resources/org/apache/camel/component/solr/solrs.json
@@ -26,6 +26,13 @@
     "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": {
+    "CamelSolrClient": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.solr.client.solrj.SolrClient", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The client." },
+    "CamelSolrCollection": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The collection to execute the request again." },
+    "SolrOperation": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation to perform." },
+    "CamelSolrQueryString": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query to execute." },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type." }
+  },
   "properties": {
     "url": { "kind": "path", "displayName": "Url", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "Hostname and port for the Solr server(s). Multiple hosts can be specified, separated with a comma. See the solrClient parame [...]
     "autoCommit": { "kind": "parameter", "displayName": "Auto Commit", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.solr.SolrConfiguration", "configurationField": "solrConfiguration", "description": "If true, each producer operation will be automatically followed by a commit" },
diff --git a/components/camel-solr/src/main/docs/solr-component.adoc b/components/camel-solr/src/main/docs/solr-component.adoc
index cce330d0164..62c4f7ce0e6 100644
--- a/components/camel-solr/src/main/docs/solr-component.adoc
+++ b/components/camel-solr/src/main/docs/solr-component.adoc
@@ -37,8 +37,6 @@ solrs://host[:port]/solr?[options]
 solrCloud://host[:port]/solr?[options]
 --------------------------------------
 
-
-
 // component-configure options: START
 
 // component-configure options: END
@@ -51,6 +49,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Message Operations
 
@@ -149,15 +150,15 @@ delete routes and then call the commit route.
 
 [source,java]
 -----------------------------------------------
-    template.sendBody("direct:insert", "1234");
-    template.sendBody("direct:commit", null);
-    template.sendBody("direct:delete", "1234");
-    template.sendBody("direct:commit", null);
+template.sendBody("direct:insert", "1234");
+template.sendBody("direct:commit", null);
+template.sendBody("direct:delete", "1234");
+template.sendBody("direct:commit", null);
 -----------------------------------------------
 
 == Querying Solr
 
-The components provides a producer operation to query Solr.
+The components provide a producer operation to query Solr.
 
 For more information:
 
diff --git a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java
index aa73c8be96f..fff9447770b 100644
--- a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java
+++ b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrConstants.java
@@ -16,11 +16,17 @@
  */
 package org.apache.camel.component.solr;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public final class SolrConstants {
 
+    @Metadata(description = "The client.", javaType = "org.apache.solr.client.solrj.SolrClient")
     public static final String CLIENT = "CamelSolrClient";
+    @Metadata(description = "The collection to execute the request again.", javaType = "String")
     public static final String COLLECTION = "CamelSolrCollection";
     public static final String FIELD = "SolrField.";
+    @Metadata(description = "The operation to perform.", javaType = "String")
     public static final String OPERATION = "SolrOperation";
     public static final String OPERATION_COMMIT = "COMMIT";
     public static final String OPERATION_SOFT_COMMIT = "SOFT_COMMIT";
@@ -34,7 +40,10 @@ public final class SolrConstants {
     public static final String OPERATION_DELETE_BY_QUERY = "DELETE_BY_QUERY";
     public static final String OPERATION_QUERY = "QUERY";
     public static final String PARAM = "SolrParam.";
+    @Metadata(description = "The query to execute.", javaType = "String")
     public static final String QUERY_STRING = "CamelSolrQueryString";
+    @Metadata(description = "The content type.", javaType = "String")
+    public static final String CONTENT_TYPE = Exchange.CONTENT_TYPE;
 
     public static final int DEFUALT_STREAMING_QUEUE_SIZE = 10;
     public static final int DEFAULT_STREAMING_THREAD_COUNT = 2;
diff --git a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
index e9ddd65d48b..04c3e49ad68 100644
--- a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
+++ b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrEndpoint.java
@@ -34,7 +34,7 @@ import org.apache.camel.support.DefaultEndpoint;
  * Perform operations against Apache Lucene Solr.
  */
 @UriEndpoint(firstVersion = "2.9.0", scheme = "solr,solrs,solrCloud", title = "Solr", syntax = "solr:url", producerOnly = true,
-             category = { Category.MONITORING, Category.SEARCH })
+             category = { Category.MONITORING, Category.SEARCH }, headersClass = SolrConstants.class)
 public class SolrEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
index cfac6fac329..c5c082c540b 100644
--- a/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
+++ b/components/camel-solr/src/main/java/org/apache/camel/component/solr/SolrProducer.java
@@ -198,8 +198,8 @@ public class SolrProducer extends DefaultProducer {
         if (body instanceof WrappedFile) {
             body = ((WrappedFile<?>) body).getFile();
         }
-        if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class))) {
-            String mimeType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class);
+        if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(SolrConstants.CONTENT_TYPE, String.class))) {
+            String mimeType = exchange.getIn().getHeader(SolrConstants.CONTENT_TYPE, String.class);
             ContentStreamUpdateRequest updateRequest = new ContentStreamUpdateRequest(getRequestHandler(solrConfiguration));
             updateRequest.setParams(solrParams);
             updateRequest.setBasicAuthCredentials(solrConfiguration.getUsername(), solrConfiguration.getPassword());
diff --git a/components/camel-spark/src/generated/resources/org/apache/camel/component/spark/spark.json b/components/camel-spark/src/generated/resources/org/apache/camel/component/spark/spark.json
index 0bb1c46a498..ba30e245834 100644
--- a/components/camel-spark/src/generated/resources/org/apache/camel/component/spark/spark.json
+++ b/components/camel-spark/src/generated/resources/org/apache/camel/component/spark/spark.json
@@ -27,6 +27,12 @@
     "rddCallback": { "kind": "property", "displayName": "Rdd Callback", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.spark.RddCallback", "deprecated": false, "autowired": false, "secret": false, "description": "Function performing action against an RDD." },
     "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": {
+    "CAMEL_SPARK_RDD": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The RDD." },
+    "CAMEL_SPARK_RDD_CALLBACK": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.camel.component.spark.RddCallback", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function performing action against an RDD." },
+    "CAMEL_SPARK_DATAFRAME": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Dataset<Row>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The data frame to compute against." },
+    "CAMEL_SPARK_DATAFRAME_CALLBACK": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "org.apache.camel.component.spark.DataFrameCallback", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function performing action against a data frame." }
+  },
   "properties": {
     "endpointType": { "kind": "path", "displayName": "Endpoint Type", "group": "producer", "label": "", "required": true, "type": "object", "javaType": "org.apache.camel.component.spark.EndpointType", "enum": [ "rdd", "dataframe", "hive" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Type of the endpoint (rdd, dataframe, hive)." },
     "collect": { "kind": "parameter", "displayName": "Collect", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Indicates if results should be collected or counted." },
diff --git a/components/camel-spark/src/main/docs/spark-component.adoc b/components/camel-spark/src/main/docs/spark-component.adoc
index 721fc984c30..7aabc915e57 100644
--- a/components/camel-spark/src/main/docs/spark-component.adoc
+++ b/components/camel-spark/src/main/docs/spark-component.adoc
@@ -34,19 +34,19 @@ cluster.
 image::camel_spark_cluster.png[image]
 
 While Spark component is primary designed to work as a _long running
-job_ serving as an bridge between Spark cluster and the other endpoints,
+job_ serving as a bridge between Spark cluster and the other endpoints,
 you can also use it as a _fire-once_ short job.   
 
 == Running Spark in OSGi servers
 
-Currently the Spark component doesn't support execution in the OSGi
+Currently, the Spark component doesn't support execution in the OSGi
 container. Spark has been designed to be executed as a fat jar, usually
 submitted as a job to a cluster. For those reasons running Spark in an
 OSGi server is at least challenging and is not support by Camel as well.
 
 == URI format
 
-Currently the Spark component supports only producers - it is intended
+Currently, the Spark component supports only producers - it is intended
 to invoke a Spark job and return results. You can call RDD, data frame
 or Hive SQL job.
 
@@ -56,8 +56,6 @@ or Hive SQL job.
 spark:{rdd|dataframe|hive}
 --------------------------
 
-
-
 // component-configure options: START
 
 // component-configure options: END
@@ -70,7 +68,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == RDD jobs
 
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkConstants.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkConstants.java
index b46522e1f30..b065fb511eb 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkConstants.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkConstants.java
@@ -16,14 +16,18 @@
  */
 package org.apache.camel.component.spark;
 
-public final class SparkConstants {
+import org.apache.camel.spi.Metadata;
 
+public final class SparkConstants {
+    @Metadata(description = "The RDD.", javaType = "Object")
     public static final String SPARK_RDD_HEADER = "CAMEL_SPARK_RDD";
-
+    @Metadata(description = "The function performing action against an RDD.",
+              javaType = "org.apache.camel.component.spark.RddCallback")
     public static final String SPARK_RDD_CALLBACK_HEADER = "CAMEL_SPARK_RDD_CALLBACK";
-
+    @Metadata(description = "The data frame to compute against.", javaType = "Dataset<Row>")
     public static final String SPARK_DATAFRAME_HEADER = "CAMEL_SPARK_DATAFRAME";
-
+    @Metadata(description = "The function performing action against a data frame.",
+              javaType = "org.apache.camel.component.spark.DataFrameCallback")
     public static final String SPARK_DATAFRAME_CALLBACK_HEADER = "CAMEL_SPARK_DATAFRAME_CALLBACK";
 
     private SparkConstants() {
diff --git a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkEndpoint.java b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkEndpoint.java
index f000084848e..5f916fe81df 100644
--- a/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkEndpoint.java
+++ b/components/camel-spark/src/main/java/org/apache/camel/component/spark/SparkEndpoint.java
@@ -36,7 +36,7 @@ import static org.slf4j.LoggerFactory.getLogger;
  * Send RDD or DataFrame jobs to Apache Spark clusters.
  */
 @UriEndpoint(firstVersion = "2.17.0", scheme = "spark", title = "Spark", syntax = "spark:endpointType",
-             producerOnly = true, category = { Category.BIGDATA, Category.IOT })
+             producerOnly = true, category = { Category.BIGDATA, Category.IOT }, headersClass = SparkConstants.class)
 public class SparkEndpoint extends DefaultEndpoint {
 
     // Logger
diff --git a/components/camel-splunk-hec/src/generated/resources/org/apache/camel/component/splunkhec/splunk-hec.json b/components/camel-splunk-hec/src/generated/resources/org/apache/camel/component/splunkhec/splunk-hec.json
index 22ed02f750c..63bd148155b 100644
--- a/components/camel-splunk-hec/src/generated/resources/org/apache/camel/component/splunkhec/splunk-hec.json
+++ b/components/camel-splunk-hec/src/generated/resources/org/apache/camel/component/splunkhec/splunk-hec.json
@@ -25,6 +25,9 @@
     "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": {
+    "CamelSplunkHECIndexTime": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Epoch-formatted time. Specify with the time query string parameter. Sets a default for all events in the request. The default time can be overridden." }
+  },
   "properties": {
     "splunkURL": { "kind": "path", "displayName": "Splunk URL", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Splunk Host URL" },
     "token": { "kind": "path", "displayName": "Token", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Splunk authorization token" },
diff --git a/components/camel-splunk-hec/src/main/docs/splunk-hec-component.adoc b/components/camel-splunk-hec/src/main/docs/splunk-hec-component.adoc
index c06b272d831..a2978bbbf52 100644
--- a/components/camel-splunk-hec/src/main/docs/splunk-hec-component.adoc
+++ b/components/camel-splunk-hec/src/main/docs/splunk-hec-component.adoc
@@ -49,19 +49,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-
-== Message Headers
-
-[width="100%",cols="10%,20%,70%",options="header",]
-|=======================================================================
-|Name |Type |Description
-
-|`SplunkHECConstants.INDEX_TIME` |`Long` | Epoch-formatted time.
-Specify with the time query string parameter. Sets a default for all events in the request.
-The default time can be overridden.
-
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Message body
 The body must be serializable to JSON so it may be sent to Splunk.
diff --git a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECConstants.java b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECConstants.java
index 4ca575c1062..3cd6f6f9f40 100644
--- a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECConstants.java
+++ b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECConstants.java
@@ -16,8 +16,14 @@
  */
 package org.apache.camel.component.splunkhec;
 
+import org.apache.camel.spi.Metadata;
+
 public interface SplunkHECConstants {
 
+    @Metadata(description = "Epoch-formatted time.\n" +
+                            "Specify with the time query string parameter. Sets a default for all events in the request.\n" +
+                            "The default time can be overridden.",
+              javaType = "Long")
     String INDEX_TIME = "CamelSplunkHECIndexTime";
 
 }
diff --git a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECEndpoint.java b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECEndpoint.java
index 79a5074d9dd..81f70e4ad23 100644
--- a/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECEndpoint.java
+++ b/components/camel-splunk-hec/src/main/java/org/apache/camel/component/splunkhec/SplunkHECEndpoint.java
@@ -35,7 +35,8 @@ import org.apache.commons.validator.routines.InetAddressValidator;
  * The splunk component allows to publish events in Splunk using the HTTP Event Collector.
  */
 @UriEndpoint(firstVersion = "3.3.0", scheme = "splunk-hec", title = "Splunk HEC", producerOnly = true,
-             syntax = "splunk-hec:splunkURL/token", category = { Category.LOG, Category.MONITORING })
+             syntax = "splunk-hec:splunkURL/token", category = { Category.LOG, Category.MONITORING },
+             headersClass = SplunkHECConstants.class)
 public class SplunkHECEndpoint extends DefaultEndpoint {
 
     private static final Pattern URI_PARSER
diff --git a/components/camel-spring-integration/src/generated/resources/org/apache/camel/component/spring/integration/spring-integration.json b/components/camel-spring-integration/src/generated/resources/org/apache/camel/component/spring/integration/spring-integration.json
index 5b29229bd27..771171b594c 100644
--- a/components/camel-spring-integration/src/generated/resources/org/apache/camel/component/spring/integration/spring-integration.json
+++ b/components/camel-spring-integration/src/generated/resources/org/apache/camel/component/spring/integration/spring-integration.json
@@ -26,6 +26,11 @@
     "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": {
+    "id": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.util.UUID", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message id." },
+    "replyChannel": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "org.springframework.integration.channel.DirectChannel", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The reply channel." },
+    "timestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the message." }
+  },
   "properties": {
     "defaultChannel": { "kind": "path", "displayName": "Default Channel", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The default channel name which is used by the Spring Integration Spring context. It will equal to the inputChannel name for the Spring Integration consumer and the outputChannel name for the Spring Integration provider." },
     "inOut": { "kind": "parameter", "displayName": "In Out", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "The exchange pattern that the Spring integration endpoint should use. If inOut=true then a reply channel is expected, either from the Spring Integration Message header or configured on the endpoint." },
diff --git a/components/camel-spring-integration/src/main/docs/spring-integration-component.adoc b/components/camel-spring-integration/src/main/docs/spring-integration-component.adoc
index 77f2adb2084..892624ac9b5 100644
--- a/components/camel-spring-integration/src/main/docs/spring-integration-component.adoc
+++ b/components/camel-spring-integration/src/main/docs/spring-integration-component.adoc
@@ -60,7 +60,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Usage
 
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConstants.java
similarity index 53%
copy from components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java
copy to components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConstants.java
index 2e34c5eca21..5abf880bb19 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationConstants.java
@@ -14,17 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.sql.stored;
+package org.apache.camel.component.spring.integration;
 
-public final class SqlStoredConstants {
+import org.apache.camel.spi.Metadata;
+import org.springframework.messaging.MessageHeaders;
 
-    public static final String SQL_STORED_TEMPLATE = "CamelSqlStoredTemplate";
+public final class SpringIntegrationConstants {
 
-    public static final String SQL_STORED_PARAMETERS = "CamelSqlStoredParameters";
+    @Metadata(description = "The message id.", javaType = "java.util.UUID")
+    public static final String ID = MessageHeaders.ID;
+    @Metadata(description = "The reply channel.", javaType = "org.springframework.integration.channel.DirectChannel")
+    public static final String REPLY_CHANNEL = MessageHeaders.REPLY_CHANNEL;
+    @Metadata(description = "The timestamp of the message.", javaType = "Long")
+    public static final String TIMESTAMP = MessageHeaders.TIMESTAMP;
 
-    public static final String SQL_STORED_UPDATE_COUNT = "CamelSqlStoredUpdateCount";
+    private SpringIntegrationConstants() {
 
-    private SqlStoredConstants() {
-        // Utility class
     }
 }
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationEndpoint.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationEndpoint.java
index fc6297685bd..490835d4716 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationEndpoint.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationEndpoint.java
@@ -33,7 +33,7 @@ import org.springframework.messaging.MessageChannel;
  */
 @UriEndpoint(firstVersion = "1.4.0", scheme = "spring-integration", title = "Spring Integration",
              syntax = "spring-integration:defaultChannel",
-             category = { Category.SPRING, Category.EVENTBUS })
+             category = { Category.SPRING, Category.EVENTBUS }, headersClass = SpringIntegrationConstants.class)
 public class SpringIntegrationEndpoint extends DefaultEndpoint {
     private MessageChannel messageChannel; // TODO is this field never assigned
     @UriPath
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationProducer.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationProducer.java
index d8d6cbb5c10..5f91616a26f 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationProducer.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/SpringIntegrationProducer.java
@@ -29,7 +29,6 @@ import org.springframework.integration.support.channel.BeanFactoryChannelResolve
 import org.springframework.messaging.Message;
 import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessageHandler;
-import org.springframework.messaging.MessageHeaders;
 import org.springframework.messaging.core.DestinationResolver;
 
 /**
@@ -95,7 +94,7 @@ public class SpringIntegrationProducer extends DefaultProducer implements Proces
             if (inputChannel == null) {
                 throw new IllegalArgumentException("InputChannel has not been configured on " + getEndpoint());
             }
-            exchange.getIn().getHeaders().put(MessageHeaders.REPLY_CHANNEL, inputChannel);
+            exchange.getIn().getHeaders().put(SpringIntegrationConstants.REPLY_CHANNEL, inputChannel);
 
             // subscribe so we can receive the reply from spring integration
             inputChannel.subscribe(new MessageHandler() {
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelSourceAdapter.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelSourceAdapter.java
index dca15150378..c94053b701c 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelSourceAdapter.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelSourceAdapter.java
@@ -23,6 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.spring.integration.SpringIntegrationBinding;
+import org.apache.camel.component.spring.integration.SpringIntegrationConstants;
 import org.apache.camel.support.service.ServiceHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,7 +33,6 @@ import org.springframework.integration.channel.DirectChannel;
 import org.springframework.messaging.Message;
 import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessageHandler;
-import org.springframework.messaging.MessageHeaders;
 
 /**
  * A CamelContext will be injected into CameSourceAdapter which will let Spring Integration channel talk to the
@@ -66,7 +66,7 @@ public class CamelSourceAdapter extends AbstractCamelAdapter implements Initiali
                     = SpringIntegrationBinding.createSpringIntegrationMessage(exchange);
 
             if (exchange.getPattern().isOutCapable()) {
-                exchange.getIn().getHeaders().put(MessageHeaders.REPLY_CHANNEL, replyChannel);
+                exchange.getIn().getHeaders().put(SpringIntegrationConstants.REPLY_CHANNEL, replyChannel);
 
                 // we want to do in-out so the inputChannel is mandatory (used to receive reply from spring integration)
                 if (replyChannel == null) {
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java
index f076735eeeb..9f8b59eba6e 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/adapter/CamelTargetAdapter.java
@@ -21,13 +21,13 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.spring.integration.SpringIntegrationBinding;
+import org.apache.camel.component.spring.integration.SpringIntegrationConstants;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.springframework.messaging.Message;
 import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessageDeliveryException;
 import org.springframework.messaging.MessageHandler;
-import org.springframework.messaging.MessageHeaders;
 
 /**
  * CamelTargetAdapter will redirect the Spring Integration message to the Camel context. When we inject the camel
@@ -77,7 +77,8 @@ public class CamelTargetAdapter extends AbstractCamelAdapter implements MessageH
             //Check the message header for the return address
             response = SpringIntegrationBinding.storeToSpringIntegrationMessage(outExchange.getOut());
             if (replyChannel == null) {
-                MessageChannel messageReplyChannel = (MessageChannel) message.getHeaders().get(MessageHeaders.REPLY_CHANNEL);
+                MessageChannel messageReplyChannel
+                        = (MessageChannel) message.getHeaders().get(SpringIntegrationConstants.REPLY_CHANNEL);
                 if (messageReplyChannel != null) {
                     result = messageReplyChannel.send(response);
                 } else {
diff --git a/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json b/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
index ec4e2b91a6d..73d8aa6c216 100644
--- a/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
+++ b/components/camel-spring-rabbitmq/src/generated/resources/org/apache/camel/component/springrabbit/spring-rabbitmq.json
@@ -52,6 +52,10 @@
     "messagePropertiesConverter": { "kind": "property", "displayName": "Message Properties Converter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.springrabbit.MessagePropertiesConverter", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom MessagePropertiesConverter so you can be in control how to map to\/from a org.springframework.amqp.core.MessageProperties." },
     "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": {
+    "CamelSpringRabbitmqRoutingOverrideKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The exchange key." },
+    "CamelSpringRabbitmqExchangeOverrideName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The exchange name." }
+  },
   "properties": {
     "exchangeName": { "kind": "path", "displayName": "Exchange Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The exchange name determines the exchange to which the produced messages will be sent to. In the case of consumers, the exchange name determines the exchange the queue will be bound to. Note: to use default exchange then do n [...]
     "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "org.springframework.amqp.rabbit.connection.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
diff --git a/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc b/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
index d55c73fe2a6..40a88a0e29e 100644
--- a/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
+++ b/components/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
@@ -41,8 +41,6 @@ The exchange name determines the exchange to which the produced
 messages will be sent to. In the case of consumers, the exchange name 
 determines the exchange the queue will be bound to.
 
-
-
 // component-configure options: START
 
 // component-configure options: END
@@ -55,7 +53,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Using a connection factory
 
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
index f7e0b3eca1e..7e51f6384e7 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQConstants.java
@@ -16,12 +16,16 @@
  */
 package org.apache.camel.component.springrabbit;
 
+import org.apache.camel.spi.Metadata;
+
 public final class SpringRabbitMQConstants {
 
     public static final String DEFAULT_EXCHANGE_NAME = "default";
 
     public static final String CHANNEL = "CamelSpringRabbitmqChannel";
+    @Metadata(description = "The exchange key.", javaType = "String")
     public static final String ROUTING_OVERRIDE_KEY = "CamelSpringRabbitmqRoutingOverrideKey";
+    @Metadata(description = "The exchange name.", javaType = "String")
     public static final String EXCHANGE_OVERRIDE_NAME = "CamelSpringRabbitmqExchangeOverrideName";
     public static final String DIRECT_MESSAGE_LISTENER_CONTAINER = "DMLC";
     public static final String SIMPLE_MESSAGE_LISTENER_CONTAINER = "SMLC";
diff --git a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
index e60f89b0905..84b5b49f1a8 100644
--- a/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
+++ b/components/camel-spring-rabbitmq/src/main/java/org/apache/camel/component/springrabbit/SpringRabbitMQEndpoint.java
@@ -55,7 +55,7 @@ import static org.apache.camel.component.springrabbit.SpringRabbitMQConstants.DI
  */
 @UriEndpoint(firstVersion = "3.8.0", scheme = "spring-rabbitmq", title = "Spring RabbitMQ",
              syntax = "spring-rabbitmq:exchangeName",
-             category = { Category.MESSAGING })
+             category = { Category.MESSAGING }, headersClass = SpringRabbitMQConstants.class)
 public class SpringRabbitMQEndpoint extends DefaultEndpoint implements AsyncEndpoint {
 
     public static final String ARG_PREFIX = "arg.";
diff --git a/components/camel-spring-redis/src/generated/resources/org/apache/camel/component/redis/spring-redis.json b/components/camel-spring-redis/src/generated/resources/org/apache/camel/component/redis/spring-redis.json
index 9bf934cd500..48764acc507 100644
--- a/components/camel-spring-redis/src/generated/resources/org/apache/camel/component/redis/spring-redis.json
+++ b/components/camel-spring-redis/src/generated/resources/org/apache/camel/component/redis/spring-redis.json
@@ -27,6 +27,37 @@
     "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": {
+    "CamelRedis.Command": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The command to perform." },
+    "CamelRedis.Key": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key." },
+    "CamelRedis.Keys": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The keys." },
+    "CamelRedis.Field": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The field." },
+    "CamelRedis.Fields": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The fields." },
+    "CamelRedis.Value": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The value." },
+    "CamelRedis.Values": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Map<String, Object> or Collection<Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The values." },
+    "CamelRedis.Start": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Start" },
+    "CamelRedis.End": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "End" },
+    "CamelRedis.Timeout": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeout." },
+    "CamelRedis.Offset": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The offset." },
+    "CamelRedis.Destination": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The destination." },
+    "CamelRedis.Channel": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "byte[] or String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The channel." },
+    "CamelRedis.Message": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message." },
+    "CamelRedis.Index": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The index." },
+    "CamelRedis.Position": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The position." },
+    "CamelRedis.Pivot": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The pivot." },
+    "CamelRedis.Count": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Count" },
+    "CamelRedis.Timestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp." },
+    "CamelRedis.Pattern": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "byte[] or String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The pattern." },
+    "CamelRedis.Db": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The db." },
+    "CamelRedis.Score": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The score." },
+    "CamelRedis.Min": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The min." },
+    "CamelRedis.Max": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The max." },
+    "CamelRedis.Increment": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Increment." },
+    "CamelRedis.WithScore": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "WithScore." },
+    "CamelRedis.Latitude": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Latitude." },
+    "CamelRedis.Longitude": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Longitude." },
+    "CamelRedis.Radius": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Double", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Radius." }
+  },
   "properties": {
     "host": { "kind": "path", "displayName": "Host", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.redis.RedisConfiguration", "configurationField": "configuration", "description": "The host where Redis server is running." },
     "port": { "kind": "path", "displayName": "Port", "group": "common", "label": "", "required": true, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.redis.RedisConfiguration", "configurationField": "configuration", "description": "Redis server port number" },
diff --git a/components/camel-spring-redis/src/main/docs/spring-redis-component.adoc b/components/camel-spring-redis/src/main/docs/spring-redis-component.adoc
index 92619851c05..5230f7187d0 100644
--- a/components/camel-spring-redis/src/main/docs/spring-redis-component.adoc
+++ b/components/camel-spring-redis/src/main/docs/spring-redis-component.adoc
@@ -50,7 +50,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Usage
 
diff --git a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisConstants.java b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisConstants.java
index 840158bacba..d57360c2ea3 100644
--- a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisConstants.java
+++ b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisConstants.java
@@ -16,34 +16,65 @@
  */
 package org.apache.camel.component.redis;
 
+import org.apache.camel.spi.Metadata;
+
 public interface RedisConstants {
+    @Metadata(label = "producer", description = "The command to perform.", javaType = "String")
     String COMMAND = "CamelRedis.Command";
+    @Metadata(description = "The key.", javaType = "String")
     String KEY = "CamelRedis.Key";
+    @Metadata(description = "The keys.", javaType = "Collection<String>")
     String KEYS = "CamelRedis.Keys";
+    @Metadata(description = "The field.", javaType = "String")
     String FIELD = "CamelRedis.Field";
+    @Metadata(description = "The fields.", javaType = "Collection<String>")
     String FIELDS = "CamelRedis.Fields";
+    @Metadata(description = "The value.", javaType = "Object")
     String VALUE = "CamelRedis.Value";
+    @Metadata(description = "The values.", javaType = "Map<String, Object> or Collection<Object>")
     String VALUES = "CamelRedis.Values";
+    @Metadata(description = "Start", javaType = "Long")
     String START = "CamelRedis.Start";
+    @Metadata(description = "End", javaType = "Long")
     String END = "CamelRedis.End";
+    @Metadata(description = "The timeout.", javaType = "Long")
     String TIMEOUT = "CamelRedis.Timeout";
+    @Metadata(description = "The offset.", javaType = "Long")
     String OFFSET = "CamelRedis.Offset";
+    @Metadata(description = "The destination.", javaType = "String")
     String DESTINATION = "CamelRedis.Destination";
+    @Metadata(description = "The channel.", javaType = "byte[] or String")
     String CHANNEL = "CamelRedis.Channel";
+    @Metadata(description = "The message.", javaType = "Object")
     String MESSAGE = "CamelRedis.Message";
+    @Metadata(description = "The index.", javaType = "Long")
     String INDEX = "CamelRedis.Index";
+    @Metadata(description = "The position.", javaType = "String")
     String POSITION = "CamelRedis.Position";
+    @Metadata(description = "The pivot.", javaType = "String")
     String PIVOT = "CamelRedis.Pivot";
+    @Metadata(description = "Count", javaType = "Long")
     String COUNT = "CamelRedis.Count";
+    @Metadata(description = "The timestamp.", javaType = "Long")
     String TIMESTAMP = "CamelRedis.Timestamp";
+    @Metadata(description = "The pattern.", javaType = "byte[] or String")
     String PATTERN = "CamelRedis.Pattern";
+    @Metadata(description = "The db.", javaType = "Integer")
     String DB = "CamelRedis.Db";
+    @Metadata(description = "The score.", javaType = "Double")
     String SCORE = "CamelRedis.Score";
+    @Metadata(description = "The min.", javaType = "Double")
     String MIN = "CamelRedis.Min";
+    @Metadata(description = "The max.", javaType = "Double")
     String MAX = "CamelRedis.Max";
+    @Metadata(description = "Increment.", javaType = "Double")
     String INCREMENT = "CamelRedis.Increment";
+    @Metadata(description = "WithScore.", javaType = "Boolean")
     String WITHSCORE = "CamelRedis.WithScore";
+    @Metadata(description = "Latitude.", javaType = "Double")
     String LATITUDE = "CamelRedis.Latitude";
+    @Metadata(description = "Longitude.", javaType = "Double")
     String LONGITUDE = "CamelRedis.Longitude";
+    @Metadata(description = "Radius.", javaType = "Double")
     String RADIUS = "CamelRedis.Radius";
 }
diff --git a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisEndpoint.java b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisEndpoint.java
index 99820e8c510..227fdd09ec5 100644
--- a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisEndpoint.java
+++ b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/RedisEndpoint.java
@@ -28,7 +28,7 @@ import org.apache.camel.support.DefaultEndpoint;
  * Send and receive messages from Redis.
  */
 @UriEndpoint(firstVersion = "2.11.0", scheme = "spring-redis", title = "Spring Redis", syntax = "spring-redist:host:port",
-             category = { Category.SPRING, Category.NOSQL })
+             category = { Category.SPRING, Category.NOSQL }, headersClass = RedisConstants.class)
 public class RedisEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-spring-ws/src/generated/resources/org/apache/camel/component/spring/ws/spring-ws.json b/components/camel-spring-ws/src/generated/resources/org/apache/camel/component/spring/ws/spring-ws.json
index f6ce15a2d3e..8ec26a91085 100644
--- a/components/camel-spring-ws/src/generated/resources/org/apache/camel/component/spring/ws/spring-ws.json
+++ b/components/camel-spring-ws/src/generated/resources/org/apache/camel/component/spring/ws/spring-ws.json
@@ -27,6 +27,15 @@
     "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 [...]
     "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": {
+    "CamelSpringWebserviceEndpointUri": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The endpoint URI" },
+    "CamelSpringWebserviceSoapAction": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "SOAP action to include inside a SOAP request when accessing remote web services" },
+    "CamelSpringWebserviceSoapHeader": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "javax.xml.transform.Source", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The soap header source" },
+    "CamelSpringWebserviceAddressingAction": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.net.URI", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "WS-Addressing 1.0 action header to include when accessing web services. The To header is set to the address of the web service as specified in the endpoint URI (default Spring-WS behavior)." },
+    "CamelSpringWebserviceAddressingFaultTo": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.net.URI", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Signifies the value for the faultAction response WS-Addressing FaultTo header that is provided by the method. See org.springframework.ws.soap.addressing.server.annotation.Action annotation for more details." },
+    "CamelSpringWebserviceAddressingReplyTo": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.net.URI", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Signifies the value for the replyTo response WS-Addressing ReplyTo header that is provided by the method. See org.springframework.ws.soap.addressing.server.annotation.Action annotation for more details." },
+    "breadcrumbId": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The breadcrumb id." }
+  },
   "properties": {
     "type": { "kind": "path", "displayName": "Type", "group": "consumer", "label": "consumer", "required": false, "type": "object", "javaType": "org.apache.camel.component.spring.ws.type.EndpointMappingType", "enum": [ "ROOT_QNAME", "ACTION", "TO", "SOAP_ACTION", "XPATHRESULT", "URI", "URI_PATH", "BEANNAME" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.spring.ws.SpringWebserviceConfiguration", "configurationField": "configu [...]
     "lookupKey": { "kind": "path", "displayName": "Lookup Key", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.spring.ws.SpringWebserviceConfiguration", "configurationField": "configuration", "description": "Endpoint mapping key if endpoint mapping is used" },
diff --git a/components/camel-spring-ws/src/main/docs/spring-ws-component.adoc b/components/camel-spring-ws/src/main/docs/spring-ws-component.adoc
index 48ed385e0ea..1d98c05be60 100644
--- a/components/camel-spring-ws/src/main/docs/spring-ws-component.adoc
+++ b/components/camel-spring-ws/src/main/docs/spring-ws-component.adoc
@@ -86,7 +86,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Accessing web services
 
@@ -150,7 +152,7 @@ exchange.getIn().setHeader(SpringWebserviceConstants.SPRING_WS_SOAP_HEADER, soap
 And then send the Exchange to a `spring-ws` endpoint to call the Web
 Service.
 
-Likewise the spring-ws consumer will also enrich the Camel Message with
+Likewise, the spring-ws consumer will also enrich the Camel Message with
 the SOAP header.
 
 For an example see this
@@ -189,7 +191,7 @@ the header transformation filter, see the below example:
 ------------------------------------------------------------------
 <bean id="headerTransformationFilter" class="org.apache.camel.component.spring.ws.filter.impl.HeaderTransformationMessageFilter">
     <constructor-arg index="0" value="org/apache/camel/component/spring/ws/soap-header-transform.xslt"/>
-</bean
+</bean>
 ------------------------------------------------------------------
 Use the bead defined above in the camel endpoint
 
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
index 0773928b854..ab4f4cf95db 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
@@ -16,18 +16,45 @@
  */
 package org.apache.camel.component.spring.ws;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public final class SpringWebserviceConstants {
 
+    @Metadata(label = "producer", description = "The endpoint URI", javaType = "String")
     public static final String SPRING_WS_ENDPOINT_URI = "CamelSpringWebserviceEndpointUri";
-
+    @Metadata(label = "producer",
+              description = "SOAP action to include inside a SOAP request when accessing remote web services",
+              javaType = "String")
     public static final String SPRING_WS_SOAP_ACTION = "CamelSpringWebserviceSoapAction";
+    @Metadata(label = "producer", description = "The soap header source", javaType = "javax.xml.transform.Source")
     public static final String SPRING_WS_SOAP_HEADER = "CamelSpringWebserviceSoapHeader";
-
+    /**
+     * WS-Addressing 1.0 action header to include when accessing web services. The To header is set to the address of
+     * the web service as specified in the endpoint URI (default Spring-WS behavior).
+     */
+    @Metadata(label = "producer", javaType = "java.net.URI")
     public static final String SPRING_WS_ADDRESSING_ACTION = "CamelSpringWebserviceAddressingAction";
+    /**
+     * Signifies the value for the faultAction response WS-Addressing <code>FaultTo</code> header that is provided by
+     * the method.
+     *
+     * See org.springframework.ws.soap.addressing.server.annotation.Action annotation for more details.
+     */
+    @Metadata(label = "producer", javaType = "java.net.URI")
     public static final String SPRING_WS_ADDRESSING_PRODUCER_FAULT_TO = "CamelSpringWebserviceAddressingFaultTo";
+    /**
+     * Signifies the value for the replyTo response WS-Addressing <code>ReplyTo</code> header that is provided by the
+     * method.
+     *
+     * See org.springframework.ws.soap.addressing.server.annotation.Action annotation for more details.
+     */
+    @Metadata(label = "producer", javaType = "java.net.URI")
     public static final String SPRING_WS_ADDRESSING_PRODUCER_REPLY_TO = "CamelSpringWebserviceAddressingReplyTo";
     public static final String SPRING_WS_ADDRESSING_CONSUMER_OUTPUT_ACTION = "CamelSpringWebserviceAddressingOutputAction";
     public static final String SPRING_WS_ADDRESSING_CONSUMER_FAULT_ACTION = "CamelSpringWebserviceAddressingFaultAction";
+    @Metadata(label = "consumer", description = "The breadcrumb id.", javaType = "String")
+    public static final String BREADCRUMB_ID = Exchange.BREADCRUMB_ID;
 
     private SpringWebserviceConstants() {
     }
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
index 90fff5853f4..960bfde0329 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConsumer.java
@@ -104,13 +104,13 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
             if (soapMessageRequest != null) {
                 MimeHeaders mimeHeaders = soapMessageRequest.getMimeHeaders();
                 if (mimeHeaders != null) {
-                    String[] breadcrumbIdHeaderValues = mimeHeaders.getHeader(Exchange.BREADCRUMB_ID);
+                    String[] breadcrumbIdHeaderValues = mimeHeaders.getHeader(SpringWebserviceConstants.BREADCRUMB_ID);
                     // expected to get one token
                     // if more than one token expected, 
                     // presumably breadcrumb generation strategy 
                     // may be required to implement
                     if (breadcrumbIdHeaderValues != null && breadcrumbIdHeaderValues.length >= 1) {
-                        exchange.getIn().setHeader(Exchange.BREADCRUMB_ID, breadcrumbIdHeaderValues[0]);
+                        exchange.getIn().setHeader(SpringWebserviceConstants.BREADCRUMB_ID, breadcrumbIdHeaderValues[0]);
                     }
                 }
             }
@@ -120,9 +120,9 @@ public class SpringWebserviceConsumer extends DefaultConsumer implements Message
     private void populateExchangeWithBreadcrumbFromMessageContext(Exchange exchange, MessageContext messageContext) {
         if (messageContext != null) {
             HttpServletRequest obj = (HttpServletRequest) messageContext.getProperty("transport.http.servletRequest");
-            String breadcrumbId = obj.getHeader(Exchange.BREADCRUMB_ID);
+            String breadcrumbId = obj.getHeader(SpringWebserviceConstants.BREADCRUMB_ID);
             if (breadcrumbId != null) {
-                exchange.getIn().setHeader(Exchange.BREADCRUMB_ID, breadcrumbId);
+                exchange.getIn().setHeader(SpringWebserviceConstants.BREADCRUMB_ID, breadcrumbId);
             }
         }
     }
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceEndpoint.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceEndpoint.java
index 004cf954c6c..0eba9b3bbf3 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceEndpoint.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceEndpoint.java
@@ -31,7 +31,7 @@ import org.apache.camel.support.DefaultEndpoint;
  */
 @UriEndpoint(firstVersion = "2.6.0", scheme = "spring-ws", title = "Spring WebService",
              syntax = "spring-ws:type:lookupKey:webServiceEndpointUri",
-             category = { Category.SPRING, Category.SOAP, Category.WEBSERVICE })
+             category = { Category.SPRING, Category.SOAP, Category.WEBSERVICE }, headersClass = SpringWebserviceConstants.class)
 public class SpringWebserviceEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java
index 6a7e2e4f660..ceea7f4d9a4 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java
@@ -112,9 +112,9 @@ public class BasicMessageFilter implements MessageFilter {
         headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_SOAP_HEADER);
 
         // Replaced local constant 'BreadcrumbId' with the actual constant key in header 'breadcrumbId'
-        // from org.apache.camel.Exchange.BREADCRUMB_ID. Because of this case mismatch, this key never
+        // from org.apache.camel.SpringWebserviceConstants.BREADCRUMB_ID. Because of this case mismatch, this key never
         // gets removed from header rather gets added to soapHeader all the time.
-        headerKeySet.remove(Exchange.BREADCRUMB_ID);
+        headerKeySet.remove(SpringWebserviceConstants.BREADCRUMB_ID);
 
         for (String name : headerKeySet) {
             if (!validHeaderName(name)) {
diff --git a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
index ca4fd76e9db..f94612c8ad0 100644
--- a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
+++ b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/sql.json
@@ -28,6 +28,16 @@
     "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 [...]
     "usePlaceholder": { "kind": "property", "displayName": "Use Placeholder", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries. This option is default true" }
   },
+  "headers": {
+    "CamelSqlQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Query to execute. This query takes precedence over the query specified in the endpoint URI. Note that query parameters in the header _are_ represented by a instead of a pass:# symbol" },
+    "CamelSqlUpdateCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of rows updated for update operations, returned as an Integer object. This header is not provided when using outputType=StreamList." },
+    "CamelSqlRowCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of rows returned for select operations, returned as an Integer object. This header is not provided when using outputType=StreamList." },
+    "CamelSqlRetrieveGeneratedKeys": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "Set its value to true to retrieve generated keys" },
+    "CamelSqlGeneratedColumns": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String[] or int[]", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Set it to specify the expected generated columns" },
+    "CamelSqlGeneratedKeysRowCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of rows in the header that contains generated keys." },
+    "CamelSqlGeneratedKeyRows": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "List<Map<String, Object>>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Rows that contains the generated keys (a list of maps of keys)." },
+    "CamelSqlParameters": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Iterator", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The SQL parameters when using the option useMessageBodyForSql" }
+  },
   "properties": {
     "query": { "kind": "path", "displayName": "Query", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file." },
     "allowNamedParameters": { "kind": "parameter", "displayName": "Allow Named Parameters", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to allow using named parameters in the queries." },
diff --git a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
index 5d960f268a9..b6c28c34503 100644
--- a/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
+++ b/components/camel-sql/src/generated/resources/org/apache/camel/component/sql/stored/sql-stored.json
@@ -26,6 +26,11 @@
     "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": {
+    "CamelSqlStoredTemplate": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The template" },
+    "CamelSqlStoredParameters": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Iterator", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The parameters" },
+    "CamelSqlStoredUpdateCount": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The update count" }
+  },
   "properties": {
     "template": { "kind": "path", "displayName": "Template", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Sets the StoredProcedure template to perform" },
     "batch": { "kind": "parameter", "displayName": "Batch", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables or disables batch mode" },
diff --git a/components/camel-sql/src/main/docs/sql-component.adoc b/components/camel-sql/src/main/docs/sql-component.adoc
index 69884674090..773a90224e8 100644
--- a/components/camel-sql/src/main/docs/sql-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-component.adoc
@@ -120,7 +120,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Treatment of the message body
 
@@ -195,42 +197,6 @@ from("direct:withSplitModel")
         .end();
 ----
 
-[[sql-component-header-values]]
-== Header values
-
-When performing `update` operations, the SQL Component stores the update
-count in the following message headers:
-
-[cols="1,3"]
-|===
-|Header |Description
-
-|`CamelSqlUpdateCount` |The number of rows updated for `update` operations, returned as an
-`Integer` object. This header is not provided when using
-outputType=StreamList.
-
-|`CamelSqlRowCount` |The number of rows returned for `select` operations, returned as an
-`Integer` object. This header is not provided when using
-outputType=StreamList.
-
-|`CamelSqlQuery` |Query to execute. This query takes precedence over the
-query specified in the endpoint URI. Note that query parameters in the
-header _are_ represented by a `?` instead of a `pass:[#]` symbol
-|===
-
-When performing `insert` operations, the SQL Component stores the rows
-with the generated keys and number of these rows in the following
-message headers:
-
-[cols="1,3"]
-|===
-|Header |Description
-
-|CamelSqlGeneratedKeysRowCount |The number of rows in the header that contains generated keys.
-
-|CamelSqlGeneratedKeyRows |Rows that contains the generated keys (a list of maps of keys).
-|===
-
 == Generated keys
 
 *Since Camel 2.12.4, 2.13.1 and 2.14*
diff --git a/components/camel-sql/src/main/docs/sql-stored-component.adoc b/components/camel-sql/src/main/docs/sql-stored-component.adoc
index 0ce183f370a..4c66c9b59dd 100644
--- a/components/camel-sql/src/main/docs/sql-stored-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-stored-component.adoc
@@ -79,13 +79,15 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Declaring the stored procedure template
 
 The template is declared using a syntax that would be similar to a Java
 method signature. The name of the stored procedure, and then the
-arguments enclosed in parenthesis. An example explains this well:
+arguments enclosed in parentheses. An example explains this well:
 
 [source,xml]
 ----
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java
index 629cbd0af77..de28beb373a 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlConstants.java
@@ -16,20 +16,34 @@
  */
 package org.apache.camel.component.sql;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * SQL Constants.
  */
 public final class SqlConstants {
 
+    @Metadata(label = "producer", description = "Query to execute. This query takes precedence over the\n" +
+                                                "query specified in the endpoint URI. Note that query parameters in the\n" +
+                                                "header _are_ represented by a `?` instead of a `pass:[#]` symbol",
+              javaType = "String")
     public static final String SQL_QUERY = "CamelSqlQuery";
-
+    @Metadata(label = "producer", description = "The number of rows updated for `update` operations, returned as an\n" +
+                                                "`Integer` object. This header is not provided when using\n" +
+                                                "outputType=StreamList.",
+              javaType = "Integer")
     public static final String SQL_UPDATE_COUNT = "CamelSqlUpdateCount";
-
+    @Metadata(label = "producer", description = "The number of rows returned for `select` operations, returned as an\n" +
+                                                "`Integer` object. This header is not provided when using\n" +
+                                                "outputType=StreamList.",
+              javaType = "Integer")
     public static final String SQL_ROW_COUNT = "CamelSqlRowCount";
 
     /**
      * Boolean input header. Set its value to true to retrieve generated keys, default is false
      */
+    @Metadata(label = "producer", description = "Set its value to true to retrieve generated keys", javaType = "Boolean",
+              defaultValue = "false")
     public static final String SQL_RETRIEVE_GENERATED_KEYS = "CamelSqlRetrieveGeneratedKeys";
 
     /**
@@ -42,21 +56,28 @@ public final class SqlConstants {
      *      href="http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#execute(java.lang.String, java.lang.String[])">
      *      java.sql.Statement.execute(java.lang.String, java.lang.String[])</a>
      */
+    @Metadata(label = "producer", description = "Set it to specify the expected generated columns",
+              javaType = "String[] or int[]")
     public static final String SQL_GENERATED_COLUMNS = "CamelSqlGeneratedColumns";
 
     /**
      * int output header giving the number of rows of generated keys
      */
+    @Metadata(label = "producer", description = "The number of rows in the header that contains generated keys.",
+              javaType = "Integer")
     public static final String SQL_GENERATED_KEYS_ROW_COUNT = "CamelSqlGeneratedKeysRowCount";
 
     /**
      * <tt>List<Map<String, Object>></tt> output header containing the generated keys retrieved
      */
+    @Metadata(label = "producer", description = "Rows that contains the generated keys (a list of maps of keys).",
+              javaType = "List<Map<String, Object>>")
     public static final String SQL_GENERATED_KEYS_DATA = "CamelSqlGeneratedKeyRows";
 
     /**
      * The SQL parameters when using the option useMessageBodyForSql
      */
+    @Metadata(label = "producer", javaType = "Iterator")
     public static final String SQL_PARAMETERS = "CamelSqlParameters";
 
     private SqlConstants() {
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
index c1696863a72..66fbb257a49 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/SqlEndpoint.java
@@ -30,7 +30,7 @@ import org.apache.camel.util.UnsafeUriCharactersEncoder;
  * Perform SQL queries using Spring JDBC.
  */
 @UriEndpoint(firstVersion = "1.4.0", scheme = "sql", title = "SQL", syntax = "sql:query",
-             category = { Category.DATABASE, Category.SQL })
+             category = { Category.DATABASE, Category.SQL }, headersClass = SqlConstants.class)
 public class SqlEndpoint extends DefaultSqlEndpoint {
 
     @UriPath(description = "Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file.")
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java
index 2e34c5eca21..e0a2913734d 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredConstants.java
@@ -16,12 +16,14 @@
  */
 package org.apache.camel.component.sql.stored;
 
-public final class SqlStoredConstants {
+import org.apache.camel.spi.Metadata;
 
+public final class SqlStoredConstants {
+    @Metadata(label = "producer", description = "The template", javaType = "String")
     public static final String SQL_STORED_TEMPLATE = "CamelSqlStoredTemplate";
-
+    @Metadata(label = "producer", description = "The parameters", javaType = "Iterator")
     public static final String SQL_STORED_PARAMETERS = "CamelSqlStoredParameters";
-
+    @Metadata(label = "producer", description = "The update count", javaType = "Integer")
     public static final String SQL_STORED_UPDATE_COUNT = "CamelSqlStoredUpdateCount";
 
     private SqlStoredConstants() {
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
index 9de682c5b3a..a7e6e08ad33 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/stored/SqlStoredEndpoint.java
@@ -36,7 +36,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
  * Perform SQL queries as a JDBC Stored Procedures using Spring JDBC.
  */
 @UriEndpoint(firstVersion = "2.17.0", scheme = "sql-stored", title = "SQL Stored Procedure", syntax = "sql-stored:template",
-             producerOnly = true, label = "database,sql")
+             producerOnly = true, label = "database,sql", headersClass = SqlStoredConstants.class)
 public class SqlStoredEndpoint extends DefaultEndpoint {
 
     private CallableStatementWrapperFactory wrapperFactory;
diff --git a/components/camel-ssh/src/generated/resources/org/apache/camel/component/ssh/ssh.json b/components/camel-ssh/src/generated/resources/org/apache/camel/component/ssh/ssh.json
index e357d1ba285..d850553136e 100644
--- a/components/camel-ssh/src/generated/resources/org/apache/camel/component/ssh/ssh.json
+++ b/components/camel-ssh/src/generated/resources/org/apache/camel/component/ssh/ssh.json
@@ -41,6 +41,12 @@
     "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.ssh.SshConfiguration", "configurationField": "configuration", "description": "Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null." },
     "username": { "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.ssh.SshConfiguration", "configurationField": "configuration", "description": "Sets the username to use in logging into the remote SSH server." }
   },
+  "headers": {
+    "CamelSshUsername": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The user name" },
+    "CamelSshPassword": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The password" },
+    "CamelSshStderr": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "InputStream", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The value of this header is a InputStream with the standard error stream of the executable." },
+    "CamelSshExitValue": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The value of this header is the exit value that is returned, after the execution. By convention a non-zero status exit value indicates abnormal termination. Note that the exit value is OS dependent." }
+  },
   "properties": {
     "host": { "kind": "path", "displayName": "Host", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.ssh.SshConfiguration", "configurationField": "configuration", "description": "Sets the hostname of the remote SSH server." },
     "port": { "kind": "path", "displayName": "Port", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 22, "configurationClass": "org.apache.camel.component.ssh.SshConfiguration", "configurationField": "configuration", "description": "Sets the port number for the remote SSH server." },
diff --git a/components/camel-ssh/src/main/docs/ssh-component.adoc b/components/camel-ssh/src/main/docs/ssh-component.adoc
index bc1f76c42da..8ca8a42f507 100644
--- a/components/camel-ssh/src/main/docs/ssh-component.adoc
+++ b/components/camel-ssh/src/main/docs/ssh-component.adoc
@@ -49,7 +49,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Usage as a Producer endpoint
 
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConstants.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConstants.java
index 15d38cfe048..0c6fb001abf 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConstants.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConstants.java
@@ -16,9 +16,28 @@
  */
 package org.apache.camel.component.ssh;
 
+import java.io.InputStream;
+
+import org.apache.camel.spi.Metadata;
+
 public interface SshConstants {
 
+    @Metadata(description = "The user name", javaType = "String")
     String USERNAME_HEADER = "CamelSshUsername";
+    @Metadata(description = "The password", javaType = "String")
     String PASSWORD_HEADER = "CamelSshPassword";
 
+    /**
+     * The value of this header is a {@link InputStream} with the standard error stream of the executable.
+     */
+    @Metadata(javaType = "InputStream")
+    String STDERR = "CamelSshStderr";
+
+    /**
+     * The value of this header is the exit value that is returned, after the execution. By convention a non-zero status
+     * exit value indicates abnormal termination. <br>
+     * <b>Note that the exit value is OS dependent.</b>
+     */
+    @Metadata(javaType = "Integer")
+    String EXIT_VALUE = "CamelSshExitValue";
 }
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConsumer.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConsumer.java
index a4b29f106ce..fe5bbba3663 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConsumer.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshConsumer.java
@@ -68,8 +68,8 @@ public class SshConsumer extends ScheduledPollConsumer {
             SshResult result = SshHelper.sendExecCommand(exchange.getIn().getHeaders(), command, endpoint, client);
 
             exchange.getIn().setBody(result.getStdout());
-            exchange.getIn().setHeader(SshResult.EXIT_VALUE, result.getExitValue());
-            exchange.getIn().setHeader(SshResult.STDERR, result.getStderr());
+            exchange.getIn().setHeader(SshConstants.EXIT_VALUE, result.getExitValue());
+            exchange.getIn().setHeader(SshConstants.STDERR, result.getStderr());
 
             // send message to next processor in the route
             getProcessor().process(exchange);
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
index 35a123477f1..12a13fafcc3 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshEndpoint.java
@@ -29,7 +29,8 @@ import org.apache.sshd.common.keyprovider.KeyPairProvider;
  * Execute commands on remote hosts using SSH.
  */
 @UriEndpoint(firstVersion = "2.10.0", scheme = "ssh", title = "SSH", syntax = "ssh:host:port",
-             alternativeSyntax = "ssh:username:password@host:port", category = { Category.FILE })
+             alternativeSyntax = "ssh:username:password@host:port", category = { Category.FILE },
+             headersClass = SshConstants.class)
 public class SshEndpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java
index cb0a2807072..63964c2be39 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshProducer.java
@@ -73,8 +73,8 @@ public class SshProducer extends DefaultProducer {
             }
             SshResult result = SshHelper.sendExecCommand(headers, command, endpoint, client);
             exchange.getOut().setBody(result.getStdout());
-            exchange.getOut().setHeader(SshResult.EXIT_VALUE, result.getExitValue());
-            exchange.getOut().setHeader(SshResult.STDERR, result.getStderr());
+            exchange.getOut().setHeader(SshConstants.EXIT_VALUE, result.getExitValue());
+            exchange.getOut().setHeader(SshConstants.STDERR, result.getStderr());
         } catch (Exception e) {
             throw new CamelExchangeException("Cannot execute command: " + command, exchange, e);
         }
diff --git a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshResult.java b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshResult.java
index d5caa2db8d6..68641ae5618 100644
--- a/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshResult.java
+++ b/components/camel-ssh/src/main/java/org/apache/camel/component/ssh/SshResult.java
@@ -20,17 +20,11 @@ import java.io.InputStream;
 
 public class SshResult {
 
-    /**
-     * The value of this header is a {@link InputStream} with the standard error stream of the executable.
-     */
-    public static final String STDERR = "CamelSshStderr";
+    @Deprecated
+    public static final String STDERR = SshConstants.EXIT_VALUE;
 
-    /**
-     * The value of this header is the exit value that is returned, after the execution. By convention a non-zero status
-     * exit value indicates abnormal termination. <br>
-     * <b>Note that the exit value is OS dependent.</b>
-     */
-    public static final String EXIT_VALUE = "CamelSshExitValue";
+    @Deprecated
+    public static final String EXIT_VALUE = SshConstants.EXIT_VALUE;
 
     private final String command;
 
diff --git a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentConsumerTest.java b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentConsumerTest.java
index d018c2c5b06..a749cb83558 100644
--- a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentConsumerTest.java
+++ b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentConsumerTest.java
@@ -27,8 +27,8 @@ public class SshComponentConsumerTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived("test");
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
         assertMockEndpointsSatisfied();
     }
 
diff --git a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostEdDSATest.java b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostEdDSATest.java
index 2100a741424..4d7b0607907 100644
--- a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostEdDSATest.java
+++ b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostEdDSATest.java
@@ -29,8 +29,8 @@ public class SshComponentKnownHostEdDSATest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:password");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(msg);
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
 
         template.sendBody("direct:ssh", msg);
 
diff --git a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostTest.java b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostTest.java
index 3cde2aa2d07..81ac85c9cb1 100644
--- a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostTest.java
+++ b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentKnownHostTest.java
@@ -29,8 +29,8 @@ public class SshComponentKnownHostTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:password");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(msg);
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
 
         template.sendBody("direct:ssh", msg);
 
@@ -56,8 +56,8 @@ public class SshComponentKnownHostTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:password");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(msg);
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
 
         template.sendBody("direct:sshInvalidWarnOnly", msg);
 
@@ -69,8 +69,8 @@ public class SshComponentKnownHostTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived("test");
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
         assertMockEndpointsSatisfied();
     }
 
@@ -86,8 +86,8 @@ public class SshComponentKnownHostTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:resultInvalidWarnOnly");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived("test");
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
         assertMockEndpointsSatisfied();
     }
 
diff --git a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentProducerTest.java b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentProducerTest.java
index c21c92cc182..9bec626bad8 100644
--- a/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentProducerTest.java
+++ b/components/camel-ssh/src/test/java/org/apache/camel/component/ssh/SshComponentProducerTest.java
@@ -32,8 +32,8 @@ public class SshComponentProducerTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:password");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(msg);
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
 
         template.sendBody("direct:ssh", msg);
 
@@ -65,8 +65,8 @@ public class SshComponentProducerTest extends SshComponentTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:password");
         mock.expectedMinimumMessageCount(1);
         mock.expectedBodiesReceived(msg);
-        mock.expectedHeaderReceived(SshResult.EXIT_VALUE, 0);
-        mock.expectedHeaderReceived(SshResult.STDERR, "Error:test");
+        mock.expectedHeaderReceived(SshConstants.EXIT_VALUE, 0);
+        mock.expectedHeaderReceived(SshConstants.STDERR, "Error:test");
 
         Map<String, Object> headers = new HashMap<>();
         headers.put(SshConstants.USERNAME_HEADER, "smx");
diff --git a/components/camel-stitch/src/generated/resources/org/apache/camel/component/stitch/stitch.json b/components/camel-stitch/src/generated/resources/org/apache/camel/component/stitch/stitch.json
index b9bb6222172..3178a97d433 100644
--- a/components/camel-stitch/src/generated/resources/org/apache/camel/component/stitch/stitch.json
+++ b/components/camel-stitch/src/generated/resources/org/apache/camel/component/stitch/stitch.json
@@ -33,6 +33,14 @@
     "stitchClient": { "kind": "property", "displayName": "Stitch Client", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.stitch.client.StitchClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.stitch.StitchConfiguration", "configurationField": "configuration", "description": "Set a custom StitchClient that implements org.apache.cam [...]
     "token": { "kind": "property", "displayName": "Token", "group": "security", "label": "security", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.stitch.StitchConfiguration", "configurationField": "configuration", "description": "Stitch access token for the Stitch Import API" }
   },
+  "headers": {
+    "CamelStitchTableName": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the destination table the data is being pushed to. Table names must be unique in each destination schema, or loading issues will occur. Note: The number of characters in the table name should be within the destinations allowed limits [...]
+    "CamelStitchSchema": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "StitchSchema or Map", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The schema that describes the Stitch message" },
+    "CamelStitchKeyNames": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Collection<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A collection of strings representing the Primary Key fields in the source table. Stitch use these Primary Keys to de-dupe data during loading If not provided, the table will be loaded in an append-only manner." },
+    "CamelStitchCode": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "HTTP Status code that is returned from Stitch Import HTTP API." },
+    "CamelStitchHeaders": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "HTTP headers that are returned from Stitch Import HTTP API." },
+    "CamelStitchStatus": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The status message that Stitch returns after sending the data through Stitch Import API." }
+  },
   "properties": {
     "tableName": { "kind": "path", "displayName": "Table Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.stitch.StitchConfiguration", "configurationField": "configuration", "description": "The name of the destination table the data is being pushed to. Table names must be unique in each destination schema, or loading issu [...]
     "keyNames": { "kind": "parameter", "displayName": "Key Names", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.stitch.StitchConfiguration", "configurationField": "configuration", "description": "A collection of comma separated strings representing the Primary Key fields in the source table. Stitch use these Primary  [...]
diff --git a/components/camel-stitch/src/main/docs/stitch-component.adoc b/components/camel-stitch/src/main/docs/stitch-component.adoc
index 2985697a540..6fd00a1fc63 100644
--- a/components/camel-stitch/src/main/docs/stitch-component.adoc
+++ b/components/camel-stitch/src/main/docs/stitch-component.adoc
@@ -45,9 +45,6 @@ for this component:
 stitch:[tableName]//[?options]
 ------------------------------
 
-
-
-
 // component-configure options: START
 
 // component-configure options: END
@@ -60,7 +57,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Async Producer
 
@@ -92,30 +91,6 @@ from("direct:sendStitch")
 .to("stitch:table_1?token=RAW({{token}})");
 --------------------------------------------------------------------------------
 
-=== Message headers evaluated by the component producer
-Before sending a message to Stitch component you can configure the following headers.
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelStitchTableName`| `StitchConstants.TABLE_NAME`|`String`| The name of the destination table the data is being pushed to. Table names must be unique in each destination schema, or loading issues will occur. Note: The number of characters in the table name should be within the destinations allowed limits or data will rejected.
-|`CamelStitchSchema`| `StitchConstants.SCHEMA`|`StitchSchema`| The schema that describes the Stitch message of type `org.apache.camel.component.stitch.client.models.StitchSchema`
-|`CamelStitchKeyNames`| `StitchConstants.KEY_NAMES`|`Collection<String>`| A collection of strings representing the Primary Key fields in the source table. Stitch use these Primary Keys to de-dupe data during loading If not provided, the table will be loaded in an append-only manner.
-|=======================================================================
-
-=== Message headers set by the component producer
-After the message is sent to Stitch, the following headers are available
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|=======================================================================
-|Header |Variable Name |Type |Description
-
-|`CamelStitchCode`| `StitchConstants.CODE`|`Integer`| HTTP Status code that is returned from Stitch Import HTTP API.
-|`CamelStitchHeaders`| `StitchConstants.HEADERS`|`Map`| HTTP headers that are returned from Stitch Import HTTP API.
-|`CamelStitchStatus`| `StitchConstants.STATUS`|`String`| The status message that Stitch returns after sending the data through Stitch Import API.
-|=======================================================================
-
 === Message body type
 Currently, the component supports the following types for the body message on the producer side when producing a message to Stitch component:
 
@@ -132,8 +107,6 @@ If you choose to send your message as `StitchMessage`, *you will need* to add `t
 * `Iterable`: You can send multiple Stitch messages that are aggregated by Camel or aggregated through custom processor. These aggregated messages
 can be type of `StitchMessage`, `StitchRequestBody` or `Map` but this Map here is similar to `StitchMessage`.
 
-
-
 === Examples
 
 Here are list of examples of data that can be proceeded to Stitch:
@@ -203,8 +176,6 @@ from("direct:sendStitch")
 .to("stitch:table_1?token=RAW({{token}})");
 --------------------------------------------------------------------------------
 
-
-
 ==== Input body type `Iterable`:
 [source,java]
 --------------------------------------------------------------------------------
diff --git a/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchConstants.java b/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchConstants.java
index f2150ef8427..e434246297c 100644
--- a/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchConstants.java
+++ b/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchConstants.java
@@ -16,15 +16,35 @@
  */
 package org.apache.camel.component.stitch;
 
+import org.apache.camel.spi.Metadata;
+
 public final class StitchConstants {
     private static final String HEADER_PREFIX = "CamelStitch";
     // headers evaluated by producer
+    @Metadata(label = "producer", description = "The name of the destination table the data is being pushed to. " +
+                                                "Table names must be unique in each destination schema, or loading issues will occur. "
+                                                +
+                                                "Note: The number of characters in the table name should be within the destinations allowed limits or data will rejected.",
+              javaType = "String")
     public static final String TABLE_NAME = HEADER_PREFIX + "TableName";
+    @Metadata(label = "producer", description = "The schema that describes the Stitch message",
+              javaType = "StitchSchema or Map")
     public static final String SCHEMA = HEADER_PREFIX + "Schema";
+    @Metadata(label = "producer",
+              description = "A collection of strings representing the Primary Key fields in the source table. " +
+                            "Stitch use these Primary Keys to de-dupe data during loading If not provided, the table will be loaded in an append-only manner.",
+              javaType = "Collection<String>")
     public static final String KEY_NAMES = HEADER_PREFIX + "KeyNames";
     // headers set by producer
+    @Metadata(label = "producer", description = "HTTP Status code that is returned from Stitch Import HTTP API.",
+              javaType = "Integer")
     public static final String CODE = HEADER_PREFIX + "Code";
+    @Metadata(label = "producer", description = "HTTP headers that are returned from Stitch Import HTTP API.",
+              javaType = "Map<String, Object>")
     public static final String HEADERS = HEADER_PREFIX + "Headers";
+    @Metadata(label = "producer",
+              description = "The status message that Stitch returns after sending the data through Stitch Import API.",
+              javaType = "String")
     public static final String STATUS = HEADER_PREFIX + "Status";
 
     private StitchConstants() {
diff --git a/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchEndpoint.java b/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchEndpoint.java
index 525d89a4556..74a1f748d7a 100644
--- a/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchEndpoint.java
+++ b/components/camel-stitch/src/main/java/org/apache/camel/component/stitch/StitchEndpoint.java
@@ -34,7 +34,8 @@ import org.apache.camel.util.ObjectHelper;
  */
 @UriEndpoint(firstVersion = "3.8.0", scheme = "stitch", title = "Stitch",
              syntax = "stitch:tableName", producerOnly = true, category = {
-                     Category.CLOUD, Category.API, Category.COMPUTE, Category.BIGDATA })
+                     Category.CLOUD, Category.API, Category.COMPUTE, Category.BIGDATA },
+             headersClass = StitchConstants.class)
 public class StitchEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git a/components/camel-stream/src/generated/resources/org/apache/camel/component/stream/stream.json b/components/camel-stream/src/generated/resources/org/apache/camel/component/stream/stream.json
index 4c52a4d1c5f..1b7befa4449 100644
--- a/components/camel-stream/src/generated/resources/org/apache/camel/component/stream/stream.json
+++ b/components/camel-stream/src/generated/resources/org/apache/camel/component/stream/stream.json
@@ -26,6 +26,10 @@
     "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": {
+    "CamelStreamIndex": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The index" },
+    "CamelStreamComplete": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Is complete" }
+  },
   "properties": {
     "kind": { "kind": "path", "displayName": "Kind", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "in", "out", "err", "header", "file" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Kind of stream to use such as System.in or System.out." },
     "encoding": { "kind": "parameter", "displayName": "Encoding", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "You can configure the encoding (is a charset name) to use text-based streams (for example, message body is a String object). If not provided, Camel uses the JVM default Charset." },
diff --git a/components/camel-stream/src/main/docs/stream-component.adoc b/components/camel-stream/src/main/docs/stream-component.adoc
index 8c122246062..65bd0ba4e27 100644
--- a/components/camel-stream/src/main/docs/stream-component.adoc
+++ b/components/camel-stream/src/main/docs/stream-component.adoc
@@ -56,7 +56,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Message content
 
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConstants.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConstants.java
index 913dd118c70..43ab6ce6045 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConstants.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamConstants.java
@@ -16,9 +16,13 @@
  */
 package org.apache.camel.component.stream;
 
+import org.apache.camel.spi.Metadata;
+
 public final class StreamConstants {
 
+    @Metadata(label = "consumer", description = "The index", javaType = "long")
     public static final String STREAM_INDEX = "CamelStreamIndex";
+    @Metadata(label = "consumer", description = "Is complete", javaType = "boolean")
     public static final String STREAM_COMPLETE = "CamelStreamComplete";
 
     private StreamConstants() {
diff --git a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
index 3129cf59fc1..56d82cd34ea 100644
--- a/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
+++ b/components/camel-stream/src/main/java/org/apache/camel/component/stream/StreamEndpoint.java
@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
  * Read from system-in and write to system-out and system-err streams.
  */
 @UriEndpoint(firstVersion = "1.3.0", scheme = "stream", title = "Stream", syntax = "stream:kind",
-             category = { Category.FILE, Category.SYSTEM })
+             category = { Category.FILE, Category.SYSTEM }, headersClass = StreamConstants.class)
 public class StreamEndpoint extends DefaultEndpoint {
 
     private static final Logger LOG = LoggerFactory.getLogger(StreamEndpoint.class);
diff --git a/components/camel-stringtemplate/src/generated/resources/org/apache/camel/component/stringtemplate/string-template.json b/components/camel-stringtemplate/src/generated/resources/org/apache/camel/component/stringtemplate/string-template.json
index 07010ca03a0..ebd766da029 100644
--- a/components/camel-stringtemplate/src/generated/resources/org/apache/camel/component/stringtemplate/string-template.json
+++ b/components/camel-stringtemplate/src/generated/resources/org/apache/camel/component/stringtemplate/string-template.json
@@ -27,6 +27,11 @@
     "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": {
+    "CamelStringTemplateResourceUri": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A URI for the template resource to use instead of the endpoint configured." },
+    "CamelStringTemplateVariableMap": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Map<String, Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Map of the variables which are made available to a script or template" },
+    "CamelStringTemplateTemplate": { "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The template to use instead of the endpoint configured." }
+  },
   "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-stringtemplate/src/main/docs/string-template-component.adoc b/components/camel-stringtemplate/src/main/docs/string-template-component.adoc
index 93e0fa12117..c3dad0fadfe 100644
--- a/components/camel-stringtemplate/src/main/docs/string-template-component.adoc
+++ b/components/camel-stringtemplate/src/main/docs/string-template-component.adoc
@@ -54,7 +54,9 @@ include::partial$component-endpoint-options.adoc[]
 // endpoint options: START
 
 // endpoint options: END
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Headers
 
@@ -76,16 +78,6 @@ location for a template or the template content itself. If any of these
 headers is set then Camel uses this over the endpoint configured
 resource. This allows you to provide a dynamic template at runtime.
 
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|CamelStringTemplateResourceUri |String |A URI for the template resource to use instead of the
-endpoint configured.
-
-|CamelStringTemplateTemplate |String |The template to use instead of the endpoint configured.
-|=======================================================================
-
 == StringTemplate Attributes
 
 You can define the custom context map by setting the
@@ -131,6 +123,4 @@ Regards Camel Riders Bookstore
 
 And the java code is as follows:
 
-
-
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
index 4e4c480c022..6149b43df78 100644
--- a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
+++ b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
@@ -16,13 +16,19 @@
  */
 package org.apache.camel.component.stringtemplate;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * StringTemplate constants.
  */
 public final class StringTemplateConstants {
 
+    @Metadata(description = "A URI for the template resource to use instead of the endpoint configured.", javaType = "String")
     public static final String STRINGTEMPLATE_RESOURCE_URI = "CamelStringTemplateResourceUri";
+    @Metadata(description = "Map of the variables which are made available to a script or template",
+              javaType = "Map<String, Object>")
     public static final String STRINGTEMPLATE_VARIABLE_MAP = "CamelStringTemplateVariableMap";
+    @Metadata(description = "The template to use instead of the endpoint configured.", javaType = "String")
     public static final String STRINGTEMPLATE_TEMPLATE = "CamelStringTemplateTemplate";
 
     private StringTemplateConstants() {
diff --git a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
index 2a996db1e77..c7005d4d266 100644
--- a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
+++ b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
@@ -38,7 +38,7 @@ import org.stringtemplate.v4.STGroup;
  */
 @UriEndpoint(firstVersion = "1.2.0", scheme = "string-template", title = "String Template",
              syntax = "string-template:resourceUri", producerOnly = true,
-             category = { Category.TRANSFORMATION, Category.SCRIPT })
+             category = { Category.TRANSFORMATION, Category.SCRIPT }, headersClass = StringTemplateConstants.class)
 public class StringTemplateEndpoint extends ResourceEndpoint {
 
     @UriParam(defaultValue = "false")