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 4f07964  CAMEL-17792: Add documentation about the message headers (G) 
(#7248)
4f07964 is described below

commit 4f079648098488b87fef3c423ba91899e0803c11
Author: Nicolas Filotto <[email protected]>
AuthorDate: Tue Mar 22 18:55:40 2022 +0100

    CAMEL-17792: Add documentation about the message headers (G) (#7248)
    
    ## 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 G
    
    * Document the messages headers using the annotations
    * Migrate the existing documentation of message headers to use the 
annotations instead
    * 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-grpc: Force the version of `guava` to avoid conflict on build
    
    * CAMEL-17792: Add doc about the message headers of camel-ganglia
    * CAMEL-17792: Add doc about the message headers of camel-geocoder
    * CAMEL-17792: Add doc about the message headers of camel-git
    * CAMEL-17792: Add doc about the message headers of camel-github
    * CAMEL-17792: Add doc about the message headers of camel-google-bigquery
    * CAMEL-17792: Add doc about the message headers of camel-google-calendar
    * CAMEL-17792: Add doc about the message headers of camel-google-functions
    * CAMEL-17792: Add doc about the message headers of camel-google-mail
    * CAMEL-17792: Add doc about the message headers of camel-google-pubsub
    * CAMEL-17792: Add doc about the message headers of 
camel-google-secret-manager
    * CAMEL-17792: Add doc about the message headers of camel-google-sheets
    * CAMEL-17792: Add doc about the message headers of camel-google-storage
    * CAMEL-17792: Add doc about the message headers of camel-grape
    * CAMEL-17792: Add doc about the message headers of camel-grpc
---
 .../apache/camel/component/ganglia/ganglia.json    |  9 +++
 .../src/main/docs/ganglia-component.adoc           |  3 +
 .../camel/component/ganglia/GangliaConstants.java  | 18 ++++++
 .../camel/component/ganglia/GangliaEndpoint.java   |  2 +-
 .../apache/camel/component/geocoder/geocoder.json  | 13 ++++
 .../src/main/docs/geocoder-component.adoc          | 32 +---------
 .../component/geocoder/GeoCoderConstants.java      | 15 +++++
 .../camel/component/geocoder/GeoCoderEndpoint.java |  2 +-
 .../org/apache/camel/component/git/git.json        | 14 +++++
 .../camel-git/src/main/docs/git-component.adoc     | 25 +-------
 .../apache/camel/component/git/GitConstants.java   | 15 +++++
 .../apache/camel/component/git/GitEndpoint.java    |  3 +-
 .../org/apache/camel/component/github/github.json  | 11 ++++
 .../src/main/docs/github-component.adoc            |  4 ++
 .../camel/component/github/GitHubConstants.java    | 21 ++++---
 .../camel/component/github/GitHubEndpoint.java     |  2 +-
 .../component/google/bigquery/google-bigquery.json |  6 ++
 .../google/bigquery/sql/google-bigquery-sql.json   |  4 ++
 .../src/main/docs/google-bigquery-component.adoc   | 15 +----
 .../main/docs/google-bigquery-sql-component.adoc   | 20 +------
 .../google/bigquery/GoogleBigQueryConstants.java   | 16 +++++
 .../google/bigquery/GoogleBigQueryEndpoint.java    |  6 +-
 .../bigquery/sql/GoogleBigQuerySQLEndpoint.java    |  8 ++-
 .../calendar/stream/google-calendar-stream.json    |  3 +
 .../docs/google-calendar-stream-component.adoc     |  4 +-
 .../stream/GoogleCalendarStreamConstants.java      |  3 +
 .../stream/GoogleCalendarStreamEndpoint.java       |  2 +-
 .../google/functions/google-functions.json         |  7 +++
 .../src/main/docs/google-functions-component.adoc  | 22 +------
 .../functions/GoogleCloudFunctionsConstants.java   | 15 +++++
 .../functions/GoogleCloudFunctionsEndpoint.java    |  2 +-
 .../google/mail/stream/google-mail-stream.json     |  8 +++
 .../main/docs/google-mail-stream-component.adoc    |  4 +-
 .../mail/stream/GoogleMailStreamConstants.java     |  8 +++
 .../mail/stream/GoogleMailStreamEndpoint.java      |  2 +-
 .../component/google/pubsub/google-pubsub.json     |  7 +++
 .../src/main/docs/google-pubsub-component.adoc     | 11 +---
 .../google/pubsub/GooglePubsubConstants.java       | 11 ++++
 .../google/pubsub/GooglePubsubEndpoint.java        |  3 +-
 .../secret/manager/google-secret-manager.json      |  5 ++
 .../main/docs/google-secret-manager-component.adoc |  3 +
 .../manager/GoogleSecretManagerConstants.java      |  6 ++
 .../manager/GoogleSecretManagerEndpoint.java       |  2 +-
 .../google/sheets/stream/google-sheets-stream.json |  8 +++
 .../main/docs/google-sheets-stream-component.adoc  |  3 +
 .../sheets/stream/GoogleSheetsStreamConstants.java |  9 +++
 .../sheets/stream/GoogleSheetsStreamEndpoint.java  |  2 +-
 .../component/google/storage/google-storage.json   | 28 +++++++++
 .../src/main/docs/google-storage-component.adoc    | 70 +---------------------
 .../storage/GoogleCloudStorageConstants.java       | 49 +++++++++++++++
 .../google/storage/GoogleCloudStorageConsumer.java |  2 +-
 .../google/storage/GoogleCloudStorageEndpoint.java |  2 +-
 .../org/apache/camel/component/grape/grape.json    |  3 +
 .../camel-grape/src/main/docs/grape-component.adoc | 15 +----
 .../camel/component/grape/GrapeConstants.java      |  4 ++
 .../camel/component/grape/GrapeEndpoint.java       |  2 +-
 components/camel-grpc/pom.xml                      | 13 ++++
 .../org/apache/camel/component/grpc/grpc.json      |  5 ++
 .../camel-grpc/src/main/docs/grpc-component.adoc   | 16 +----
 .../apache/camel/component/grpc/GrpcConstants.java | 11 ++++
 .../apache/camel/component/grpc/GrpcEndpoint.java  |  2 +-
 61 files changed, 408 insertions(+), 228 deletions(-)

diff --git 
a/components/camel-ganglia/src/generated/resources/org/apache/camel/component/ganglia/ganglia.json
 
b/components/camel-ganglia/src/generated/resources/org/apache/camel/component/ganglia/ganglia.json
index 3d0fe6f..0a913d0 100644
--- 
a/components/camel-ganglia/src/generated/resources/org/apache/camel/component/ganglia/ganglia.json
+++ 
b/components/camel-ganglia/src/generated/resources/org/apache/camel/component/ganglia/ganglia.json
@@ -38,6 +38,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 [...]
     "configuration": { "kind": "property", "displayName": "Configuration", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.component.ganglia.GangliaConfiguration", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use the shared configuration" }
   },
+  "headers": {
+    "CamelGangliaGroupName": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The group that the metric belongs to." },
+    "CamelGangliaMetricName": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The name to use for the metric." },
+    "CamelGangliaMetricType": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": 
"info.ganglia.gmetric4j.gmetric.GMetricType", "enum": [ "STRING", "INT8", 
"UINT8", "INT16", "UINT16", "INT32", "UINT32", "FLOAT", "DOUBLE" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The type of value" },
+    "CamelGangliaMetricSlope": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": 
"info.ganglia.gmetric4j.gmetric.GMetricSlope", "enum": [ "ZERO", "POSITIVE", 
"NEGATIVE", "BOTH" ], "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The slope" },
+    "CamelGangliaMetricUnits": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "Any unit of measurement that qualifies the metric, e.g. 
widgets, litres, bytes. Do not include a prefix such as k\n (kilo) or m 
(milli), other tools may scale the units later. The value should be unscaled." 
},
+    "CamelGangliaMetricTmax": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Maximum time in seconds that the value can be considered 
current. After this, Ganglia considers the value to have\n expired." },
+    "CamelGangliaMetricDmax": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Minumum time in seconds before Ganglia will purge the 
metric value if it expires. Set to 0 and the value will\n remain in Ganglia 
indefinitely until a gmond agent restart." }
+  },
   "properties": {
     "host": { "kind": "path", "displayName": "Host", "group": "producer", 
"label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "239.2.11.71", "configurationClass": 
"org.apache.camel.component.ganglia.GangliaConfiguration", 
"configurationField": "configuration", "description": "Host name for Ganglia 
server" },
     "port": { "kind": "path", "displayName": "Port", "group": "producer", 
"label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 8649, 
"configurationClass": 
"org.apache.camel.component.ganglia.GangliaConfiguration", 
"configurationField": "configuration", "description": "Port for Ganglia server" 
},
diff --git a/components/camel-ganglia/src/main/docs/ganglia-component.adoc 
b/components/camel-ganglia/src/main/docs/ganglia-component.adoc
index ab03d0f..79aec4b 100644
--- a/components/camel-ganglia/src/main/docs/ganglia-component.adoc
+++ b/components/camel-ganglia/src/main/docs/ganglia-component.adoc
@@ -49,6 +49,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Message body
 
diff --git 
a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConstants.java
 
b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConstants.java
index f7a2e0f..e12599a 100644
--- 
a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConstants.java
+++ 
b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaConstants.java
@@ -16,14 +16,32 @@
  */
 package org.apache.camel.component.ganglia;
 
+import org.apache.camel.spi.Metadata;
+
 public final class GangliaConstants {
 
+    @Metadata(description = "The group that the metric belongs to.", javaType 
= "String")
     public static final String GROUP_NAME = "CamelGangliaGroupName";
+    @Metadata(description = "The name to use for the metric.", javaType = 
"String")
     public static final String METRIC_NAME = "CamelGangliaMetricName";
+    @Metadata(description = "The type of value", javaType = 
"info.ganglia.gmetric4j.gmetric.GMetricType")
     public static final String METRIC_TYPE = "CamelGangliaMetricType";
+    @Metadata(description = "The slope", javaType = 
"info.ganglia.gmetric4j.gmetric.GMetricSlope")
     public static final String METRIC_SLOPE = "CamelGangliaMetricSlope";
+    @Metadata(description = "Any unit of measurement that qualifies the 
metric, e.g. widgets, litres, bytes. Do not include a prefix such as k\n"
+                            +
+                            " (kilo) or m (milli), other tools may scale the 
units later. The value should be unscaled.",
+              javaType = "String")
     public static final String METRIC_UNITS = "CamelGangliaMetricUnits";
+    @Metadata(description = "Maximum time in seconds that the value can be 
considered current. After this, Ganglia considers the value to have\n"
+                            +
+                            " expired.",
+              javaType = "Integer")
     public static final String METRIC_TMAX = "CamelGangliaMetricTmax";
+    @Metadata(description = "Minumum time in seconds before Ganglia will purge 
the metric value if it expires. Set to 0 and the value will\n"
+                            +
+                            " remain in Ganglia indefinitely until a gmond 
agent restart.",
+              javaType = "Integer")
     public static final String METRIC_DMAX = "CamelGangliaMetricDmax";
 
     private GangliaConstants() {
diff --git 
a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaEndpoint.java
 
b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaEndpoint.java
index 0aa9e6a..353ad8d 100644
--- 
a/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaEndpoint.java
+++ 
b/components/camel-ganglia/src/main/java/org/apache/camel/component/ganglia/GangliaEndpoint.java
@@ -33,7 +33,7 @@ import org.apache.camel.util.ObjectHelper;
  * Send metrics to Ganglia monitoring system.
  */
 @UriEndpoint(firstVersion = "2.15.0", scheme = "ganglia", title = "Ganglia", 
syntax = "ganglia:host:port", producerOnly = true,
-             category = { Category.MONITORING })
+             category = { Category.MONITORING }, headersClass = 
GangliaConstants.class)
 public class GangliaEndpoint extends DefaultEndpoint {
 
     private Publisher publisher;
diff --git 
a/components/camel-geocoder/src/generated/resources/org/apache/camel/component/geocoder/geocoder.json
 
b/components/camel-geocoder/src/generated/resources/org/apache/camel/component/geocoder/geocoder.json
index e434c7e..8df7d78 100644
--- 
a/components/camel-geocoder/src/generated/resources/org/apache/camel/component/geocoder/geocoder.json
+++ 
b/components/camel-geocoder/src/generated/resources/org/apache/camel/component/geocoder/geocoder.json
@@ -26,6 +26,19 @@
     "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 [...]
     "geoApiContext": { "kind": "property", "displayName": "Geo Api Context", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "com.google.maps.GeoApiContext", "deprecated": false, "autowired": 
false, "secret": false, "description": "Configuration for Google maps API" }
   },
+  "headers": {
+    "CamelGeoCoderAddress": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The formatted address" },
+    "CamelGeoCoderLatlng": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The latitude and longitude of the location. Separated by 
comma." },
+    "CamelGeoCoderLat": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The latitude of the location." },
+    "CamelGeoCoderLng": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The longitude of the location." },
+    "CamelGeoCoderStatus": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": true, "javaType": 
"org.apache.camel.component.geocoder.GeocoderStatus", "enum": [ "ERROR", 
"INVALID_REQUEST", "ACCESS_NOT_CONFIGURED", "OK", "OVER_QUERY_LIMIT", 
"OVER_DAILY_LIMIT", "REQUEST_DENIED", "UNKNOWN_ERROR", "ZERO_RESULTS" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Status code from the geocoder library. If status  [...]
+    "CamelGeoCoderRegionCode": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The region code." },
+    "CamelGeoCoderRegionName": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The region name." },
+    "CamelGeoCoderCity": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The city long name." },
+    "CamelGeoCoderCountryLong": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The country long name." },
+    "CamelGeoCoderCountryShort": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The country short name." },
+    "CamelGeoCoderPostalCode": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The postal code." }
+  },
   "properties": {
     "address": { "kind": "path", "displayName": "Address", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "The geo address which should be prefixed with address:" },
     "latlng": { "kind": "path", "displayName": "Latlng", "group": "producer", 
"label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "The geo latitude and longitude which should be prefixed with 
latlng:" },
diff --git a/components/camel-geocoder/src/main/docs/geocoder-component.adoc 
b/components/camel-geocoder/src/main/docs/geocoder-component.adoc
index 6b315d9..a8c9924 100644
--- a/components/camel-geocoder/src/main/docs/geocoder-component.adoc
+++ b/components/camel-geocoder/src/main/docs/geocoder-component.adoc
@@ -55,35 +55,9 @@ include::partial$component-endpoint-options.adoc[]
 
 == Exchange data format
 
-== Message Headers
-
-[width="100%",cols="50%,50%",options="header",]
-|=======================================================================
-|Header |Description
-
-|`CamelGeoCoderStatus` |Mandatory. Status code from the geocoder library. If 
status is
-`GeocoderStatus.OK` then additional headers is enriched
-
-|`CamelGeoCoderAddress` |The formatted address
-
-|`CamelGeoCoderLat` |The latitude of the location.
-
-|`CamelGeoCoderLng` |The longitude of the location.
-
-|`CamelGeoCoderLatlng` |The latitude and longitude of the location. Separated 
by comma.
-
-|`CamelGeoCoderCity` |The city long name.
-
-|`CamelGeoCoderRegionCode` |The region code.
-
-|`CamelGeoCoderRegionName` |The region name.
-
-|`CamelGeoCoderCountryLong` |The country long name.
-
-|`CamelGeoCoderCountryShort` |The country short name.
-
-|`CamelGeoCoderPostalCode` |The postal code.
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 Notice not all headers may be provided depending on available data and
 mode in use (address vs latlng).
diff --git 
a/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderConstants.java
 
b/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderConstants.java
index 21fb4cb..24c93fb 100644
--- 
a/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderConstants.java
+++ 
b/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderConstants.java
@@ -16,18 +16,33 @@
  */
 package org.apache.camel.component.geocoder;
 
+import org.apache.camel.spi.Metadata;
+
 public final class GeoCoderConstants {
 
+    @Metadata(description = "The formatted address", javaType = "String")
     public static final String ADDRESS = "CamelGeoCoderAddress";
+    @Metadata(description = "The latitude and longitude of the location. 
Separated by comma.", javaType = "String")
     public static final String LATLNG = "CamelGeoCoderLatlng";
+    @Metadata(description = "The latitude of the location.", javaType = 
"String")
     public static final String LAT = "CamelGeoCoderLat";
+    @Metadata(description = "The longitude of the location.", javaType = 
"String")
     public static final String LNG = "CamelGeoCoderLng";
+    @Metadata(description = "Status code from the geocoder library. If status 
is\n" +
+                            "`GeocoderStatus.OK` then additional headers is 
enriched",
+              javaType = "org.apache.camel.component.geocoder.GeocoderStatus", 
required = true)
     public static final String STATUS = "CamelGeoCoderStatus";
+    @Metadata(description = "The region code.", javaType = "String")
     public static final String REGION_CODE = "CamelGeoCoderRegionCode";
+    @Metadata(description = "The region name.", javaType = "String")
     public static final String REGION_NAME = "CamelGeoCoderRegionName";
+    @Metadata(description = "The city long name.", javaType = "String")
     public static final String CITY = "CamelGeoCoderCity";
+    @Metadata(description = "The country long name.", javaType = "String")
     public static final String COUNTRY_LONG = "CamelGeoCoderCountryLong";
+    @Metadata(description = "The country short name.", javaType = "String")
     public static final String COUNTRY_SHORT = "CamelGeoCoderCountryShort";
+    @Metadata(description = "The postal code.", javaType = "String")
     public static final String POSTAL_CODE = "CamelGeoCoderPostalCode";
 
     private GeoCoderConstants() {
diff --git 
a/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderEndpoint.java
 
b/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderEndpoint.java
index 97c7f8a..f4b07a8 100644
--- 
a/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderEndpoint.java
+++ 
b/components/camel-geocoder/src/main/java/org/apache/camel/component/geocoder/GeoCoderEndpoint.java
@@ -34,7 +34,7 @@ import org.apache.camel.support.DefaultEndpoint;
  * Find geocodes (latitude and longitude) for a given address or the other way 
round.
  */
 @UriEndpoint(firstVersion = "2.12.0", scheme = "geocoder", title = "Geocoder", 
syntax = "geocoder:address:latlng",
-             producerOnly = true, category = { Category.API, Category.LOCATION 
})
+             producerOnly = true, category = { Category.API, Category.LOCATION 
}, headersClass = GeoCoderConstants.class)
 public class GeoCoderEndpoint extends DefaultEndpoint {
 
     @UriPath
diff --git 
a/components/camel-git/src/generated/resources/org/apache/camel/component/git/git.json
 
b/components/camel-git/src/generated/resources/org/apache/camel/component/git/git.json
index a1c4ad9..db79f1a 100644
--- 
a/components/camel-git/src/generated/resources/org/apache/camel/component/git/git.json
+++ 
b/components/camel-git/src/generated/resources/org/apache/camel/component/git/git.json
@@ -26,6 +26,20 @@
     "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": {
+    "CamelGitOperation": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The operation to do on a repository, if not specified as 
endpoint option" },
+    "CamelGitFilename": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The file name in an add operation" },
+    "CamelGitCommitMessage": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit message related in a commit operation" },
+    "CamelGitCommitUsername": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit username in a commit operation" },
+    "CamelGitCommitEmail": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit email in a commit operation" },
+    "CamelGitCommitId": { "kind": "header", "displayName": "", "group": 
"common", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The commit id" },
+    "CamelGitAllowEmpty": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "Boolean", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The flag to manage empty git commits" },
+    "CamelGitAuthorName": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The author name" },
+    "CamelGitCommiterName": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The committer name" },
+    "CamelGitCommitTime": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit time" },
+    "CamelGitBranchLeaf": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The leaf" },
+    "CamelGitBranchObjectId": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The object id" }
+  },
   "properties": {
     "localPath": { "kind": "path", "displayName": "Local Path", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Local repository path" },
     "branchName": { "kind": "parameter", "displayName": "Branch Name", 
"group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The branch name to work on" },
diff --git a/components/camel-git/src/main/docs/git-component.adoc 
b/components/camel-git/src/main/docs/git-component.adoc
index 51a377f..0080cad 100644
--- a/components/camel-git/src/main/docs/git-component.adoc
+++ b/components/camel-git/src/main/docs/git-component.adoc
@@ -51,28 +51,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Message Headers
-
-[width="100%",cols="10%,10%,10%,20%,50%",options="header",]
-|=======================================================================
-|Name |Default Value |Type |Context |Description
-
-|CamelGitOperation |`null` |String |Producer |The operation to do on a 
repository, if not specified as endpoint option
-
-|CamelGitFilename |`null` |String |Producer |The file name in an add operation
-
-|CamelGitCommitMessage |`null` |String |Producer |The commit message related 
in a commit operation
-
-|CamelGitCommitUsername |`null` |String |Producer |The commit username in a 
commit operation
-
-|CamelGitCommitEmail |`null` |String |Producer |The commit email in a commit 
operation
-
-|CamelGitCommitId |`null` |String |Producer |The commit id
-
-|CamelGitAllowEmpty |`null` |Boolean |Producer |The flag to manage empty git 
commits
-
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Producer Example
 
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitConstants.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitConstants.java
index 7894c9c..4905bd0 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitConstants.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitConstants.java
@@ -16,18 +16,33 @@
  */
 package org.apache.camel.component.git;
 
+import org.apache.camel.spi.Metadata;
+
 public interface GitConstants {
+    @Metadata(label = "producer", description = "The operation to do on a 
repository, if not specified as endpoint option",
+              javaType = "String")
     String GIT_OPERATION = "CamelGitOperation";
+    @Metadata(label = "producer", description = "The file name in an add 
operation", javaType = "String")
     String GIT_FILE_NAME = "CamelGitFilename";
+    @Metadata(label = "producer", description = "The commit message related in 
a commit operation", javaType = "String")
     String GIT_COMMIT_MESSAGE = "CamelGitCommitMessage";
+    @Metadata(label = "producer", description = "The commit username in a 
commit operation", javaType = "String")
     String GIT_COMMIT_USERNAME = "CamelGitCommitUsername";
+    @Metadata(label = "producer", description = "The commit email in a commit 
operation", javaType = "String")
     String GIT_COMMIT_EMAIL = "CamelGitCommitEmail";
+    @Metadata(description = "The commit id", javaType = "String")
     String GIT_COMMIT_ID = "CamelGitCommitId";
+    @Metadata(label = "producer", description = "The flag to manage empty git 
commits", javaType = "Boolean")
     String GIT_ALLOW_EMPTY = "CamelGitAllowEmpty";
+    @Metadata(label = "consumer", description = "The author name", javaType = 
"String")
     String GIT_COMMIT_AUTHOR_NAME = "CamelGitAuthorName";
+    @Metadata(label = "consumer", description = "The committer name", javaType 
= "String")
     String GIT_COMMIT_COMMITTER_NAME = "CamelGitCommiterName";
+    @Metadata(label = "consumer", description = "The commit time", javaType = 
"int")
     String GIT_COMMIT_TIME = "CamelGitCommitTime";
+    @Metadata(label = "consumer", description = "The leaf", javaType = 
"String")
     String GIT_BRANCH_LEAF = "CamelGitBranchLeaf";
+    @Metadata(label = "consumer", description = "The object id", javaType = 
"String")
     String GIT_BRANCH_OBJECT_ID = "CamelGitBranchObjectId";
     String GIT_TAG_LEAF = "CamelGitTagLeaf";
     String GIT_TAG_OBJECT_ID = "CamelGitTagObjectId";
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
index 6fc0643..bccd4ce 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
@@ -34,7 +34,8 @@ import org.apache.camel.support.DefaultEndpoint;
 /**
  * Perform operations on git repositories.
  */
-@UriEndpoint(firstVersion = "2.16.0", scheme = "git", title = "Git", syntax = 
"git:localPath", category = { Category.FILE })
+@UriEndpoint(firstVersion = "2.16.0", scheme = "git", title = "Git", syntax = 
"git:localPath", category = { Category.FILE },
+             headersClass = GitConstants.class)
 public class GitEndpoint extends DefaultEndpoint {
 
     @UriPath
diff --git 
a/components/camel-github/src/generated/resources/org/apache/camel/component/github/github.json
 
b/components/camel-github/src/generated/resources/org/apache/camel/component/github/github.json
index 813114a..84737ae 100644
--- 
a/components/camel-github/src/generated/resources/org/apache/camel/component/github/github.json
+++ 
b/components/camel-github/src/generated/resources/org/apache/camel/component/github/github.json
@@ -27,6 +27,17 @@
     "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 [...]
     "oauthToken": { "kind": "property", "displayName": "Oauth Token", "group": 
"security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "description": "GitHub OAuth token. Must be configured on 
either component or endpoint." }
   },
+  "headers": {
+    "GitHubPullRequest": { "kind": "header", "displayName": "", "group": 
"common", "label": "", "required": false, "javaType": "PullRequest or Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The pull request" },
+    "GitHubInResponseTo": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "Integer", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The id of the comment to reply to" },
+    "GitHubPullRequestHeadCommitSHA": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The sha of the head of the pull request" },
+    "GitHubIssueTitle": { "kind": "header", "displayName": "", "group": 
"producer", "label": "producer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The title of the issue" },
+    "CamelGitHubCommitAuthor": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit author" },
+    "CamelGitHubCommitCommitter": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The committer name" },
+    "CamelGitHubCommitSha": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit sha" },
+    "CamelGitHubCommitUrl": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The commit URL" },
+    "CamelGitHubEventPayload": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": 
"org.eclipse.egit.github.core.event.EventPayload", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
event payload" }
+  },
   "properties": {
     "type": { "kind": "path", "displayName": "Type", "group": "common", 
"label": "", "required": true, "type": "object", "javaType": 
"org.apache.camel.component.github.GitHubType", "enum": [ "CLOSEPULLREQUEST", 
"PULLREQUESTCOMMENT", "COMMIT", "PULLREQUEST", "TAG", "PULLREQUESTSTATE", 
"PULLREQUESTFILES", "GETCOMMITFILE", "CREATEISSUE", "EVENT" ], "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "What git operation to execute" },
     "branchName": { "kind": "path", "displayName": "Branch Name", "group": 
"consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Name of branch" },
diff --git a/components/camel-github/src/main/docs/github-component.adoc 
b/components/camel-github/src/main/docs/github-component.adoc
index 71d0eb3..6782cf9 100644
--- a/components/camel-github/src/main/docs/github-component.adoc
+++ b/components/camel-github/src/main/docs/github-component.adoc
@@ -63,6 +63,10 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
+
 == Configuring authentication
 
 The github component requires to be configured with an authentication token on 
either the component or endpoint level.
diff --git 
a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubConstants.java
 
b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubConstants.java
index 3b01c29..42a90b4 100644
--- 
a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubConstants.java
+++ 
b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubConstants.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.github;
 
+import org.apache.camel.spi.Metadata;
+
 public interface GitHubConstants {
 
     String GITHUB_REPOSITORY_SERVICE = "githubRepositoryService";
@@ -27,24 +29,25 @@ public interface GitHubConstants {
     String GITHUB_PULL_REQUEST_SERVICE = "githubPullRequestService";
 
     String GITHUB_ISSUE_SERVICE = "githbIssueService";
-
+    @Metadata(description = "The pull request", javaType = "PullRequest or 
Integer")
     String GITHUB_PULLREQUEST = "GitHubPullRequest";
-
+    @Metadata(label = "producer", description = "The id of the comment to 
reply to", javaType = "Integer")
     String GITHUB_INRESPONSETO = "GitHubInResponseTo";
-
+    @Metadata(description = "The sha of the head of the pull request", 
javaType = "String")
     String GITHUB_PULLREQUEST_HEAD_COMMIT_SHA = 
"GitHubPullRequestHeadCommitSHA";
-
+    @Metadata(label = "producer", description = "The title of the issue", 
javaType = "String")
     String GITHUB_ISSUE_TITLE = "GitHubIssueTitle";
 
     String GITHUB_EVENT_SERVICE = "GitHubEventService";
-
+    @Metadata(label = "consumer", description = "The commit author", javaType 
= "String")
     String GITHUB_COMMIT_AUTHOR = "CamelGitHubCommitAuthor";
-
+    @Metadata(label = "consumer", description = "The committer name", javaType 
= "String")
     String GITHUB_COMMIT_COMMITTER = "CamelGitHubCommitCommitter";
-
+    @Metadata(label = "consumer", description = "The commit sha", javaType = 
"String")
     String GITHUB_COMMIT_SHA = "CamelGitHubCommitSha";
-
+    @Metadata(label = "consumer", description = "The commit URL", javaType = 
"String")
     String GITHUB_COMMIT_URL = "CamelGitHubCommitUrl";
-
+    @Metadata(label = "consumer", description = "The event payload",
+              javaType = "org.eclipse.egit.github.core.event.EventPayload")
     String GITHUB_EVENT_PAYLOAD = "CamelGitHubEventPayload";
 }
diff --git 
a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
 
b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
index ad2465a..25434b4 100644
--- 
a/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
+++ 
b/components/camel-github/src/main/java/org/apache/camel/component/github/GitHubEndpoint.java
@@ -61,7 +61,7 @@ import org.apache.camel.util.StringHelper;
  * publicly accessible where a webhook would fail
  */
 @UriEndpoint(firstVersion = "2.15.0", scheme = "github", title = "GitHub", 
syntax = "github:type/branchName",
-             category = { Category.FILE, Category.CLOUD, Category.API })
+             category = { Category.FILE, Category.CLOUD, Category.API }, 
headersClass = GitHubConstants.class)
 public class GitHubEndpoint extends ScheduledPollEndpoint {
 
     @UriPath
diff --git 
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
 
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
index 7330c02..d0871ea 100644
--- 
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
+++ 
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/google-bigquery.json
@@ -28,6 +28,12 @@
     "projectId": { "kind": "property", "displayName": "Project Id", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Google Cloud Project Id" },
     "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": {
+    "CamelGoogleBigQueryTableSuffix": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Table suffix to use when inserting data" },
+    "CamelGoogleBigQueryTableId": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Table id where data will be submitted. If specified will 
override endpoint configuration" },
+    "CamelGoogleBigQueryInsertId": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "InsertId to use when inserting data" },
+    "CamelGoogleBigQueryPartitionDecorator": { "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Partition decorator to indicate 
partition to use when inserting data" }
+  },
   "properties": {
     "projectId": { "kind": "path", "displayName": "Project Id", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", 
"configurationField": "configuration", "description": "Google Cloud Project Id" 
},
     "datasetId": { "kind": "path", "displayName": "Dataset Id", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", 
"configurationField": "configuration", "description": "BigQuery Dataset Id" },
diff --git 
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
 
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
index 8080d33..add1666 100644
--- 
a/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
+++ 
b/components/camel-google/camel-google-bigquery/src/generated/resources/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
@@ -27,6 +27,10 @@
     "projectId": { "kind": "property", "displayName": "Project Id", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Google Cloud Project Id" },
     "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": {
+    "CamelGoogleBigQueryTranslatedQuery": { "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Preprocessed query text" },
+    "CamelGoogleBigQueryJobId": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": 
"com.google.cloud.bigquery.JobId", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "A custom `JobId` to use" }
+  },
   "properties": {
     "projectId": { "kind": "path", "displayName": "Project Id", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
 "configurationField": "configuration", "description": "Google Cloud Project 
Id" },
     "queryString": { "kind": "path", "displayName": "Query String", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
 "configurationField": "configuration", "description": "BigQuery standard SQL 
query" },
diff --git 
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
 
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
index e4e2fb4..edb5100 100644
--- 
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
+++ 
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-component.adoc
@@ -69,18 +69,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Message Headers
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Name |Type |Description
-|`CamelGoogleBigQueryTableSuffix` |`String` |Table suffix to use when 
inserting data
-|`CamelGoogleBigQueryInsertId` |`String` |InsertId to use when inserting data
-|`CamelGoogleBigQueryPartitionDecorator` |`String` |Partition decorator to 
indicate partition to use when inserting data
-|`CamelGoogleBigQueryTableId` |`String` |Table id where data will be 
submitted. If specified will override endpoint configuration
-|=======================================================================
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Producer Endpoints
 
diff --git 
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
 
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
index 861bc10..9ddd143 100644
--- 
a/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
+++ 
b/components/camel-google/camel-google-bigquery/src/main/docs/google-bigquery-sql-component.adoc
@@ -86,23 +86,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
-
-== Message Headers
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Name |Type |Description
-|`CamelGoogleBigQueryJobId` |`JobId` |A custom `JobId` to use
-|=======================================================================
-
-== Output Message Headers
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Name |Type |Description
-|`CamelGoogleBigQueryTranslatedQuery` |`String` | Preprocessed query text
-|=======================================================================
-
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Producer Endpoints
 
diff --git 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
index dc33212..6acba6b 100644
--- 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
+++ 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConstants.java
@@ -16,12 +16,28 @@
  */
 package org.apache.camel.component.google.bigquery;
 
+import org.apache.camel.spi.Metadata;
+
 public final class GoogleBigQueryConstants {
+
+    // All the schemes
+    public static final String SCHEME_BIGQUERY_SQL = "google-bigquery-sql";
+    public static final String SCHEME_BIGQUERY = "google-bigquery";
+
+    @Metadata(description = "Table suffix to use when inserting data", 
javaType = "String", applicableFor = SCHEME_BIGQUERY)
     public static final String TABLE_SUFFIX = "CamelGoogleBigQueryTableSuffix";
+    @Metadata(description = "Table id where data will be submitted. If 
specified will override endpoint configuration",
+              javaType = "String", applicableFor = SCHEME_BIGQUERY)
     public static final String TABLE_ID = "CamelGoogleBigQueryTableId";
+    @Metadata(description = "InsertId to use when inserting data", javaType = 
"String", applicableFor = SCHEME_BIGQUERY)
     public static final String INSERT_ID = "CamelGoogleBigQueryInsertId";
+    @Metadata(description = "Partition decorator to indicate partition to use 
when inserting data", javaType = "String",
+              applicableFor = SCHEME_BIGQUERY)
     public static final String PARTITION_DECORATOR = 
"CamelGoogleBigQueryPartitionDecorator";
+    @Metadata(description = "Preprocessed query text", javaType = "String", 
applicableFor = SCHEME_BIGQUERY_SQL)
     public static final String TRANSLATED_QUERY = 
"CamelGoogleBigQueryTranslatedQuery";
+    @Metadata(description = "A custom `JobId` to use", javaType = 
"com.google.cloud.bigquery.JobId",
+              applicableFor = SCHEME_BIGQUERY_SQL)
     public static final String JOB_ID = "CamelGoogleBigQueryJobId";
 
     /**
diff --git 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
index 6f527d9..e7033b3 100644
--- 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
+++ 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryEndpoint.java
@@ -25,6 +25,8 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
 
+import static 
org.apache.camel.component.google.bigquery.GoogleBigQueryConstants.SCHEME_BIGQUERY;
+
 /**
  * Google BigQuery data warehouse for analytics.
  *
@@ -37,9 +39,9 @@ import org.apache.camel.support.DefaultEndpoint;
  * Another consideration is that exceptions are not handled within the class. 
They are expected to bubble up and be
  * handled by Camel.
  */
-@UriEndpoint(firstVersion = "2.20.0", scheme = "google-bigquery", title = 
"Google BigQuery",
+@UriEndpoint(firstVersion = "2.20.0", scheme = SCHEME_BIGQUERY, title = 
"Google BigQuery",
              syntax = "google-bigquery:projectId:datasetId:tableId",
-             category = { Category.CLOUD, Category.BIGDATA }, producerOnly = 
true)
+             category = { Category.CLOUD, Category.BIGDATA }, producerOnly = 
true, headersClass = GoogleBigQueryConstants.class)
 public class GoogleBigQueryEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
index 5549a3c..35da8fc 100644
--- 
a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
+++ 
b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/sql/GoogleBigQuerySQLEndpoint.java
@@ -20,10 +20,13 @@ import com.google.cloud.bigquery.BigQuery;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.component.google.bigquery.GoogleBigQueryConstants;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
 
+import static 
org.apache.camel.component.google.bigquery.GoogleBigQueryConstants.SCHEME_BIGQUERY_SQL;
+
 /**
  * Access Google Cloud BigQuery service using SQL queries.
  *
@@ -36,8 +39,9 @@ import org.apache.camel.support.DefaultEndpoint;
  * Another consideration is that exceptions are not handled within the class. 
They are expected to bubble up and be
  * handled by Camel.
  */
-@UriEndpoint(firstVersion = "2.23.0", scheme = "google-bigquery-sql", title = 
"Google BigQuery Standard SQL",
-             syntax = "google-bigquery-sql:projectId:queryString", label = 
"cloud,messaging", producerOnly = true)
+@UriEndpoint(firstVersion = "2.23.0", scheme = SCHEME_BIGQUERY_SQL, title = 
"Google BigQuery Standard SQL",
+             syntax = "google-bigquery-sql:projectId:queryString", label = 
"cloud,messaging", producerOnly = true,
+             headersClass = GoogleBigQueryConstants.class)
 public class GoogleBigQuerySQLEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-calendar/src/generated/resources/org/apache/camel/component/google/calendar/stream/google-calendar-stream.json
 
b/components/camel-google/camel-google-calendar/src/generated/resources/org/apache/camel/component/google/calendar/stream/google-calendar-stream.json
index 75a6684..1923176 100644
--- 
a/components/camel-google/camel-google-calendar/src/generated/resources/org/apache/camel/component/google/calendar/stream/google-calendar-stream.json
+++ 
b/components/camel-google/camel-google-calendar/src/generated/resources/org/apache/camel/component/google/calendar/stream/google-calendar-stream.json
@@ -44,6 +44,9 @@
     "refreshToken": { "kind": "property", "displayName": "Refresh Token", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamConfiguration",
 "configurationField": "configuration", "description": "OAuth 2 refresh token. 
Using this, the Google Calendar component can obtain a new acce [...]
     "user": { "kind": "property", "displayName": "User", "group": "security", 
"label": "security", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": true, 
"configurationClass": 
"org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamConfiguration",
 "configurationField": "configuration", "description": "The email address of 
the user the application is trying to impersonate in the service account flow." 
}
   },
+  "headers": {
+    "CamelGoogleCalendarEventId": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The calendar event id" }
+  },
   "properties": {
     "index": { "kind": "path", "displayName": "Index", "group": "consumer", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamConfiguration",
 "configurationField": "configuration", "description": "Specifies an index for 
the endpoint" },
     "applicationName": { "kind": "parameter", "displayName": "Application 
Name", "group": "consumer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamConfiguration",
 "configurationField": "configuration", "description": "Google Calendar 
application name. Example would be camel-google-calendar\/1.0" },
diff --git 
a/components/camel-google/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
 
b/components/camel-google/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
index 1cfa550..ca267e8 100644
--- 
a/components/camel-google/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
+++ 
b/components/camel-google/camel-google-calendar/src/main/docs/google-calendar-stream-component.adoc
@@ -69,7 +69,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
 
 
 include::spring-boot:partial$starter.adoc[]
diff --git 
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
 
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
index 4d2a279..cb5e5c7 100644
--- 
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
+++ 
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamConstants.java
@@ -16,11 +16,14 @@
  */
 package org.apache.camel.component.google.calendar.stream;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel Google Calendar Stream
  */
 public final class GoogleCalendarStreamConstants {
 
+    @Metadata(description = "The calendar event id", javaType = "String")
     public static final String EVENT_ID = "CamelGoogleCalendarEventId";
 
     /**
diff --git 
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
 
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
index 69c3179..87d23f0 100644
--- 
a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
+++ 
b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/stream/GoogleCalendarStreamEndpoint.java
@@ -38,7 +38,7 @@ import org.apache.camel.util.ObjectHelper;
              title = "Google Calendar Stream",
              syntax = "google-calendar-stream:index",
              consumerOnly = true,
-             category = { Category.CLOUD })
+             category = { Category.CLOUD }, headersClass = 
GoogleCalendarStreamConstants.class)
 public class GoogleCalendarStreamEndpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-functions/src/generated/resources/org/apache/camel/component/google/functions/google-functions.json
 
b/components/camel-google/camel-google-functions/src/generated/resources/org/apache/camel/component/google/functions/google-functions.json
index 9e81621..f38dc9a 100644
--- 
a/components/camel-google/camel-google-functions/src/generated/resources/org/apache/camel/component/google/functions/google-functions.json
+++ 
b/components/camel-google/camel-google-functions/src/generated/resources/org/apache/camel/component/google/functions/google-functions.json
@@ -25,6 +25,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": {
+    "GoogleCloudFunctionsOperation": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsOperations", 
"enum": [ "listFunctions", "getFunction", "callFunction", 
"generateDownloadUrl", "generateUploadUrl", "createFunction", "updateFunction", 
"deleteFunction" ], "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The operation to p [...]
+    "GoogleCloudFunctionsEntryPoint": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The name of the function (as defined in source code) 
that will be executed. Used for createFunction operation" },
+    "GoogleCloudFunctionsRuntime": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The runtime in which to run the function.\n\nPossible 
values are:\n\n* `nodejs10`\n* `nodejs12`\n* `nodejs14`\n* `python37`\n* 
`python38`\n* `python39`\n* `go111`\n* `go113`\n* `java11`\n* `dotnet3`\n* 
`ruby26`\n* `nodejs6`\n* `nodejs8`\n\nUsed f [...]
+    "GoogleCloudFunctionsSourceArchiveUrl": { "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Google Cloud Storage URL, starting with `gs:\/\/`, 
pointing to the zip archive which contains the function. Used for 
createFunction operation." },
+    "GoogleCloudFunctionsResponseObject": { "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Object", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The response object resulting from the Google Functions 
Client invocation" }
+  },
   "properties": {
     "functionName": { "kind": "path", "displayName": "Function Name", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsConfiguration",
 "configurationField": "configuration", "description": "The user-defined name 
of the function" },
     "serviceAccountKey": { "kind": "parameter", "displayName": "Service 
Account Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service account" },
diff --git 
a/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
 
b/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
index 3e9cc9e..b1743b3 100644
--- 
a/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
+++ 
b/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
@@ -88,25 +88,9 @@ include::partial$component-endpoint-options.adoc[]
 
 == Usage
 
-=== Message headers evaluated by the Google Functions Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`GoogleCloudFunctionsOperation` |`String` |The operation to perform. 
Permitted values are listFunctions, getFunction, callFunction, 
generateDownloadUrl, generateUploadUrl, createFunction, updateFunction, 
deleteFunction
-|`GoogleCloudFunctionsEntryPoint` |`String` |The name of the function (as 
defined in source code) that will be executed. Used for createFunction 
operation.
-|`GoogleCloudFunctionsRuntime` |`String` |The runtime in which to run the 
function. Possible values are `nodejs10`, `nodejs12`, `nodejs14`, `python37`, 
`python38`, `python39`, `go111`, `go113`, `java11`, `dotnet3`, `ruby26`, 
`nodejs6`, `nodejs8`. Used for createFunction operation.
-|`GoogleCloudFunctionsSourceArchiveUrl` |`String` |The Google Cloud Storage 
URL, starting with `gs://`, pointing to the zip archive which contains the 
function. Used for createFunction operation.
-
-|=======================================================================
-
-=== Message headers set by the Google Functions Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`GoogleCloudFunctionsResponseObject` |`Object` |The response object resulting 
from the Google Functions Client invocation
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Google Functions Producer operations
 
diff --git 
a/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsConstants.java
 
b/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsConstants.java
index b56df85..d900d37 100644
--- 
a/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsConstants.java
+++ 
b/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsConstants.java
@@ -16,10 +16,25 @@
  */
 package org.apache.camel.component.google.functions;
 
+import org.apache.camel.spi.Metadata;
+
 public interface GoogleCloudFunctionsConstants {
+    @Metadata(description = "The operation to perform",
+              javaType = 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsOperations")
     String OPERATION = "GoogleCloudFunctionsOperation";
+    @Metadata(description = "The name of the function (as defined in source 
code) that will be executed. Used for createFunction operation",
+              javaType = "String")
     String ENTRY_POINT = "GoogleCloudFunctionsEntryPoint";
+    @Metadata(description = "The runtime in which to run the 
function.\n\nPossible values are:\n\n" +
+                            "* `nodejs10`\n* `nodejs12`\n* `nodejs14`\n* 
`python37`\n* `python38`\n* `python39`\n* `go111`\n* `go113`\n"
+                            +
+                            "* `java11`\n* `dotnet3`\n* `ruby26`\n* 
`nodejs6`\n* `nodejs8`\n" +
+                            "\nUsed for createFunction operation.",
+              javaType = "String")
     String RUNTIME = "GoogleCloudFunctionsRuntime";
+    @Metadata(description = "The Google Cloud Storage URL, starting with 
`gs://`, pointing to the zip archive which contains the function. Used for 
createFunction operation.",
+              javaType = "String")
     String SOURCE_ARCHIVE_URL = "GoogleCloudFunctionsSourceArchiveUrl";
+    @Metadata(description = "The response object resulting from the Google 
Functions Client invocation", javaType = "Object")
     String RESPONSE_OBJECT = "GoogleCloudFunctionsResponseObject";
 }
diff --git 
a/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsEndpoint.java
 
b/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsEndpoint.java
index bc4cc4e..28b705b 100644
--- 
a/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsEndpoint.java
+++ 
b/components/camel-google/camel-google-functions/src/main/java/org/apache/camel/component/google/functions/GoogleCloudFunctionsEndpoint.java
@@ -34,7 +34,7 @@ import org.apache.camel.support.DefaultEndpoint;
 @UriEndpoint(firstVersion = "3.9.0", scheme = "google-functions", title = 
"Google Cloud Functions",
              syntax = "google-functions:functionName", category = {
                      Category.CLOUD },
-             producerOnly = true)
+             producerOnly = true, headersClass = 
GoogleCloudFunctionsConstants.class)
 public class GoogleCloudFunctionsEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-mail/src/generated/resources/org/apache/camel/component/google/mail/stream/google-mail-stream.json
 
b/components/camel-google/camel-google-mail/src/generated/resources/org/apache/camel/component/google/mail/stream/google-mail-stream.json
index 80aaa24..06fe45f 100644
--- 
a/components/camel-google/camel-google-mail/src/generated/resources/org/apache/camel/component/google/mail/stream/google-mail-stream.json
+++ 
b/components/camel-google/camel-google-mail/src/generated/resources/org/apache/camel/component/google/mail/stream/google-mail-stream.json
@@ -39,6 +39,14 @@
     "keyResource": { "kind": "property", "displayName": "Key Resource", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "Sets .json file with 
credentials for Service account" },
     "refreshToken": { "kind": "property", "displayName": "Refresh Token", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "OAuth 2 refresh token. 
Using this, the Google Calendar component can obtain a new accessToken  [...]
   },
+  "headers": {
+    "CamelGoogleMailStreamTo": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The recipient of the message" },
+    "CamelGoogleMailStreamFrom": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The emitter of the message" },
+    "CamelGoogleMailStreamCc": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The carbon copy of the message" },
+    "CamelGoogleMailStreamBcc": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The blind carbon cpoy of the message" },
+    "CamelGoogleMailStreamSubject": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The subject of the message" },
+    "CamelGoogleMailId": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The ID of the message" }
+  },
   "properties": {
     "index": { "kind": "path", "displayName": "Index", "group": "consumer", 
"label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "Currently not in use" },
     "applicationName": { "kind": "parameter", "displayName": "Application 
Name", "group": "consumer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration", 
"configurationField": "configuration", "description": "Google mail application 
name. Example would be camel-google-mail\/1.0" },
diff --git 
a/components/camel-google/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
 
b/components/camel-google/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
index fd0217a..0f6896f 100644
--- 
a/components/camel-google/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
+++ 
b/components/camel-google/camel-google-mail/src/main/docs/google-mail-stream-component.adoc
@@ -69,7 +69,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
 
 
 include::spring-boot:partial$starter.adoc[]
diff --git 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
index ea8fdf1..7d4bafe 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
@@ -16,16 +16,24 @@
  */
 package org.apache.camel.component.google.mail.stream;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel Google Mail Stream
  */
 public final class GoogleMailStreamConstants {
 
+    @Metadata(description = "The recipient of the message", javaType = 
"String")
     public static final String MAIL_TO = "CamelGoogleMailStreamTo";
+    @Metadata(description = "The emitter of the message", javaType = "String")
     public static final String MAIL_FROM = "CamelGoogleMailStreamFrom";
+    @Metadata(description = "The carbon copy of the message", javaType = 
"String")
     public static final String MAIL_CC = "CamelGoogleMailStreamCc";
+    @Metadata(description = "The blind carbon cpoy of the message", javaType = 
"String")
     public static final String MAIL_BCC = "CamelGoogleMailStreamBcc";
+    @Metadata(description = "The subject of the message", javaType = "String")
     public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
+    @Metadata(description = "The ID of the message", javaType = "String")
     public static final String MAIL_ID = "CamelGoogleMailId";
 
     /**
diff --git 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
index 0f60175..0e8c198 100644
--- 
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
+++ 
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamEndpoint.java
@@ -41,7 +41,7 @@ import org.apache.camel.util.ObjectHelper;
              title = "Google Mail Stream",
              syntax = "google-mail-stream:index",
              consumerOnly = true,
-             category = { Category.CLOUD, Category.MAIL })
+             category = { Category.CLOUD, Category.MAIL }, headersClass = 
GoogleMailStreamConstants.class)
 public class GoogleMailStreamEndpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-pubsub/src/generated/resources/org/apache/camel/component/google/pubsub/google-pubsub.json
 
b/components/camel-google/camel-google-pubsub/src/generated/resources/org/apache/camel/component/google/pubsub/google-pubsub.json
index 3762173..4854318 100644
--- 
a/components/camel-google/camel-google-pubsub/src/generated/resources/org/apache/camel/component/google/pubsub/google-pubsub.json
+++ 
b/components/camel-google/camel-google-pubsub/src/generated/resources/org/apache/camel/component/google/pubsub/google-pubsub.json
@@ -33,6 +33,13 @@
     "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 [...]
     "publisherTerminationTimeout": { "kind": "property", "displayName": 
"Publisher Termination Timeout", "group": "advanced", "label": "advanced", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "How many milliseconds 
should a producer be allowed to terminate." }
   },
+  "headers": {
+    "CamelGooglePubsub.MessageId": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ID of the message, assigned by the server when the 
message is published." },
+    "CamelGooglePubsub.MsgAckId": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The ID used to acknowledge the received 
message." },
+    "CamelGooglePubsub.PublishTime": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"com.google.protobuf.Timestamp", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The time at which the 
message was published" },
+    "CamelGooglePubsub.Attributes": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "Map<String, 
String>", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The attributes of the message." },
+    "CamelGooglePubsub.OrderingKey": { "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "If non-empty, identifies related messages for 
which publish order should be\n respected." }
+  },
   "properties": {
     "projectId": { "kind": "path", "displayName": "Project Id", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Google Cloud PubSub Project Id" },
     "destinationName": { "kind": "path", "displayName": "Destination Name", 
"group": "common", "label": "common", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The Destination Name. For 
the consumer this will be the subscription name, while for the producer this 
will be the topic name." },
diff --git 
a/components/camel-google/camel-google-pubsub/src/main/docs/google-pubsub-component.adoc
 
b/components/camel-google/camel-google-pubsub/src/main/docs/google-pubsub-component.adoc
index 82e06c7..98c993b 100644
--- 
a/components/camel-google/camel-google-pubsub/src/main/docs/google-pubsub-component.adoc
+++ 
b/components/camel-google/camel-google-pubsub/src/main/docs/google-pubsub-component.adoc
@@ -55,6 +55,9 @@ include::partial$component-endpoint-options.adoc[]
 
 // endpoint options: END
 
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 == Producer Endpoints
 
@@ -93,14 +96,6 @@ To ack/nack the message the component uses Acknowledgement 
ID stored as header `
 If the header is removed or tampered with, the ack will fail and the message 
will be redelivered
 again after the ack deadline.
 
-== Message Headers
-
-Headers set by the consumer endpoints:
-
-* GooglePubsubConstants.MESSAGE_ID
-* GooglePubsubConstants.ATTRIBUTES
-* GooglePubsubConstants.PUBLISH_TIME
-
 == Message Body
 
 The consumer endpoint returns the content of the message as byte[] - exactly 
as the underlying system sends it.
diff --git 
a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConstants.java
 
b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConstants.java
index e44a417..1650293 100644
--- 
a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConstants.java
+++ 
b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubConstants.java
@@ -16,12 +16,23 @@
  */
 package org.apache.camel.component.google.pubsub;
 
+import org.apache.camel.spi.Metadata;
+
 public final class GooglePubsubConstants {
 
+    @Metadata(description = "The ID of the message, assigned by the server 
when the message is published.", javaType = "String")
     public static final String MESSAGE_ID = "CamelGooglePubsub.MessageId";
+    @Metadata(label = "consumer", description = "The ID used to acknowledge 
the received message.", javaType = "String")
     public static final String ACK_ID = "CamelGooglePubsub.MsgAckId";
+    @Metadata(label = "consumer", description = "The time at which the message 
was published",
+              javaType = "com.google.protobuf.Timestamp")
     public static final String PUBLISH_TIME = "CamelGooglePubsub.PublishTime";
+    @Metadata(description = "The attributes of the message.", javaType = 
"Map<String, String>")
     public static final String ATTRIBUTES = "CamelGooglePubsub.Attributes";
+    @Metadata(label = "producer",
+              description = "If non-empty, identifies related messages for 
which publish order should be\n" +
+                            " respected.",
+              javaType = "String")
     public static final String ORDERING_KEY = "CamelGooglePubsub.OrderingKey";
     public static final String RESERVED_GOOGLE_CLIENT_ATTRIBUTE_PREFIX = 
"goog";
 
diff --git 
a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubEndpoint.java
 
b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubEndpoint.java
index ade9329..ac8154c 100644
--- 
a/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubEndpoint.java
+++ 
b/components/camel-google/camel-google-pubsub/src/main/java/org/apache/camel/component/google/pubsub/GooglePubsubEndpoint.java
@@ -41,7 +41,8 @@ import org.slf4j.LoggerFactory;
  * Built on top of the Google Cloud Pub/Sub libraries.
  */
 @UriEndpoint(firstVersion = "2.19.0", scheme = "google-pubsub", title = 
"Google Pubsub",
-             syntax = "google-pubsub:projectId:destinationName", category = { 
Category.CLOUD, Category.MESSAGING })
+             syntax = "google-pubsub:projectId:destinationName", category = { 
Category.CLOUD, Category.MESSAGING },
+             headersClass = GooglePubsubConstants.class)
 public class GooglePubsubEndpoint extends DefaultEndpoint {
 
     private Logger log;
diff --git 
a/components/camel-google/camel-google-secret-manager/src/generated/resources/org/apache/camel/component/google/secret/manager/google-secret-manager.json
 
b/components/camel-google/camel-google-secret-manager/src/generated/resources/org/apache/camel/component/google/secret/manager/google-secret-manager.json
index f6fa45e..1be9b4a14 100644
--- 
a/components/camel-google/camel-google-secret-manager/src/generated/resources/org/apache/camel/component/google/secret/manager/google-secret-manager.json
+++ 
b/components/camel-google/camel-google-secret-manager/src/generated/resources/org/apache/camel/component/google/secret/manager/google-secret-manager.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": {
+    "GoogleSecretManagerOperation": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerOperations",
 "enum": [ "createSecret", "getSecretVersion", "deleteSecret", "listSecrets" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The operation to perform" },
+    "CamelGoogleSecretManagerSecretId": { "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The id of the secret" },
+    "CamelGoogleSecretManagerVersionId": { "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "latest", "description": "The version of the secret" }
+  },
   "properties": {
     "project": { "kind": "path", "displayName": "Project", "group": "common", 
"label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConfiguration",
 "configurationField": "configuration", "description": "The Google Cloud 
Project Id name related to the Secret Manager" },
     "serviceAccountKey": { "kind": "parameter", "displayName": "Service 
Account Key", "group": "common", "label": "common", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service account" },
diff --git 
a/components/camel-google/camel-google-secret-manager/src/main/docs/google-secret-manager-component.adoc
 
b/components/camel-google/camel-google-secret-manager/src/main/docs/google-secret-manager-component.adoc
index abd0646..f8b10a3 100644
--- 
a/components/camel-google/camel-google-secret-manager/src/main/docs/google-secret-manager-component.adoc
+++ 
b/components/camel-google/camel-google-secret-manager/src/main/docs/google-secret-manager-component.adoc
@@ -83,6 +83,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 GCP Secret Manager Properties Source
 
diff --git 
a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerConstants.java
 
b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerConstants.java
index ec02f51..d0311a1 100644
--- 
a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerConstants.java
+++ 
b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerConstants.java
@@ -16,9 +16,15 @@
  */
 package org.apache.camel.component.google.secret.manager;
 
+import org.apache.camel.spi.Metadata;
+
 public interface GoogleSecretManagerConstants {
+    @Metadata(description = "The operation to perform",
+              javaType = 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerOperations")
     String OPERATION = "GoogleSecretManagerOperation";
+    @Metadata(description = "The id of the secret", javaType = "String")
     String SECRET_ID = "CamelGoogleSecretManagerSecretId";
+    @Metadata(description = "The version of the secret", javaType = "String", 
defaultValue = "latest")
     String VERSION_ID = "CamelGoogleSecretManagerVersionId";
     String REPLICATION = "CamelGoogleSecretManagerReplication";
 }
diff --git 
a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerEndpoint.java
 
b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerEndpoint.java
index b2be2a2..00896f0 100644
--- 
a/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerEndpoint.java
+++ 
b/components/camel-google/camel-google-secret-manager/src/main/java/org/apache/camel/component/google/secret/manager/GoogleSecretManagerEndpoint.java
@@ -33,7 +33,7 @@ import org.apache.camel.support.DefaultEndpoint;
 @UriEndpoint(firstVersion = "3.16.0", scheme = "google-secret-manager", title 
= "Google Secret Manager",
              syntax = "google-secret-manager:project", category = {
                      Category.CLOUD },
-             producerOnly = true)
+             producerOnly = true, headersClass = 
GoogleSecretManagerConstants.class)
 public class GoogleSecretManagerEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-sheets/src/generated/resources/org/apache/camel/component/google/sheets/stream/google-sheets-stream.json
 
b/components/camel-google/camel-google-sheets/src/generated/resources/org/apache/camel/component/google/sheets/stream/google-sheets-stream.json
index f05c99b..4380e7d 100644
--- 
a/components/camel-google/camel-google-sheets/src/generated/resources/org/apache/camel/component/google/sheets/stream/google-sheets-stream.json
+++ 
b/components/camel-google/camel-google-sheets/src/generated/resources/org/apache/camel/component/google/sheets/stream/google-sheets-stream.json
@@ -42,6 +42,14 @@
     "keyResource": { "kind": "property", "displayName": "Key Resource", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConfiguration",
 "configurationField": "configuration", "description": "Sets .json file with 
credentials for Service account" },
     "refreshToken": { "kind": "property", "displayName": "Refresh Token", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConfiguration",
 "configurationField": "configuration", "description": "OAuth 2 refresh token. 
Using this, the Google Calendar component can obtain a new accessTo [...]
   },
+  "headers": {
+    "CamelGoogleSheetsSpreadsheetId": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Specifies the spreadsheet identifier that is used to 
identify the target to obtain." },
+    "CamelGoogleSheetsSpreadsheetUrl": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The URL of the spreadsheet." },
+    "CamelGoogleSheetsMajorDimension": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The major dimension of the values" },
+    "CamelGoogleSheetsRange": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "", "required": false, "javaType": "String", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The range the values cover, in A1 notation." },
+    "CamelGoogleSheetsRangeIndex": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The index of the range" },
+    "CamelGoogleSheetsValueIndex": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "", "required": false, "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The index of the value" }
+  },
   "properties": {
     "spreadsheetId": { "kind": "path", "displayName": "Spreadsheet Id", 
"group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConfiguration",
 "configurationField": "configuration", "description": "Specifies the 
spreadsheet identifier that is used to identify the target to o [...]
     "applicationName": { "kind": "parameter", "displayName": "Application 
Name", "group": "consumer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamConfiguration",
 "configurationField": "configuration", "description": "Google sheets 
application name. Example would be camel-google-sheets\/1.0" },
diff --git 
a/components/camel-google/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
 
b/components/camel-google/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
index e281149..cf969cb 100644
--- 
a/components/camel-google/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
+++ 
b/components/camel-google/camel-google-sheets/src/main/docs/google-sheets-stream-component.adoc
@@ -69,6 +69,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-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
index a2f69c7..d57deb1 100644
--- 
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
+++ 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamConstants.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.google.sheets.stream;
 
+import org.apache.camel.spi.Metadata;
+
 /**
  * Constants used in Camel Google Sheets Stream
  */
@@ -23,11 +25,18 @@ public final class GoogleSheetsStreamConstants {
 
     private static final String PROPERTY_PREFIX = "CamelGoogleSheets";
 
+    @Metadata(description = "Specifies the spreadsheet identifier that is used 
to identify the target to obtain.",
+              javaType = "String")
     public static final String SPREADSHEET_ID = PROPERTY_PREFIX + 
"SpreadsheetId";
+    @Metadata(description = "The URL of the spreadsheet.", javaType = "String")
     public static final String SPREADSHEET_URL = PROPERTY_PREFIX + 
"SpreadsheetUrl";
+    @Metadata(description = "The major dimension of the values", javaType = 
"String")
     public static final String MAJOR_DIMENSION = PROPERTY_PREFIX + 
"MajorDimension";
+    @Metadata(description = "The range the values cover, in A1 notation.", 
javaType = "String")
     public static final String RANGE = PROPERTY_PREFIX + "Range";
+    @Metadata(description = "The index of the range", javaType = "int")
     public static final String RANGE_INDEX = PROPERTY_PREFIX + "RangeIndex";
+    @Metadata(description = "The index of the value", javaType = "int")
     public static final String VALUE_INDEX = PROPERTY_PREFIX + "ValueIndex";
 
     /**
diff --git 
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
index 6fa2507..517a60d 100644
--- 
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
+++ 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/stream/GoogleSheetsStreamEndpoint.java
@@ -34,7 +34,7 @@ import org.apache.camel.support.ScheduledPollEndpoint;
              title = "Google Sheets Stream",
              syntax = "google-sheets-stream:spreadsheetId",
              consumerOnly = true,
-             category = { Category.CLOUD, Category.SHEETS })
+             category = { Category.CLOUD, Category.SHEETS }, headersClass = 
GoogleSheetsStreamConstants.class)
 public class GoogleSheetsStreamEndpoint extends ScheduledPollEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
 
b/components/camel-google/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
index 576b619..86a7dfb 100644
--- 
a/components/camel-google/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
+++ 
b/components/camel-google/camel-google-storage/src/generated/resources/org/apache/camel/component/google/storage/google-storage.json
@@ -41,6 +41,34 @@
     "operation": { "kind": "property", "displayName": "Operation", "group": 
"producer", "label": "producer", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.google.storage.GoogleCloudStorageOperations", 
"enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", 
"listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.storage.GoogleCloudSto [...]
     "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": {
+    "CamelGoogleCloudStorageOperation": { "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"org.apache.camel.component.google.storage.GoogleCloudStorageOperations", 
"enum": [ "copyObject", "listObjects", "deleteObject", "deleteBucket", 
"listBuckets", "getObject", "createDownloadLink" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
operation to perform." },
+    "CamelGoogleCloudStorageBucketName": { "kind": "header", "displayName": 
"", "group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The bucket Name which this object will be 
stored or which will be used for the current operation" },
+    "CamelGoogleCloudStorageObjectName": { "kind": "header", "displayName": 
"", "group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The object Name which will be used for the 
current operation" },
+    "CamelGoogleCloudStorageDestinationObjectName": { "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The object Destination Name which will 
be used for the current operation" },
+    "CamelGoogleCloudStorageDestinationBucketName": { "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The bucket Destination Name which will 
be used for the current operation" },
+    "CamelGoogleCloudStorageDownloadLinkExpirationTime": { "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": "300000", "description": "The time in 
millisecond the download link will be valid." },
+    "CamelGoogleCloudStorageContentLength": { "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": "Long", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The content length of this object." },
+    "CamelGoogleCloudStorageContentType": { "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The content type of this object." },
+    "CamelGoogleCloudStorageCacheControl": { "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Cache-Control metadata can specify two different 
aspects of how data is served from Cloud Storage: whether the data can be 
cached and whether the data can be transformed" },
+    "CamelGoogleCloudStorageContentDisposition": { "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The content disposition of this 
object." },
+    "CamelGoogleCloudStorageContentEncoding": { "kind": "header", 
"displayName": "", "group": "common", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The content encoding of this object." },
+    "CamelGoogleCloudStorageContentMd5": { "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The md5 checksum of this object." },
+    "CamelFileName": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The name of the blob" },
+    "CamelGoogleCloudStorageComponentCount": { "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The component count of this object" },
+    "CamelGoogleCloudStorageContentLanguage": { "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The Content-Language metadata indicates 
the language(s) that the object is intended for." },
+    "CamelGoogleCloudStorageCustomTime": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"Long", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The Custom-Time metadata is a user-specified 
date and time represented in the RFC 3339 format YYYY-MM-DD'T'HH:MM:SS.SS'Z' or 
YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are zero. This metadata is typically 
set in order to use the DaysS [...]
+    "CamelGoogleCloudStorageCrc32cHex": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The CRC32c of the object" },
+    "CamelGoogleCloudStorageETag": { "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The ETag for the Object." },
+    "CamelGoogleCloudStorageGeneration": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"Long", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "Is the generation number of the object for 
which you are retrieving information." },
+    "CamelGoogleCloudStorageBlobId": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"com.google.cloud.storage.BlobId", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The blob id of the object" 
},
+    "CamelGoogleCloudStorageKmsKeyName": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The KMS key name" },
+    "CamelGoogleCloudStorageMediaLink": { "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The media link" },
+    "CamelGoogleCloudStorageMetageneration": { "kind": "header", 
"displayName": "", "group": "consumer", "label": "consumer", "required": false, 
"javaType": "Long", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The metageneration of the object" },
+    "CamelGoogleCloudStorageStorageClass": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"com.google.cloud.storage.StorageClass", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
storage class of the object" },
+    "CamelGoogleCloudStorageCreateTime": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"Long", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The creation time of the object" },
+    "CamelGoogleCloudStorageLastUpdate": { "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"Date", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The last update of the object" }
+  },
   "properties": {
     "bucketName": { "kind": "path", "displayName": "Bucket Name", "group": 
"common", "label": "common", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", 
"configurationField": "configuration", "description": "Bucket name or ARN" },
     "autoCreateBucket": { "kind": "parameter", "displayName": "Auto Create 
Bucket", "group": "common", "label": "common", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "configurationClass": 
"org.apache.camel.component.google.storage.GoogleCloudStorageConfiguration", 
"configurationField": "configuration", "description": "Setting the autocreation 
of the bucket bucketName." },
diff --git 
a/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
 
b/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
index b010d5f..ea4afa5 100644
--- 
a/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ 
b/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -89,73 +89,9 @@ include::partial$component-endpoint-options.adoc[]
 
 == Usage
 
-=== Message headers evaluated by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this 
object will be stored or which will be used for the current operation
-
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be 
used for the current operation
-
-|`CamelGoogleCloudStorageDestinationBucketName` |`String` |The bucket 
Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageDestinationObjectName` |`String` |The object 
Destination Name which will be used for the current operation
-
-|`CamelGoogleCloudStorageContentLength` |`Long` |The content length of this 
object.
-
-|`CamelGoogleCloudStorageContentType` |`String` |The content type of this 
object.
-
-|`CamelGoogleCloudStorageContentDisposition` |`String` |The content 
disposition of this object.
-
-|`CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of 
this object.
-
-|`CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this 
object.
-
-|`CamelGoogleCloudStorageOperation` |`String` |The operation to perform. 
Permitted values are copyObject, listObjects, deleteObject, deleteBucket, 
listBuckets, getObject, createDownloadLink
-
-|`CamelGoogleCloudStorageDownloadLinkExpirationTime` |`Long` |The time in 
millisecond the download link will be valid.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Producer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-
-|`CamelGoogleCloudStorageETag` |`String` |The ETag value for the newly 
uploaded object.
-
-|=======================================================================
-
-=== Message headers set by the Google Storage Consumer
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Header |Type |Description
-|`CamelGoogleCloudStorageBucketName` |`String` |The bucket Name which this 
object will be stored or which will be used for the current operation
-|`CamelGoogleCloudStorageObjectName` |`String` |The object Name which will be 
used for the current operation
-| `CamelGoogleCloudStorageCacheControl` |`String` | The Cache-Control metadata 
can specify two different aspects of how data is served from Cloud Storage: 
whether the data can be cached and whether the data can be transformed
-| `CamelGoogleCloudStorageComponentCount` |`String` | The component count of 
this object
-| `CamelGoogleCloudStorageContentDisposition` |`String` |The content 
disposition of this object.
-| `CamelGoogleCloudStorageContentEncoding` |`String` |The content encoding of 
this object.
-| `CamelGoogleCloudStorageContentLanguage` |`String` | The Content-Language 
metadata indicates the language(s) that the object is intended for.
-| `CamelGoogleCloudStorageContentType` |`String` |The content type of this 
object.
-| `CamelGoogleCloudStorageCustomTime` |`String` | The Custom-Time metadata is 
a user-specified date and time represented in the RFC 3339 format 
YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are 
zero. This metadata is typically set in order to use the DaysSinceCustomTime 
condition in Object Lifecycle Management.
-| `CamelGoogleCloudStorageCrc32cHex` |`String` | The CRC32c of the object
-| `CamelGoogleCloudStorageETag` |`String` | The ETag for the Object.
-| `CamelGoogleCloudStorageGeneration` |`String` | Is the generation number of 
the object for which you are retrieving information.
-| `CamelGoogleCloudStorageBlobId` |`String` | The blob id of the object
-| `CamelGoogleCloudStorageKmsKeyName` |`String` | The KMS key name
-| `CamelGoogleCloudStorageContentMd5` |`String` |The md5 checksum of this 
object.
-| `CamelGoogleCloudStorageMediaLink` |`String` | The media link
-| `CamelGoogleCloudStorageMetageneration` | `String` | The metageneration of 
the object
-| `CamelGoogleCloudStorageContentLength` |`Long` |The content length of this 
object.
-| `CamelGoogleCloudStorageStorageClass` | `String` | The storage class of the 
object
-| `CamelGoogleCloudStorageCreateTime` |`String` | The creation time of the 
object
-| `CamelGoogleCloudStorageLastUpdate` |`String` | The last update of the object
-|=======================================================================
+// component headers: START
+include::partial$component-endpoint-headers.adoc[]
+// component headers: END
 
 === Google Storage Producer operations
 
diff --git 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
index 5967ecb..1187073 100644
--- 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
+++ 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConstants.java
@@ -16,32 +16,81 @@
  */
 package org.apache.camel.component.google.storage;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.Metadata;
+
 public final class GoogleCloudStorageConstants {
 
+    @Metadata(label = "producer", description = "The operation to perform.",
+              javaType = 
"org.apache.camel.component.google.storage.GoogleCloudStorageOperations")
     public static final String OPERATION = "CamelGoogleCloudStorageOperation";
+    @Metadata(label = "producer",
+              description = "The bucket Name which this object will be stored 
or which will be used for the current operation",
+              javaType = "String")
     public static final String BUCKET_NAME = 
"CamelGoogleCloudStorageBucketName";
+    @Metadata(label = "producer", description = "The object Name which will be 
used for the current operation",
+              javaType = "String")
     public static final String OBJECT_NAME = 
"CamelGoogleCloudStorageObjectName";
+    @Metadata(label = "producer", description = "The object Destination Name 
which will be used for the current operation",
+              javaType = "String")
     public static final String DESTINATION_OBJECT_NAME = 
"CamelGoogleCloudStorageDestinationObjectName";
+    @Metadata(label = "producer", description = "The bucket Destination Name 
which will be used for the current operation",
+              javaType = "String")
     public static final String DESTINATION_BUCKET_NAME = 
"CamelGoogleCloudStorageDestinationBucketName";
+    @Metadata(label = "producer", description = "The time in millisecond the 
download link will be valid.", javaType = "Long",
+              defaultValue = "300000")
     public static final String DOWNLOAD_LINK_EXPIRATION_TIME = 
"CamelGoogleCloudStorageDownloadLinkExpirationTime";
+    @Metadata(description = "The content length of this object.", javaType = 
"Long")
     public static final String CONTENT_LENGTH = 
"CamelGoogleCloudStorageContentLength";
+    @Metadata(description = "The content type of this object.", javaType = 
"String")
     public static final String CONTENT_TYPE = 
"CamelGoogleCloudStorageContentType";
+    @Metadata(description = "The Cache-Control metadata can specify two 
different aspects of how data is served from Cloud Storage: "
+                            +
+                            "whether the data can be cached and whether the 
data can be transformed",
+              javaType = "String")
     public static final String CACHE_CONTROL = 
"CamelGoogleCloudStorageCacheControl";
+    @Metadata(description = "The content disposition of this object.", 
javaType = "String")
     public static final String CONTENT_DISPOSITION = 
"CamelGoogleCloudStorageContentDisposition";
+    @Metadata(description = "The content encoding of this object.", javaType = 
"String")
     public static final String CONTENT_ENCODING = 
"CamelGoogleCloudStorageContentEncoding";
+    @Metadata(description = "The md5 checksum of this object.", javaType = 
"String")
     public static final String CONTENT_MD5 = 
"CamelGoogleCloudStorageContentMd5";
+    @Metadata(label = "consumer", description = "The name of the blob", 
javaType = "String")
+    public static final String FILE_NAME = Exchange.FILE_NAME;
+    @Metadata(label = "consumer", description = "The component count of this 
object", javaType = "Integer")
     public static final String METADATA_COMPONENT_COUNT = 
"CamelGoogleCloudStorageComponentCount";
+    @Metadata(label = "consumer",
+              description = "The Content-Language metadata indicates the 
language(s) that the object is intended for.",
+              javaType = "String")
     public static final String METADATA_CONTENT_LANGUAGE = 
"CamelGoogleCloudStorageContentLanguage";
+    @Metadata(label = "consumer", description = "The Custom-Time metadata is a 
user-specified date and time represented " +
+                                                "in the RFC 3339 format 
YYYY-MM-DD'T'HH:MM:SS.SS'Z' or YYYY-MM-DD'T'HH:MM:SS'Z' when milliseconds are 
zero. "
+                                                +
+                                                "This metadata is typically 
set in order to use the DaysSinceCustomTime condition in Object Lifecycle 
Management.",
+              javaType = "Long")
     public static final String METADATA_CUSTOM_TIME = 
"CamelGoogleCloudStorageCustomTime";
+    @Metadata(label = "consumer", description = "The CRC32c of the object", 
javaType = "String")
     public static final String METADATA_CRC32C_HEX = 
"CamelGoogleCloudStorageCrc32cHex";
+    @Metadata(description = "The ETag for the Object.", javaType = "String")
     public static final String METADATA_ETAG = "CamelGoogleCloudStorageETag";
+    @Metadata(label = "consumer",
+              description = "Is the generation number of the object for which 
you are retrieving information.",
+              javaType = "Long")
     public static final String METADATA_GENERATION = 
"CamelGoogleCloudStorageGeneration";
+    @Metadata(label = "consumer", description = "The blob id of the object", 
javaType = "com.google.cloud.storage.BlobId")
     public static final String METADATA_BLOB_ID = 
"CamelGoogleCloudStorageBlobId";
+    @Metadata(label = "consumer", description = "The KMS key name", javaType = 
"String")
     public static final String METADATA_KMS_KEY_NAME = 
"CamelGoogleCloudStorageKmsKeyName";
+    @Metadata(label = "consumer", description = "The media link", javaType = 
"String")
     public static final String METADATA_MEDIA_LINK = 
"CamelGoogleCloudStorageMediaLink";
+    @Metadata(label = "consumer", description = "The metageneration of the 
object", javaType = "Long")
     public static final String METADATA_METAGENERATION = 
"CamelGoogleCloudStorageMetageneration";
+    @Metadata(label = "consumer", description = "The storage class of the 
object",
+              javaType = "com.google.cloud.storage.StorageClass")
     public static final String METADATA_STORAGE_CLASS = 
"CamelGoogleCloudStorageStorageClass";
+    @Metadata(label = "consumer", description = "The creation time of the 
object", javaType = "Long")
     public static final String METADATA_CREATE_TIME = 
"CamelGoogleCloudStorageCreateTime";
+    @Metadata(label = "consumer", description = "The last update of the 
object", javaType = "Date")
     public static final String METADATA_LAST_UPDATE = 
"CamelGoogleCloudStorageLastUpdate";
 
     /**
diff --git 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
index 5f37612..b2a754d 100644
--- 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
+++ 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageConsumer.java
@@ -341,7 +341,7 @@ public class GoogleCloudStorageConsumer extends 
ScheduledBatchPollingConsumer {
     protected String evaluateFileExpression(Exchange exchange, String 
downloadFileName, String blogName) {
         CamelContext camelContext = exchange.getContext();
         // use blob as file name
-        exchange.getMessage().setHeader(Exchange.FILE_NAME, blogName);
+        exchange.getMessage().setHeader(GoogleCloudStorageConstants.FILE_NAME, 
blogName);
 
         String eval = downloadFileName;
         if (!downloadFileName.contains("$")) {
diff --git 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
index 38d7cfe..53a6b22 100644
--- 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
+++ 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/GoogleCloudStorageEndpoint.java
@@ -38,7 +38,7 @@ import org.slf4j.LoggerFactory;
  * behavior of Consumer and Producer.
  */
 @UriEndpoint(firstVersion = "3.9.0", scheme = "google-storage", title = 
"Google Storage", syntax = "google-storage:bucketName",
-             category = { Category.CLOUD })
+             category = { Category.CLOUD }, headersClass = 
GoogleCloudStorageConstants.class)
 public class GoogleCloudStorageEndpoint extends ScheduledPollEndpoint {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(GoogleCloudStorageEndpoint.class);
diff --git 
a/components/camel-grape/src/generated/resources/org/apache/camel/component/grape/grape.json
 
b/components/camel-grape/src/generated/resources/org/apache/camel/component/grape/grape.json
index bace9f7..d98b751 100644
--- 
a/components/camel-grape/src/generated/resources/org/apache/camel/component/grape/grape.json
+++ 
b/components/camel-grape/src/generated/resources/org/apache/camel/component/grape/grape.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 [...]
     "patchesRepository": { "kind": "property", "displayName": "Patches 
Repository", "group": "advanced", "label": "advanced", "required": false, 
"type": "object", "javaType": 
"org.apache.camel.component.grape.PatchesRepository", "deprecated": false, 
"autowired": false, "secret": false, "description": "Implementation of 
org.apache.camel.component.grape.PatchesRepository, by default: 
FilePatchesRepository" }
   },
+  "headers": {
+    "CamelGrapeCommand": { "kind": "header", "displayName": "", "group": 
"producer", "label": "", "required": false, "javaType": 
"org.apache.camel.component.grape.GrapeCommand", "enum": [ "grab", 
"listPatches", "clearPatches" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": "grab", "description": 
"The command to be performed by the Grape endpoint." }
+  },
   "properties": {
     "defaultCoordinates": { "kind": "path", "displayName": "Default 
Coordinates", "group": "producer", "label": "", "required": true, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Maven coordinates to use as default to grab if the message body is empty." },
     "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-grape/src/main/docs/grape-component.adoc 
b/components/camel-grape/src/main/docs/grape-component.adoc
index 33c2213..9c9557f 100644
--- a/components/camel-grape/src/main/docs/grape-component.adoc
+++ b/components/camel-grape/src/main/docs/grape-component.adoc
@@ -34,7 +34,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
 
 == Setting up class loader
 
@@ -109,17 +111,6 @@ String:
 producerTemplate.sendBody("grape:defaultMavenCoordinates", 
"org.apache.camel/camel-ftp/2.15.2".getBytes());
 
-----------------------------------------------------------------------------------------------------------
 
-== Headers
-
-The following headers are recognized by the Grape component:
-
-[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
-|=======================================================================
-|Header |Java constant |Endpoint type |Value type |Description
-
-|`CamelGrapeCommand` |`GrapeConstants.GRAPE_COMMAND` |Producer 
|`org.apache.camel.component.grape.GrapeCommand` |The command to be performed 
by the Grape endpoint. Default to `grab`.
-|=======================================================================
-
 == Loading components at runtime
 
 In order to load the new component at the router runtime, just grab the
diff --git 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeConstants.java
 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeConstants.java
index e885752..0c2d014 100644
--- 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeConstants.java
+++ 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeConstants.java
@@ -16,8 +16,12 @@
  */
 package org.apache.camel.component.grape;
 
+import org.apache.camel.spi.Metadata;
+
 public final class GrapeConstants {
 
+    @Metadata(description = "The command to be performed by the Grape 
endpoint.",
+              javaType = "org.apache.camel.component.grape.GrapeCommand", 
defaultValue = "grab")
     public static final String GRAPE_COMMAND = "CamelGrapeCommand";
 
     private GrapeConstants() {
diff --git 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
index e020009..3a44962 100644
--- 
a/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
+++ 
b/components/camel-grape/src/main/java/org/apache/camel/component/grape/GrapeEndpoint.java
@@ -36,7 +36,7 @@ import org.codehaus.groovy.runtime.DefaultGroovyMethods;
  * Fetch, load and manage additional jars dynamically after Camel Context was 
started.
  */
 @UriEndpoint(firstVersion = "2.16.0", scheme = "grape", syntax = 
"grape:defaultCoordinates", title = "Grape",
-             producerOnly = true, category = { Category.MANAGEMENT, 
Category.DEPLOYMENT })
+             producerOnly = true, category = { Category.MANAGEMENT, 
Category.DEPLOYMENT }, headersClass = GrapeConstants.class)
 public class GrapeEndpoint extends DefaultEndpoint {
 
     @UriPath(description = "Maven coordinates to use as default to grab if the 
message body is empty.")
diff --git a/components/camel-grpc/pom.xml b/components/camel-grpc/pom.xml
index 802a1574..0d1c040 100644
--- a/components/camel-grpc/pom.xml
+++ b/components/camel-grpc/pom.xml
@@ -265,6 +265,19 @@
                     <skipTests>${skipTests}</skipTests>
                 </configuration>
             </plugin>
+            <!-- Force the version of guava to camel-package-maven-plugin to 
prevent build failure due to the
+             usage of an old/incompatible version of guava -->
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <dependencies>
+                    <dependency>
+                        <groupId>com.google.guava</groupId>
+                        <artifactId>guava</artifactId>
+                        <version>${google-guava-version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
         </plugins>
     </build>
 </project>
diff --git 
a/components/camel-grpc/src/generated/resources/org/apache/camel/component/grpc/grpc.json
 
b/components/camel-grpc/src/generated/resources/org/apache/camel/component/grpc/grpc.json
index 0093a0b..03d0334 100644
--- 
a/components/camel-grpc/src/generated/resources/org/apache/camel/component/grpc/grpc.json
+++ 
b/components/camel-grpc/src/generated/resources/org/apache/camel/component/grpc/grpc.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": {
+    "CamelGrpcMethodName": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Method name handled by the consumer service" },
+    "CamelGrpcUserAgent": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "If provided, the given agent will prepend the gRPC 
library's user agent information" },
+    "CamelGrpcEventType": { "kind": "header", "displayName": "", "group": 
"consumer", "label": "consumer", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Received event type from the sent request.\n\nPossible 
values:\n\n* onNext\n* onCompleted\n* onError" }
+  },
   "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.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The gRPC server host name. This is localhost 
or 0.0.0.0 when being a consumer or remote server host name when using 
producer." },
     "port": { "kind": "path", "displayName": "Port", "group": "common", 
"label": "", "required": true, "type": "integer", "javaType": "int", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "configurationClass": 
"org.apache.camel.component.grpc.GrpcConfiguration", "configurationField": 
"configuration", "description": "The gRPC local or remote server port" },
diff --git a/components/camel-grpc/src/main/docs/grpc-component.adoc 
b/components/camel-grpc/src/main/docs/grpc-component.adoc
index b0b1ab5..ad0177b 100644
--- a/components/camel-grpc/src/main/docs/grpc-component.adoc
+++ b/components/camel-grpc/src/main/docs/grpc-component.adoc
@@ -59,7 +59,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
 
 == Transport security and authentication support
 
@@ -114,18 +116,6 @@ The table below shows the types of objects in the message 
body, depending on the
 
 |=======================================================================
 
-== gRPC consumer headers (will be installed after the consumer invocation)
-
-[width="100%",cols="25%,50,25%",options="header",]
-|=======================================================================
-|Header name |Description|Possible values
-
-|*CamelGrpcMethodName*|Method name handled by the consumer service|
-|*CamelGrpcEventType*|Received event type from the sent request|onNext, 
onCompleted or onError
-|*CamelGrpcUserAgent*|If provided, the given agent will prepend the gRPC 
library's user agent information|
-
-|=======================================================================
-
 == Examples
 
 Below is a simple synchronous method invoke with host and port parameters
diff --git 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConstants.java
 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConstants.java
index 106813b..8aae089 100644
--- 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConstants.java
+++ 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcConstants.java
@@ -43,8 +43,19 @@ public interface GrpcConstants {
     /*
      * This headers will be set after gRPC consumer method is invoked
      */
+    @org.apache.camel.spi.Metadata(label = "consumer", description = "Method 
name handled by the consumer service",
+                                   javaType = "String")
     String GRPC_METHOD_NAME_HEADER = "CamelGrpcMethodName";
+    @org.apache.camel.spi.Metadata(label = "consumer",
+                                   description = "If provided, the given agent 
will prepend the gRPC library's user agent information",
+                                   javaType = "String")
     String GRPC_USER_AGENT_HEADER = "CamelGrpcUserAgent";
+    @org.apache.camel.spi.Metadata(label = "consumer", description = "Received 
event type from the sent request.\n\n" +
+                                                                     "Possible 
values:\n\n" +
+                                                                     "* 
onNext\n" +
+                                                                     "* 
onCompleted\n" +
+                                                                     "* 
onError",
+                                   javaType = "String")
     String GRPC_EVENT_TYPE_HEADER = "CamelGrpcEventType";
 
     String GRPC_EVENT_TYPE_ON_NEXT = "onNext";
diff --git 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcEndpoint.java
 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcEndpoint.java
index c3dd36e..e293f0b 100644
--- 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcEndpoint.java
+++ 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcEndpoint.java
@@ -30,7 +30,7 @@ import org.apache.camel.util.ObjectHelper;
  * Expose gRPC endpoints and access external gRPC endpoints.
  */
 @UriEndpoint(firstVersion = "2.19.0", scheme = "grpc", title = "gRPC", syntax 
= "grpc:host:port/service",
-             category = { Category.RPC })
+             category = { Category.RPC }, headersClass = GrpcConstants.class)
 public class GrpcEndpoint extends DefaultEndpoint {
     @UriParam
     protected final GrpcConfiguration configuration;

Reply via email to