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

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

commit 44c43dcd5a3b3fe21fffa60aa69b9900917b5e96
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Oct 24 19:57:05 2026 +0200

    CAMEL-24961: Catalog body types for nine google cloud components, 
ibm-secrets-manager, hashicorp-vault and cyberark-vault (#28404)
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../camel/catalog/components/cyberark-vault.json   |  4 ++
 .../catalog/components/google-bigquery-sql.json    |  4 ++
 .../camel/catalog/components/google-bigquery.json  |  4 ++
 .../camel/catalog/components/google-firestore.json |  5 +++
 .../camel/catalog/components/google-functions.json |  4 ++
 .../catalog/components/google-secret-manager.json  |  4 ++
 .../catalog/components/google-speech-to-text.json  |  4 ++
 .../catalog/components/google-text-to-speech.json  |  4 ++
 .../camel/catalog/components/google-vertexai.json  |  4 ++
 .../camel/catalog/components/google-vision.json    |  4 ++
 .../camel/catalog/components/hashicorp-vault.json  |  4 ++
 .../catalog/components/ibm-secrets-manager.json    |  4 ++
 .../docs/google-bigquery-sql-component.adoc        | 35 ++++++---------
 .../catalog/docs/hashicorp-vault-component.adoc    |  3 +-
 .../component/cyberark/vault/cyberark-vault.json   |  4 ++
 .../cyberark/vault/CyberArkVaultEndpoint.java      | 18 ++++++++
 .../component/google/bigquery/google-bigquery.json |  4 ++
 .../google/bigquery/sql/google-bigquery-sql.json   |  4 ++
 .../main/docs/google-bigquery-sql-component.adoc   | 35 ++++++---------
 .../google/bigquery/GoogleBigQueryEndpoint.java    |  9 ++++
 .../bigquery/sql/GoogleBigQuerySQLEndpoint.java    | 14 ++++++
 .../google/firestore/google-firestore.json         |  5 +++
 .../google/firestore/GoogleFirestoreEndpoint.java  | 34 ++++++++++++++
 .../google/functions/google-functions.json         |  4 ++
 .../functions/GoogleCloudFunctionsEndpoint.java    | 38 ++++++++++++++++
 .../secret/manager/google-secret-manager.json      |  4 ++
 .../manager/GoogleSecretManagerEndpoint.java       | 27 +++++++++++
 .../google/speechtotext/google-speech-to-text.json |  4 ++
 .../GoogleCloudSpeechToTextEndpoint.java           | 16 +++++++
 .../google/texttospeech/google-text-to-speech.json |  4 ++
 .../GoogleCloudTextToSpeechEndpoint.java           | 28 ++++++++++++
 .../component/google/vertexai/google-vertexai.json |  4 ++
 .../google/vertexai/GoogleVertexAIEndpoint.java    | 44 ++++++++++++++++++
 .../component/google/vision/google-vision.json     |  4 ++
 .../google/vision/GoogleCloudVisionEndpoint.java   | 52 ++++++++++++++++++++++
 .../component/hashicorp/vault/hashicorp-vault.json |  4 ++
 .../src/main/docs/hashicorp-vault-component.adoc   |  3 +-
 .../hashicorp/vault/HashicorpVaultEndpoint.java    | 24 ++++++++++
 .../ibm/secrets/manager/ibm-secrets-manager.json   |  4 ++
 .../secrets/manager/IBMSecretsManagerEndpoint.java | 43 ++++++++++++++++++
 40 files changed, 477 insertions(+), 44 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json
index ecb975402431..da9744df5f43 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/cyberark-vault.json
@@ -39,6 +39,10 @@
     "password": { "index": 12, "kind": "property", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The password for 
authentication with CyberArk Conjur" },
     "username": { "index": 13, "kind": "property", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The username for 
authentication with CyberArk Conjur" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "createSecret", "carriers": [ "text", "bytes", "stream", 
"file" ] } ], "description": "getSecret, the default operation, does not read 
the body. createSecret stores the body as text, unless the 
CamelCyberArkVaultSecretValue header is set: bytes, a stream or a file are read 
as text, a Map or a POJO is stored as its toString(), so marshal it first, and 
no body fails" },
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "createSecret", "carriers": [ 
"unchanged" ] } ], "description": "The value of the secret as text for 
getSecret, also in the CamelCyberArkVaultSecretValue header: unmarshal a JSON 
secret to read its fields. createSecret leaves the body unchanged" }
+  },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
     "account": { "index": 1, "kind": "parameter", "displayName": "Account", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The CyberArk Conjur 
account name" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
index 3a745571848f..55b419ae3978 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
@@ -35,6 +35,10 @@
     "CamelGoogleBigQueryPageToken": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The page token to retrieve a specific 
page of results from BigQuery. If not set, the first page is returned", 
"constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#PAGE_TOKEN" 
},
     "CamelGoogleBigQueryNextPageToken": { "index": 3, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The next page token returned by 
BigQuery. Use this token in the CamelGoogleBigQueryPageToken header of a 
subsequent request to retrieve the next page of results", "constantName": 
"org.apache.camel.component.google.bigquery.Google [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "The query is set on 
the endpoint. A Map body gives the values of the @name parameters, before the 
headers of the same name; any other body is ignored" },
+    "producerOut": { "carriers": [ "list", "value" ], "byOption": [ { 
"option": "outputType", "value": "STREAM_LIST", "carriers": [ "iterator", 
"value" ] } ], "description": "For a SELECT the rows of the page, a Map per row 
whose scalar values are the text BigQuery returns, with the next page token and 
the job id in headers; with outputType=STREAM_LIST an Iterator of those Maps 
over all pages. For a DML statement the number of affected rows as a Long" }
+  },
   "properties": {
     "projectId": { "index": 0, "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": { "index": 1, "kind": "path", "displayName": "Query 
String", "group": "common", "label": "common", "required": true, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "largeInput": true, "configurationClass": 
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
 "configurationField": "configuration", "description": "BigQuery standard [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
index 0042affcd280..06e9c887c022 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
@@ -36,6 +36,10 @@
     "CamelGoogleBigQueryInsertId": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "InsertId to use when inserting data", 
"constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#INSERT_ID" 
},
     "CamelGoogleBigQueryPartitionDecorator": { "index": 3, "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", "constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#PARTITION_DECORATOR"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "map", "list" ], "description": "The row to 
insert as a Map of column names to values, or a List of such Maps for one row 
each; the exchanges of a grouped aggregation are inserted together. Text such 
as JSON, bytes, a stream, a POJO or no body fails: unmarshal it into a Map 
first" },
+    "producerOut": { "carriers": [ "unchanged" ] }
+  },
   "properties": {
     "projectId": { "index": 0, "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": { "index": 1, "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/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-firestore.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-firestore.json
index a3bad9de1c88..d91df504f7b0 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-firestore.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-firestore.json
@@ -58,6 +58,11 @@
     "CamelGoogleFirestoreMerge": { "index": 15, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": "false", "description": "When true, 
merge the data with existing document data instead of overwriting.", 
"constantName": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConstants#MERGE" },
     "CamelGoogleFirestoreMergeFields": { "index": 16, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "description": "List of field paths to 
merge when using merge option.", "constantName": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConstants#MERGE_FIELDS"
 }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "map" ], "description": "The fields of the 
document as a Map, one message per document, with its id, path and times in 
headers, and with realtimeUpdates the change type. Numbers are Long or Double, 
a timestamp a com.google.cloud.Timestamp" },
+    "producerIn": { "carriers": [ "map", "text" ], "dependsOn": [ "operation" 
], "description": "The fields to write for setDocument (the default), 
createDocument and updateDocument: a Map, or JSON object text, which is parsed 
into a Map. Bytes, a stream, a List, a POJO or no body fail: unmarshal it 
first. The other operations take their input from options and headers" },
+    "producerOut": { "carriers": [ "map" ], "byOption": [ { "option": 
"operation", "value": "getDocumentById", "carriers": [ "map", "null" ] }, { 
"option": "operation", "value": "deleteDocument", "carriers": [ "value" ], 
"javaType": "java.lang.Boolean" }, { "option": "operation", "value": 
"queryCollection", "carriers": [ "list" ], "javaType": 
"java.util.List<java.util.Map<java.lang.String, java.lang.Object>>" }, { 
"option": "operation", "value": "listDocuments", "carriers": [ "list" ], " [...]
+  },
   "properties": {
     "collectionName": { "index": 0, "kind": "path", "displayName": "Collection 
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.firestore.GoogleFirestoreConfiguration", 
"configurationField": "configuration", "description": "The collection name to 
use" },
     "databaseId": { "index": 1, "kind": "parameter", "displayName": "Database 
Id", "group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConfiguration", 
"configurationField": "configuration", "description": "The Firestore database 
ID. If not specified, the default database '(default)' will be used." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-functions.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-functions.json
index 8ad9329d9503..1d2e83c5a08a 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-functions.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-functions.json
@@ -34,6 +34,10 @@
     "CamelGoogleCloudFunctionsSourceArchiveUrl": { "index": 3, "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.", "constantName": 
"org.apache.camel.component.google.functions.GoogleCloudF [...]
     "CamelGoogleCloudFunctionsResponseObject": { "index": 4, "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", "constantName": 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsConstants#RESPONSE_OBJECT"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream" ], "dependsOn": [ 
"operation" ], "byOption": [ { "option": "pojoRequest", "value": "true", 
"carriers": [ "pojo" ] } ], "description": "The data to call the function with, 
for callFunction (the default), converted to text: a Map or a POJO is sent as 
its toString(), so marshal it first, and no body fails. The other operations 
take their input from options and headers. With pojoRequest=true the request 
object of the operation, such [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "listFunctions", "carriers": [ 
"list" ], "javaType": 
"java.util.List<com.google.cloud.functions.v1.CloudFunction>" }, { "option": 
"operation", "value": "getFunction", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.functions.v1.CloudFunction" }, { "option": "operation", 
"value": "createFunction", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.functions [...]
+  },
   "properties": {
     "functionName": { "index": 0, "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": { "index": 1, "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/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-secret-manager.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-secret-manager.json
index 011cbeb11f4a..dd66abba9d34 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-secret-manager.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-secret-manager.json
@@ -33,6 +33,10 @@
     "CamelGoogleSecretManagerSecretId": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The id of the secret", "constantName": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConstants#SECRET_ID"
 },
     "CamelGoogleSecretManagerVersionId": { "index": 2, "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", "constantName": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConstants#VERSION_ID"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "getSecretVersion", "carriers": 
[ "any" ] }, { "option": "operation", "value": "deleteSecret", "carriers": [ 
"any" ] }, { "option": "operation", "value": "listSecrets", "carriers": [ "any" 
] } ], "description": "The value of the secret for createSecret, the default 
operation, as text: bytes, a stream or a file are read as text, a Map or a POJO 
is stored as its toString() [...]
+    "producerOut": { "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.secretmanager.v1.SecretVersion", "byOption": [ { "option": 
"operation", "value": "getSecretVersion", "carriers": [ "text" ], "javaType": 
"java.lang.String" }, { "option": "operation", "value": "deleteSecret", 
"carriers": [ "unchanged" ] }, { "option": "operation", "value": "listSecrets", 
"carriers": [ "pojo" ] } ], "description": "The SecretVersion of the Google SDK 
that createSecret added. The value of the secret [...]
+  },
   "properties": {
     "project": { "index": 0, "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": { "index": 1, "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 acc [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-speech-to-text.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-speech-to-text.json
index da8c71596a65..88beaa3876eb 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-speech-to-text.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-speech-to-text.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudSpeechToTextOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextOperations",
 "enum": [ "recognize" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The operation to perform", 
"constantName": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextConstants#O
 [...]
     "CamelGoogleCloudSpeechToTextResponseObject": { "index": 1, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "com.google.cloud.speech.v1.RecognizeResponse", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The response object resulting from the Google Cloud 
Speech-to-Text API invocation", "constantName": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextConstants#
 [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "bytes", "stream", "file" ], "byOption": [ { 
"option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.speech.v1.RecognizeRequest" } ], "description": "The audio to 
transcribe, sent inline in the encoding and sample rate of the encoding and 
sampleRateHertz options (LINEAR16 by default). A stream or a file is read into 
bytes and a String is sent as its bytes, a Map, a POJO or no body fails. With 
pojoRequest=true a Rec [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The transcript: the best alternative of each result, one line 
per result, or an empty String when nothing is recognized, also with 
pojoRequest=true. The RecognizeResponse is in the 
CamelGoogleCloudSpeechToTextResponseObject header" }
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.speechtotext.GoogleCloudSpeechToTextConfiguration",
 "configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.speechtotext.GoogleCloudSpeechToTextConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service a [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-text-to-speech.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-text-to-speech.json
index 788442b9e7e1..6b7c7c2d758d 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-text-to-speech.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-text-to-speech.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudTextToSpeechOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSpeechOperations",
 "enum": [ "synthesize", "listVoices" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
operation to perform", "constantName": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSp [...]
     "CamelGoogleCloudTextToSpeechResponseObject": { "index": 1, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "com.google.cloud.texttospeech.v1.SynthesizeSpeechResponse", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The response object resulting from the Google Cloud 
Text-to-Speech API invocation", "constantName": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSpe [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "synthesize", "carriers": [ "text", "bytes", "stream", 
"file" ] }, { "option": "operation", "value": "listVoices", "carriers": [ "any" 
] }, { "option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], 
"javaType": "com.google.cloud.texttospeech.v1.SynthesizeSpeechRequest" } ], 
"description": "The text to speak for synthesize: bytes, a stream or a file are 
read as text, a Map or a POJO is spok [...]
+    "producerOut": { "carriers": [ "bytes", "list" ], "byOption": [ { 
"option": "operation", "value": "synthesize", "carriers": [ "bytes" ], 
"javaType": "byte[]" }, { "option": "operation", "value": "listVoices", 
"carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.texttospeech.v1.Voice>" }, { "option": 
"pojoRequest", "value": "true", "carriers": [ "bytes" ], "javaType": "byte[]" } 
], "description": "The audio of synthesize as bytes, in the audioEncoding 
option (MP3 by de [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.texttospeech.GoogleCloudTextToSpeechConfiguration",
 "configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.texttospeech.GoogleCloudTextToSpeechConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service a [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vertexai.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vertexai.json
index 88378fbf4f7a..947bfc7fd6b5 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vertexai.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vertexai.json
@@ -77,6 +77,10 @@
     "CamelGoogleVertexAIRawResponse": { "index": 30, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The raw JSON response from rawPredict 
operation", "constantName": 
"org.apache.camel.component.google.vertexai.GoogleVertexAIConstants#RAW_RESPONSE"
 },
     "CamelGoogleVertexAIAnthropicVersion": { "index": 31, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Anthropic API version for Claude 
models", "constantName": 
"org.apache.camel.component.google.vertexai.GoogleVertexAIConstants#ANTHROPIC_VERSION"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "generateEmbeddings", 
"carriers": [ "text", "bytes", "stream", "file", "list" ] }, { "option": 
"operation", "value": "generateMultimodal", "carriers": [ "text", "bytes" ] }, 
{ "option": "operation", "value": "rawPredict", "carriers": [ "text", "map" ] 
}, { "option": "operation", "value": "streamRawPredict", "carriers": [ "text", 
"map" ] } ], "description": "The prompt fo [...]
+    "producerOut": { "carriers": [ "text" ], "byOption": [ { "option": 
"streamOutputMode", "value": "chunks", "carriers": [ "list" ], "javaType": 
"java.util.List<String>" }, { "option": "operation", "value": "generateImage", 
"carriers": [ "list" ], "javaType": 
"java.util.List<com.google.genai.types.Image>" }, { "option": "operation", 
"value": "generateEmbeddings", "carriers": [ "list" ], "javaType": 
"java.util.List<java.util.List<Float>>" } ], "description": "The text the model 
answers f [...]
+  },
   "properties": {
     "projectId": { "index": 0, "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.vertexai.GoogleVertexAIConfiguration", 
"configurationField": "configuration", "description": "Google Cloud Project ID" 
},
     "location": { "index": 1, "kind": "path", "displayName": "Location", 
"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.vertexai.GoogleVertexAIConfiguration", 
"configurationField": "configuration", "description": "Google Cloud 
location\/region (e.g., us-central1)" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vision.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vision.json
index 128cd7f08be5..f9ab7f6eeebe 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vision.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-vision.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudVisionOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.vision.GoogleCloudVisionOperations", "enum": 
[ "labelDetection", "textDetection", "faceDetection", "landmarkDetection", 
"logoDetection", "safeSearchDetection", "imagePropertiesDetection", 
"webDetection", "objectLocalization", "cropHintsDetection", 
"documentTextDetection" ], "deprecated": false, "depre [...]
     "CamelGoogleCloudVisionResponseObject": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "com.google.cloud.vision.v1.AnnotateImageResponse", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The response object resulting from the Google Cloud Vision API 
invocation", "constantName": 
"org.apache.camel.component.google.vision.GoogleCloudVisionConstants#RESPONSE_OBJECT"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "bytes", "stream", "file" ], "byOption": [ { 
"option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.vision.v1.AnnotateImageRequest" } ], "description": "The 
image to annotate, sent inline. A stream or a file is read into bytes and a 
String is sent as its bytes, a Map, a POJO or no body fails. With 
pojoRequest=true an AnnotateImageRequest of the Google Cloud SDK: another body 
fails" },
+    "producerOut": { "carriers": [ "list", "pojo" ], "byOption": [ { "option": 
"operation", "value": "labelDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>" }, { "option": 
"operation", "value": "textDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>" }, { "option": 
"operation", "value": "faceDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud. [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.vision.GoogleCloudVisionConfiguration", 
"configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.vision.GoogleCloudVisionConfiguration", 
"configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service account" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/hashicorp-vault.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/hashicorp-vault.json
index ced6bc67d8e1..e07af73a135e 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/hashicorp-vault.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/hashicorp-vault.json
@@ -33,6 +33,10 @@
     "CamelHashicorpVaultSecretPath": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the desired secret path as 
header.", "constantName": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConstants#SECRET_PATH"
 },
     "CamelHashicorpVaultSecretVersion": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the desired secret version as 
header.", "constantName": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConstants#SECRET_VERSION"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "map", "pojo" ], "byOption": [ { "option": 
"operation", "value": "getSecret", "carriers": [ "any" ] }, { "option": 
"operation", "value": "deleteSecret", "carriers": [ "any" ] }, { "option": 
"operation", "value": "listSecrets", "carriers": [ "any" ] } ], "description": 
"The fields of the secret for createSecret, the default operation: a Map of the 
keys and values, or a POJO written as JSON. Text, bytes, a stream, a file or a 
List fail, so unmarshal JSON f [...]
+    "producerOut": { "carriers": [ "unchanged" ], "byOption": [ { "option": 
"operation", "value": "getSecret", "carriers": [ "map", "null" ] }, { "option": 
"operation", "value": "listSecrets", "carriers": [ "list" ], "javaType": 
"java.util.List<java.lang.String>" } ], "description": "getSecret gives a Map 
with the fields of the secret under data and its version under metadata, or no 
body when the secret does not exist or is deleted. listSecrets gives a List of 
the names of the secrets in [...]
+  },
   "properties": {
     "secretsEngine": { "index": 0, "kind": "path", "displayName": "Secrets 
Engine", "group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConfiguration", 
"configurationField": "configuration", "description": "Vault Name to be used" },
     "cloud": { "index": 1, "kind": "parameter", "displayName": "Cloud", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConfiguration", 
"configurationField": "configuration", "description": "Determine if the 
Hashicorp Vault is deployed on Hashicorp Cloud or not" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ibm-secrets-manager.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ibm-secrets-manager.json
index 60e1d1c3b75d..fa2ea7fd7a2c 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ibm-secrets-manager.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/ibm-secrets-manager.json
@@ -35,6 +35,10 @@
     "CamelIbmSecretsManagerSecretPayload": { "index": 4, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the secret payload for update 
operation.", "constantName": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConstants#SECRET_PAYLOAD"
 },
     "CamelIbmSecretsManagerSecretData": { "index": 5, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "Set the secret data (Map) 
for KV secret update operation.", "constantName": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConstants#SECRET_DATA"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "createKVSecret", "carriers": [ 
"map" ] }, { "option": "operation", "value": "updateSecret", "carriers": [ 
"text", "bytes", "stream", "file", "map" ] }, { "option": "operation", "value": 
"getSecret", "carriers": [ "any" ] }, { "option": "operation", "value": 
"deleteSecret", "carriers": [ "any" ] }, { "option": "operation", "value": 
"listSecrets", "carriers": [ "any" ] }, [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "getSecret", "carriers": [ 
"text", "map", "pojo" ] }, { "option": "operation", "value": "deleteSecret", 
"carriers": [ "unchanged" ] }, { "option": "operation", "value": "listSecrets", 
"carriers": [ "pojo" ], "javaType": 
"com.ibm.cloud.secrets_manager_sdk.secrets_manager.v2.model.SecretMetadataPaginatedCollection"
 }, { "option": "operation", "value": "updateSecret", [...]
+  },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConfiguration",
 "configurationField": "configuration", "description": "Logical name" },
     "operation": { "index": 1, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerOperation", 
"enum": [ "createArbitrarySecret", "createKVSecret", "getSecret", 
"deleteSecret", "listSecrets", "updateSecret", "listSecretVersions" ], 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.i [...]
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-bigquery-sql-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-bigquery-sql-component.adoc
index 3212259fde81..1f5765be3c84 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-bigquery-sql-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/google-bigquery-sql-component.adoc
@@ -221,22 +221,23 @@ Returns an `Iterator<Map<String, Object>>` for 
memory-efficient streaming of lar
 
 == Data Type Mapping
 
-BigQuery result types are mapped to Java types:
+BigQuery result types are mapped to Java types. The values of the scalar types 
are the text
+BigQuery returns for them, as a `String`: convert them where you need a number 
or a boolean.
 
 [cols="1,1,3"]
 |===
 |BigQuery Type|Java Type|Notes
 
 |INT64
-|Long
-|
+|String
+|For example `"42"`
 
 |FLOAT64
-|Double
-|
+|String
+|For example `"1.5"`
 
-|NUMERIC
-|BigDecimal
+|NUMERIC, BIGNUMERIC
+|String
 |
 
 |STRING
@@ -244,28 +245,20 @@ BigQuery result types are mapped to Java types:
 |
 
 |BOOL
-|Boolean
-|
-
-|BYTES
-|byte[]
-|
-
-|DATE
 |String
-|ISO 8601 format
+|`"true"` or `"false"`
 
-|DATETIME
+|BYTES
 |String
-|ISO 8601 format
+|Base64 encoded
 
-|TIME
+|DATE, DATETIME, TIME
 |String
 |ISO 8601 format
 
 |TIMESTAMP
 |String
-|ISO 8601 format with timezone
+|The text BigQuery returns, such as the seconds since the epoch
 
 |STRUCT (RECORD)
 |Map<String, Object>
@@ -276,7 +269,7 @@ BigQuery result types are mapped to Java types:
 |Elements recursively converted based on their type
 
 |RANGE
-|Map<String, Object>
+|Map<String, String>
 |Map with range start and end values
 
 |NULL
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/hashicorp-vault-component.adoc
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/hashicorp-vault-component.adoc
index 845a2c662568..98721af5462b 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/hashicorp-vault-component.adoc
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/hashicorp-vault-component.adoc
@@ -103,7 +103,8 @@ YAML::
 
 ==== Getting a secret
 
-The message body becomes the data of the secret; the 
`CamelHashicorpVaultSecretVersion` header reads a given
+The message body becomes a Map with the fields of the secret under `data` and 
its version details under
+`metadata`, or no body when the secret does not exist; the 
`CamelHashicorpVaultSecretVersion` header reads a given
 version instead of the latest:
 
 [tabs]
diff --git 
a/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json
 
b/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json
index ecb975402431..da9744df5f43 100644
--- 
a/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json
+++ 
b/components/camel-cyberark-vault/src/generated/resources/META-INF/org/apache/camel/component/cyberark/vault/cyberark-vault.json
@@ -39,6 +39,10 @@
     "password": { "index": 12, "kind": "property", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The password for 
authentication with CyberArk Conjur" },
     "username": { "index": 13, "kind": "property", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "security": "secret", "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The username for 
authentication with CyberArk Conjur" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "createSecret", "carriers": [ "text", "bytes", "stream", 
"file" ] } ], "description": "getSecret, the default operation, does not read 
the body. createSecret stores the body as text, unless the 
CamelCyberArkVaultSecretValue header is set: bytes, a stream or a file are read 
as text, a Map or a POJO is stored as its toString(), so marshal it first, and 
no body fails" },
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "createSecret", "carriers": [ 
"unchanged" ] } ], "description": "The value of the secret as text for 
getSecret, also in the CamelCyberArkVaultSecretValue header: unmarshal a JSON 
secret to read its fields. createSecret leaves the body unchanged" }
+  },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "Logical name" },
     "account": { "index": 1, "kind": "parameter", "displayName": "Account", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.cyberark.vault.CyberArkVaultConfiguration", 
"configurationField": "configuration", "description": "The CyberArk Conjur 
account name" },
diff --git 
a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpoint.java
 
b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpoint.java
index a181d2b8959f..7a522ae93f23 100644
--- 
a/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpoint.java
+++ 
b/components/camel-cyberark-vault/src/main/java/org/apache/camel/component/cyberark/vault/CyberArkVaultEndpoint.java
@@ -23,6 +23,9 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.component.cyberark.vault.client.ConjurClient;
 import org.apache.camel.component.cyberark.vault.client.ConjurClientFactory;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -35,6 +38,21 @@ import org.apache.camel.util.ObjectHelper;
 @UriEndpoint(firstVersion = "4.17.0", scheme = "cyberark-vault", title = 
"CyberArk Vault",
              syntax = "cyberark-vault:label", producerOnly = true, category = 
{ Category.CLOUD, Category.SECURITY },
              headersClass = CyberArkVaultConstants.class)
+@BodyTypes(producerIn = @BodyType(value = Carrier.ANY,
+                                  byOption = @BodyType.When(option = 
"operation", value = "createSecret",
+                                                            carriers = {
+                                                                    
Carrier.TEXT, Carrier.BYTES, Carrier.STREAM,
+                                                                    
Carrier.FILE }),
+                                  description = "getSecret, the default 
operation, does not read the body. createSecret stores"
+                                                + " the body as text, unless 
the CamelCyberArkVaultSecretValue header is set: bytes,"
+                                                + " a stream or a file are 
read as text, a Map or a POJO is stored as its"
+                                                + " toString(), so marshal it 
first, and no body fails"),
+           producerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   byOption = @BodyType.When(option = 
"operation", value = "createSecret",
+                                                             carriers = 
Carrier.UNCHANGED),
+                                   description = "The value of the secret as 
text for getSecret, also in the"
+                                                 + " 
CamelCyberArkVaultSecretValue header: unmarshal a JSON secret to read its"
+                                                 + " fields. createSecret 
leaves the body unchanged"))
 public class CyberArkVaultEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/google-bigquery.json
 
b/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/google-bigquery.json
index 0042affcd280..06e9c887c022 100644
--- 
a/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/google-bigquery.json
+++ 
b/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/google-bigquery.json
@@ -36,6 +36,10 @@
     "CamelGoogleBigQueryInsertId": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "InsertId to use when inserting data", 
"constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#INSERT_ID" 
},
     "CamelGoogleBigQueryPartitionDecorator": { "index": 3, "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", "constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#PARTITION_DECORATOR"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "map", "list" ], "description": "The row to 
insert as a Map of column names to values, or a List of such Maps for one row 
each; the exchanges of a grouped aggregation are inserted together. Text such 
as JSON, bytes, a stream, a POJO or no body fails: unmarshal it into a Map 
first" },
+    "producerOut": { "carriers": [ "unchanged" ] }
+  },
   "properties": {
     "projectId": { "index": 0, "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": { "index": 1, "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/META-INF/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
 
b/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
index 3a745571848f..55b419ae3978 100644
--- 
a/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
+++ 
b/components/camel-google/camel-google-bigquery/src/generated/resources/META-INF/org/apache/camel/component/google/bigquery/sql/google-bigquery-sql.json
@@ -35,6 +35,10 @@
     "CamelGoogleBigQueryPageToken": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The page token to retrieve a specific 
page of results from BigQuery. If not set, the first page is returned", 
"constantName": 
"org.apache.camel.component.google.bigquery.GoogleBigQueryConstants#PAGE_TOKEN" 
},
     "CamelGoogleBigQueryNextPageToken": { "index": 3, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The next page token returned by 
BigQuery. Use this token in the CamelGoogleBigQueryPageToken header of a 
subsequent request to retrieve the next page of results", "constantName": 
"org.apache.camel.component.google.bigquery.Google [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "The query is set on 
the endpoint. A Map body gives the values of the @name parameters, before the 
headers of the same name; any other body is ignored" },
+    "producerOut": { "carriers": [ "list", "value" ], "byOption": [ { 
"option": "outputType", "value": "STREAM_LIST", "carriers": [ "iterator", 
"value" ] } ], "description": "For a SELECT the rows of the page, a Map per row 
whose scalar values are the text BigQuery returns, with the next page token and 
the job id in headers; with outputType=STREAM_LIST an Iterator of those Maps 
over all pages. For a DML statement the number of affected rows as a Long" }
+  },
   "properties": {
     "projectId": { "index": 0, "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": { "index": 1, "kind": "path", "displayName": "Query 
String", "group": "common", "label": "common", "required": true, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, 
"supportFileReference": true, "largeInput": true, "configurationClass": 
"org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration",
 "configurationField": "configuration", "description": "BigQuery standard [...]
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 3212259fde81..1f5765be3c84 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
@@ -221,22 +221,23 @@ Returns an `Iterator<Map<String, Object>>` for 
memory-efficient streaming of lar
 
 == Data Type Mapping
 
-BigQuery result types are mapped to Java types:
+BigQuery result types are mapped to Java types. The values of the scalar types 
are the text
+BigQuery returns for them, as a `String`: convert them where you need a number 
or a boolean.
 
 [cols="1,1,3"]
 |===
 |BigQuery Type|Java Type|Notes
 
 |INT64
-|Long
-|
+|String
+|For example `"42"`
 
 |FLOAT64
-|Double
-|
+|String
+|For example `"1.5"`
 
-|NUMERIC
-|BigDecimal
+|NUMERIC, BIGNUMERIC
+|String
 |
 
 |STRING
@@ -244,28 +245,20 @@ BigQuery result types are mapped to Java types:
 |
 
 |BOOL
-|Boolean
-|
-
-|BYTES
-|byte[]
-|
-
-|DATE
 |String
-|ISO 8601 format
+|`"true"` or `"false"`
 
-|DATETIME
+|BYTES
 |String
-|ISO 8601 format
+|Base64 encoded
 
-|TIME
+|DATE, DATETIME, TIME
 |String
 |ISO 8601 format
 
 |TIMESTAMP
 |String
-|ISO 8601 format with timezone
+|The text BigQuery returns, such as the seconds since the epoch
 
 |STRUCT (RECORD)
 |Map<String, Object>
@@ -276,7 +269,7 @@ BigQuery result types are mapped to Java types:
 |Elements recursively converted based on their type
 
 |RANGE
-|Map<String, Object>
+|Map<String, String>
 |Map with range start and end values
 
 |NULL
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 dee52470755e..b6947048c946 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
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -44,6 +47,12 @@ import static 
org.apache.camel.component.google.bigquery.GoogleBigQueryConstants
 @UriEndpoint(firstVersion = "2.20.0", scheme = SCHEME_BIGQUERY, title = 
"Google BigQuery",
              syntax = "google-bigquery:projectId:datasetId:tableId",
              category = { Category.CLOUD, Category.BIGDATA }, producerOnly = 
true, headersClass = GoogleBigQueryConstants.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.MAP, Carrier.LIST },
+                                  description = "The row to insert as a Map of 
column names to values, or a List of such"
+                                                + " Maps for one row each; the 
exchanges of a grouped aggregation are"
+                                                + " inserted together. Text 
such as JSON, bytes, a stream, a POJO or no"
+                                                + " body fails: unmarshal it 
into a Map first"),
+           producerOut = @BodyType(Carrier.UNCHANGED))
 public class GoogleBigQueryEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @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 1adbd07fef12..3be3c1cdcbab 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
@@ -23,6 +23,9 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import 
org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory;
 import org.apache.camel.component.google.bigquery.GoogleBigQueryConstants;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
@@ -45,6 +48,17 @@ import static 
org.apache.camel.component.google.bigquery.GoogleBigQueryConstants
              syntax = "google-bigquery-sql:projectId:queryString", category = 
{ Category.CLOUD, Category.MESSAGING },
              producerOnly = true,
              headersClass = GoogleBigQueryConstants.class)
+@BodyTypes(producerIn = @BodyType(value = Carrier.ANY,
+                                  description = "The query is set on the 
endpoint. A Map body gives the values of the @name"
+                                                + " parameters, before the 
headers of the same name; any other body is"
+                                                + " ignored"),
+           producerOut = @BodyType(value = { Carrier.LIST, Carrier.VALUE },
+                                   byOption = @BodyType.When(option = 
"outputType", value = "STREAM_LIST",
+                                                             carriers = { 
Carrier.ITERATOR, Carrier.VALUE }),
+                                   description = "For a SELECT the rows of the 
page, a Map per row whose scalar values are"
+                                                 + " the text BigQuery 
returns, with the next page token and the job id in"
+                                                 + " headers; with 
outputType=STREAM_LIST an Iterator of those Maps over all"
+                                                 + " pages. For a DML 
statement the number of affected rows as a Long"))
 public class GoogleBigQuerySQLEndpoint extends DefaultEndpoint {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-firestore/src/generated/resources/META-INF/org/apache/camel/component/google/firestore/google-firestore.json
 
b/components/camel-google/camel-google-firestore/src/generated/resources/META-INF/org/apache/camel/component/google/firestore/google-firestore.json
index a3bad9de1c88..d91df504f7b0 100644
--- 
a/components/camel-google/camel-google-firestore/src/generated/resources/META-INF/org/apache/camel/component/google/firestore/google-firestore.json
+++ 
b/components/camel-google/camel-google-firestore/src/generated/resources/META-INF/org/apache/camel/component/google/firestore/google-firestore.json
@@ -58,6 +58,11 @@
     "CamelGoogleFirestoreMerge": { "index": 15, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": "false", "description": "When true, 
merge the data with existing document data instead of overwriting.", 
"constantName": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConstants#MERGE" },
     "CamelGoogleFirestoreMergeFields": { "index": 16, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "description": "List of field paths to 
merge when using merge option.", "constantName": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConstants#MERGE_FIELDS"
 }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "map" ], "description": "The fields of the 
document as a Map, one message per document, with its id, path and times in 
headers, and with realtimeUpdates the change type. Numbers are Long or Double, 
a timestamp a com.google.cloud.Timestamp" },
+    "producerIn": { "carriers": [ "map", "text" ], "dependsOn": [ "operation" 
], "description": "The fields to write for setDocument (the default), 
createDocument and updateDocument: a Map, or JSON object text, which is parsed 
into a Map. Bytes, a stream, a List, a POJO or no body fail: unmarshal it 
first. The other operations take their input from options and headers" },
+    "producerOut": { "carriers": [ "map" ], "byOption": [ { "option": 
"operation", "value": "getDocumentById", "carriers": [ "map", "null" ] }, { 
"option": "operation", "value": "deleteDocument", "carriers": [ "value" ], 
"javaType": "java.lang.Boolean" }, { "option": "operation", "value": 
"queryCollection", "carriers": [ "list" ], "javaType": 
"java.util.List<java.util.Map<java.lang.String, java.lang.Object>>" }, { 
"option": "operation", "value": "listDocuments", "carriers": [ "list" ], " [...]
+  },
   "properties": {
     "collectionName": { "index": 0, "kind": "path", "displayName": "Collection 
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.firestore.GoogleFirestoreConfiguration", 
"configurationField": "configuration", "description": "The collection name to 
use" },
     "databaseId": { "index": 1, "kind": "parameter", "displayName": "Database 
Id", "group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.google.firestore.GoogleFirestoreConfiguration", 
"configurationField": "configuration", "description": "The Firestore database 
ID. If not specified, the default database '(default)' will be used." },
diff --git 
a/components/camel-google/camel-google-firestore/src/main/java/org/apache/camel/component/google/firestore/GoogleFirestoreEndpoint.java
 
b/components/camel-google/camel-google-firestore/src/main/java/org/apache/camel/component/google/firestore/GoogleFirestoreEndpoint.java
index 8ed09ffd80cc..5d668adaf34d 100644
--- 
a/components/camel-google/camel-google-firestore/src/main/java/org/apache/camel/component/google/firestore/GoogleFirestoreEndpoint.java
+++ 
b/components/camel-google/camel-google-firestore/src/main/java/org/apache/camel/component/google/firestore/GoogleFirestoreEndpoint.java
@@ -23,6 +23,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -40,6 +43,37 @@ import org.slf4j.LoggerFactory;
 @UriEndpoint(firstVersion = "4.19.0", scheme = "google-firestore", title = 
"Google Firestore",
              syntax = "google-firestore:collectionName",
              category = { Category.CLOUD, Category.DATABASE }, headersClass = 
GoogleFirestoreConstants.class)
+@BodyTypes(consumerOut = @BodyType(value = Carrier.MAP,
+                                   description = "The fields of the document 
as a Map, one message per document, with its id,"
+                                                 + " path and times in 
headers, and with realtimeUpdates the change type."
+                                                 + " Numbers are Long or 
Double, a timestamp a com.google.cloud.Timestamp"),
+           producerIn = @BodyType(value = { Carrier.MAP, Carrier.TEXT }, 
dependsOn = "operation",
+                                  description = "The fields to write for 
setDocument (the default), createDocument and"
+                                                + " updateDocument: a Map, or 
JSON object text, which is parsed into a Map."
+                                                + " Bytes, a stream, a List, a 
POJO or no body fail: unmarshal it first. The"
+                                                + " other operations take 
their input from options and headers"),
+           producerOut = @BodyType(value = Carrier.MAP,
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "getDocumentById",
+                                                          carriers = { 
Carrier.MAP, Carrier.NULL }),
+                                           @BodyType.When(option = 
"operation", value = "deleteDocument",
+                                                          carriers = 
Carrier.VALUE, javaType = "java.lang.Boolean"),
+                                           @BodyType.When(option = 
"operation", value = "queryCollection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<java.util.Map<java.lang.String, java.lang.Object>>"),
+                                           @BodyType.When(option = 
"operation", value = "listDocuments",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<java.util.Map<java.lang.String, java.lang.Object>>"),
+                                           @BodyType.When(option = 
"operation", value = "listCollections",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<java.lang.String>") },
+                                   description = "The Map of the fields 
written for setDocument, createDocument and"
+                                                 + " updateDocument (JSON text 
is now the parsed Map), with the document id"
+                                                 + " and path in headers. By 
the operation: the fields of the document or"
+                                                 + " null when it does not 
exist for getDocumentById, true for"
+                                                 + " deleteDocument, a List of 
Maps with _id and _path entries for"
+                                                 + " queryCollection and 
listDocuments, and the collection ids for"
+                                                 + " listCollections"))
 public class GoogleFirestoreEndpoint extends ScheduledPollEndpoint implements 
EndpointServiceLocation {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(GoogleFirestoreEndpoint.class);
diff --git 
a/components/camel-google/camel-google-functions/src/generated/resources/META-INF/org/apache/camel/component/google/functions/google-functions.json
 
b/components/camel-google/camel-google-functions/src/generated/resources/META-INF/org/apache/camel/component/google/functions/google-functions.json
index 8ad9329d9503..1d2e83c5a08a 100644
--- 
a/components/camel-google/camel-google-functions/src/generated/resources/META-INF/org/apache/camel/component/google/functions/google-functions.json
+++ 
b/components/camel-google/camel-google-functions/src/generated/resources/META-INF/org/apache/camel/component/google/functions/google-functions.json
@@ -34,6 +34,10 @@
     "CamelGoogleCloudFunctionsSourceArchiveUrl": { "index": 3, "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.", "constantName": 
"org.apache.camel.component.google.functions.GoogleCloudF [...]
     "CamelGoogleCloudFunctionsResponseObject": { "index": 4, "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", "constantName": 
"org.apache.camel.component.google.functions.GoogleCloudFunctionsConstants#RESPONSE_OBJECT"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream" ], "dependsOn": [ 
"operation" ], "byOption": [ { "option": "pojoRequest", "value": "true", 
"carriers": [ "pojo" ] } ], "description": "The data to call the function with, 
for callFunction (the default), converted to text: a Map or a POJO is sent as 
its toString(), so marshal it first, and no body fails. The other operations 
take their input from options and headers. With pojoRequest=true the request 
object of the operation, such [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "listFunctions", "carriers": [ 
"list" ], "javaType": 
"java.util.List<com.google.cloud.functions.v1.CloudFunction>" }, { "option": 
"operation", "value": "getFunction", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.functions.v1.CloudFunction" }, { "option": "operation", 
"value": "createFunction", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.functions [...]
+  },
   "properties": {
     "functionName": { "index": 0, "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": { "index": 1, "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/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 a97f952fde4e..5873fa6e7ed2 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
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -37,6 +40,41 @@ import org.apache.camel.util.ObjectHelper;
              syntax = "google-functions:functionName", category = {
                      Category.CLOUD },
              producerOnly = true, headersClass = 
GoogleCloudFunctionsConstants.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM }, dependsOn = "operation",
+                                  byOption = @BodyType.When(option = 
"pojoRequest", value = "true",
+                                                            carriers = 
Carrier.POJO),
+                                  description = "The data to call the function 
with, for callFunction (the default),"
+                                                + " converted to text: a Map 
or a POJO is sent as its toString(), so marshal"
+                                                + " it first, and no body 
fails. The other operations take their input from"
+                                                + " options and headers. With 
pojoRequest=true the request object of the"
+                                                + " operation, such as a 
CallFunctionRequest"),
+           producerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "listFunctions",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.functions.v1.CloudFunction>"),
+                                           @BodyType.When(option = 
"operation", value = "getFunction",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.functions.v1.CloudFunction"),
+                                           @BodyType.When(option = 
"operation", value = "createFunction",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.functions.v1.CloudFunction"),
+                                           @BodyType.When(option = 
"operation", value = "updateFunction",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.functions.v1.CloudFunction"),
+                                           @BodyType.When(option = 
"operation", value = "deleteFunction",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.protobuf.Empty"),
+                                           @BodyType.When(option = 
"operation", value = "generateDownloadUrl",
+                                                          carriers = 
Carrier.TEXT, javaType = "java.lang.String"),
+                                           @BodyType.When(option = 
"operation", value = "generateUploadUrl",
+                                                          carriers = 
Carrier.TEXT, javaType = "java.lang.String") },
+                                   description = "The result of the function 
as text for callFunction, with the whole"
+                                                 + " CallFunctionResponse, 
which has the error of a failed call, in the"
+                                                 + " 
CamelGoogleCloudFunctionsResponseObject header. By the operation: a"
+                                                 + " List of CloudFunction for 
listFunctions, the CloudFunction for"
+                                                 + " getFunction, 
createFunction and updateFunction, Empty for"
+                                                 + " deleteFunction and the 
signed URL as text for the URL operations"))
 public class GoogleCloudFunctionsEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/component/google/secret/manager/google-secret-manager.json
 
b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/component/google/secret/manager/google-secret-manager.json
index 011cbeb11f4a..dd66abba9d34 100644
--- 
a/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/component/google/secret/manager/google-secret-manager.json
+++ 
b/components/camel-google/camel-google-secret-manager/src/generated/resources/META-INF/org/apache/camel/component/google/secret/manager/google-secret-manager.json
@@ -33,6 +33,10 @@
     "CamelGoogleSecretManagerSecretId": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The id of the secret", "constantName": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConstants#SECRET_ID"
 },
     "CamelGoogleSecretManagerVersionId": { "index": 2, "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", "constantName": 
"org.apache.camel.component.google.secret.manager.GoogleSecretManagerConstants#VERSION_ID"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "getSecretVersion", "carriers": 
[ "any" ] }, { "option": "operation", "value": "deleteSecret", "carriers": [ 
"any" ] }, { "option": "operation", "value": "listSecrets", "carriers": [ "any" 
] } ], "description": "The value of the secret for createSecret, the default 
operation, as text: bytes, a stream or a file are read as text, a Map or a POJO 
is stored as its toString() [...]
+    "producerOut": { "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.secretmanager.v1.SecretVersion", "byOption": [ { "option": 
"operation", "value": "getSecretVersion", "carriers": [ "text" ], "javaType": 
"java.lang.String" }, { "option": "operation", "value": "deleteSecret", 
"carriers": [ "unchanged" ] }, { "option": "operation", "value": "listSecrets", 
"carriers": [ "pojo" ] } ], "description": "The SecretVersion of the Google SDK 
that createSecret added. The value of the secret [...]
+  },
   "properties": {
     "project": { "index": 0, "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": { "index": 1, "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 acc [...]
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 cd30a79bb925..5b952e89c039 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
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
@@ -40,6 +43,30 @@ import org.apache.camel.util.ObjectHelper;
 @Metadata(annotations = {
         "vault=google-secret-manager",
 })
+@BodyTypes(producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.FILE },
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "getSecretVersion",
+                                                         carriers = 
Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "deleteSecret", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "listSecrets", carriers = Carrier.ANY) },
+                                  description = "The value of the secret for 
createSecret, the default operation, as text: bytes,"
+                                                + " a stream or a file are 
read as text, a Map or a POJO is stored as its"
+                                                + " toString(), so marshal it 
first, and no body fails. The other operations take"
+                                                + " the secret id from the 
CamelGoogleSecretManagerSecretId header. With"
+                                                + " pojoRequest=true the body 
is the request of the Google SDK for the operation,"
+                                                + " such as an 
AddSecretVersionRequest"),
+           producerOut = @BodyType(value = Carrier.POJO, javaType = 
"com.google.cloud.secretmanager.v1.SecretVersion",
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "getSecretVersion",
+                                                          carriers = 
Carrier.TEXT, javaType = "java.lang.String"),
+                                           @BodyType.When(option = 
"operation", value = "deleteSecret",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "listSecrets",
+                                                          carriers = 
Carrier.POJO) },
+                                   description = "The SecretVersion of the 
Google SDK that createSecret added. The value of the"
+                                                 + " secret as text for 
getSecretVersion: unmarshal a JSON secret to read its"
+                                                 + " fields. A 
ListSecretsPagedResponse for listSecrets, whose iterateAll() gives"
+                                                 + " the Secrets; deleteSecret 
leaves the body unchanged"))
 public class GoogleSecretManagerEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-speech-to-text/src/generated/resources/META-INF/org/apache/camel/component/google/speechtotext/google-speech-to-text.json
 
b/components/camel-google/camel-google-speech-to-text/src/generated/resources/META-INF/org/apache/camel/component/google/speechtotext/google-speech-to-text.json
index da8c71596a65..88beaa3876eb 100644
--- 
a/components/camel-google/camel-google-speech-to-text/src/generated/resources/META-INF/org/apache/camel/component/google/speechtotext/google-speech-to-text.json
+++ 
b/components/camel-google/camel-google-speech-to-text/src/generated/resources/META-INF/org/apache/camel/component/google/speechtotext/google-speech-to-text.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudSpeechToTextOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextOperations",
 "enum": [ "recognize" ], "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The operation to perform", 
"constantName": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextConstants#O
 [...]
     "CamelGoogleCloudSpeechToTextResponseObject": { "index": 1, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "com.google.cloud.speech.v1.RecognizeResponse", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The response object resulting from the Google Cloud 
Speech-to-Text API invocation", "constantName": 
"org.apache.camel.component.google.speechtotext.GoogleCloudSpeechToTextConstants#
 [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "bytes", "stream", "file" ], "byOption": [ { 
"option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.speech.v1.RecognizeRequest" } ], "description": "The audio to 
transcribe, sent inline in the encoding and sample rate of the encoding and 
sampleRateHertz options (LINEAR16 by default). A stream or a file is read into 
bytes and a String is sent as its bytes, a Map, a POJO or no body fails. With 
pojoRequest=true a Rec [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The transcript: the best alternative of each result, one line 
per result, or an empty String when nothing is recognized, also with 
pojoRequest=true. The RecognizeResponse is in the 
CamelGoogleCloudSpeechToTextResponseObject header" }
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.speechtotext.GoogleCloudSpeechToTextConfiguration",
 "configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.speechtotext.GoogleCloudSpeechToTextConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service a [...]
diff --git 
a/components/camel-google/camel-google-speech-to-text/src/main/java/org/apache/camel/component/google/speechtotext/GoogleCloudSpeechToTextEndpoint.java
 
b/components/camel-google/camel-google-speech-to-text/src/main/java/org/apache/camel/component/google/speechtotext/GoogleCloudSpeechToTextEndpoint.java
index 21a6f03c5826..e0b35c965c3c 100644
--- 
a/components/camel-google/camel-google-speech-to-text/src/main/java/org/apache/camel/component/google/speechtotext/GoogleCloudSpeechToTextEndpoint.java
+++ 
b/components/camel-google/camel-google-speech-to-text/src/main/java/org/apache/camel/component/google/speechtotext/GoogleCloudSpeechToTextEndpoint.java
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -34,6 +37,19 @@ import org.apache.camel.util.ObjectHelper;
              syntax = "google-speech-to-text:operation", category = {
                      Category.CLOUD, Category.AI },
              producerOnly = true, headersClass = 
GoogleCloudSpeechToTextConstants.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.BYTES, Carrier.STREAM, 
Carrier.FILE },
+                                  byOption = @BodyType.When(option = 
"pojoRequest", value = "true", carriers = Carrier.POJO,
+                                                            javaType = 
"com.google.cloud.speech.v1.RecognizeRequest"),
+                                  description = "The audio to transcribe, sent 
inline in the encoding and sample rate of the"
+                                                + " encoding and 
sampleRateHertz options (LINEAR16 by default). A stream or a"
+                                                + " file is read into bytes 
and a String is sent as its bytes, a Map, a POJO or"
+                                                + " no body fails. With 
pojoRequest=true a RecognizeRequest of the Google Cloud"
+                                                + " SDK: another body fails"),
+           producerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   description = "The transcript: the best 
alternative of each result, one line per result,"
+                                                 + " or an empty String when 
nothing is recognized, also with pojoRequest=true."
+                                                 + " The RecognizeResponse is 
in the"
+                                                 + " 
CamelGoogleCloudSpeechToTextResponseObject header"))
 public class GoogleCloudSpeechToTextEndpoint extends DefaultEndpoint 
implements EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-text-to-speech/src/generated/resources/META-INF/org/apache/camel/component/google/texttospeech/google-text-to-speech.json
 
b/components/camel-google/camel-google-text-to-speech/src/generated/resources/META-INF/org/apache/camel/component/google/texttospeech/google-text-to-speech.json
index 788442b9e7e1..6b7c7c2d758d 100644
--- 
a/components/camel-google/camel-google-text-to-speech/src/generated/resources/META-INF/org/apache/camel/component/google/texttospeech/google-text-to-speech.json
+++ 
b/components/camel-google/camel-google-text-to-speech/src/generated/resources/META-INF/org/apache/camel/component/google/texttospeech/google-text-to-speech.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudTextToSpeechOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSpeechOperations",
 "enum": [ "synthesize", "listVoices" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
operation to perform", "constantName": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSp [...]
     "CamelGoogleCloudTextToSpeechResponseObject": { "index": 1, "kind": 
"header", "displayName": "", "group": "producer", "label": "", "required": 
false, "javaType": "com.google.cloud.texttospeech.v1.SynthesizeSpeechResponse", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The response object resulting from the Google Cloud 
Text-to-Speech API invocation", "constantName": 
"org.apache.camel.component.google.texttospeech.GoogleCloudTextToSpe [...]
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "synthesize", "carriers": [ "text", "bytes", "stream", 
"file" ] }, { "option": "operation", "value": "listVoices", "carriers": [ "any" 
] }, { "option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], 
"javaType": "com.google.cloud.texttospeech.v1.SynthesizeSpeechRequest" } ], 
"description": "The text to speak for synthesize: bytes, a stream or a file are 
read as text, a Map or a POJO is spok [...]
+    "producerOut": { "carriers": [ "bytes", "list" ], "byOption": [ { 
"option": "operation", "value": "synthesize", "carriers": [ "bytes" ], 
"javaType": "byte[]" }, { "option": "operation", "value": "listVoices", 
"carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.texttospeech.v1.Voice>" }, { "option": 
"pojoRequest", "value": "true", "carriers": [ "bytes" ], "javaType": "byte[]" } 
], "description": "The audio of synthesize as bytes, in the audioEncoding 
option (MP3 by de [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.texttospeech.GoogleCloudTextToSpeechConfiguration",
 "configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.texttospeech.GoogleCloudTextToSpeechConfiguration",
 "configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service a [...]
diff --git 
a/components/camel-google/camel-google-text-to-speech/src/main/java/org/apache/camel/component/google/texttospeech/GoogleCloudTextToSpeechEndpoint.java
 
b/components/camel-google/camel-google-text-to-speech/src/main/java/org/apache/camel/component/google/texttospeech/GoogleCloudTextToSpeechEndpoint.java
index 861be3ffca33..d97c942a3b12 100644
--- 
a/components/camel-google/camel-google-text-to-speech/src/main/java/org/apache/camel/component/google/texttospeech/GoogleCloudTextToSpeechEndpoint.java
+++ 
b/components/camel-google/camel-google-text-to-speech/src/main/java/org/apache/camel/component/google/texttospeech/GoogleCloudTextToSpeechEndpoint.java
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -34,6 +37,31 @@ import org.apache.camel.util.ObjectHelper;
              syntax = "google-text-to-speech:operation", category = {
                      Category.CLOUD, Category.AI },
              producerOnly = true, headersClass = 
GoogleCloudTextToSpeechConstants.class)
+@BodyTypes(producerIn = @BodyType(value = Carrier.ANY,
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "synthesize",
+                                                         carriers = {
+                                                                 Carrier.TEXT, 
Carrier.BYTES, Carrier.STREAM, Carrier.FILE }),
+                                          @BodyType.When(option = "operation", 
value = "listVoices", carriers = Carrier.ANY),
+                                          @BodyType.When(option = 
"pojoRequest", value = "true", carriers = Carrier.POJO,
+                                                         javaType = 
"com.google.cloud.texttospeech.v1.SynthesizeSpeechRequest") },
+                                  description = "The text to speak for 
synthesize: bytes, a stream or a file are read as"
+                                                + " text, a Map or a POJO is 
spoken as its toString(), so take the text out of"
+                                                + " it first, and no body 
fails. listVoices does not use the body. With"
+                                                + " pojoRequest=true a 
SynthesizeSpeechRequest of the Google Cloud SDK, whatever"
+                                                + " the operation: another 
body fails"),
+           producerOut = @BodyType(value = { Carrier.BYTES, Carrier.LIST },
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "synthesize", carriers = Carrier.BYTES,
+                                                          javaType = "byte[]"),
+                                           @BodyType.When(option = 
"operation", value = "listVoices", carriers = Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.texttospeech.v1.Voice>"),
+                                           @BodyType.When(option = 
"pojoRequest", value = "true", carriers = Carrier.BYTES,
+                                                          javaType = "byte[]") 
},
+                                   description = "The audio of synthesize as 
bytes, in the audioEncoding option (MP3 by"
+                                                 + " default), with the 
SynthesizeSpeechResponse in the"
+                                                 + " 
CamelGoogleCloudTextToSpeechResponseObject header. The List of the voices"
+                                                 + " for listVoices, of the 
languageCode option (en-US by default)"))
 public class GoogleCloudTextToSpeechEndpoint extends DefaultEndpoint 
implements EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-google/camel-google-vertexai/src/generated/resources/META-INF/org/apache/camel/component/google/vertexai/google-vertexai.json
 
b/components/camel-google/camel-google-vertexai/src/generated/resources/META-INF/org/apache/camel/component/google/vertexai/google-vertexai.json
index 88378fbf4f7a..947bfc7fd6b5 100644
--- 
a/components/camel-google/camel-google-vertexai/src/generated/resources/META-INF/org/apache/camel/component/google/vertexai/google-vertexai.json
+++ 
b/components/camel-google/camel-google-vertexai/src/generated/resources/META-INF/org/apache/camel/component/google/vertexai/google-vertexai.json
@@ -77,6 +77,10 @@
     "CamelGoogleVertexAIRawResponse": { "index": 30, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The raw JSON response from rawPredict 
operation", "constantName": 
"org.apache.camel.component.google.vertexai.GoogleVertexAIConstants#RAW_RESPONSE"
 },
     "CamelGoogleVertexAIAnthropicVersion": { "index": 31, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Anthropic API version for Claude 
models", "constantName": 
"org.apache.camel.component.google.vertexai.GoogleVertexAIConstants#ANTHROPIC_VERSION"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "generateEmbeddings", 
"carriers": [ "text", "bytes", "stream", "file", "list" ] }, { "option": 
"operation", "value": "generateMultimodal", "carriers": [ "text", "bytes" ] }, 
{ "option": "operation", "value": "rawPredict", "carriers": [ "text", "map" ] 
}, { "option": "operation", "value": "streamRawPredict", "carriers": [ "text", 
"map" ] } ], "description": "The prompt fo [...]
+    "producerOut": { "carriers": [ "text" ], "byOption": [ { "option": 
"streamOutputMode", "value": "chunks", "carriers": [ "list" ], "javaType": 
"java.util.List<String>" }, { "option": "operation", "value": "generateImage", 
"carriers": [ "list" ], "javaType": 
"java.util.List<com.google.genai.types.Image>" }, { "option": "operation", 
"value": "generateEmbeddings", "carriers": [ "list" ], "javaType": 
"java.util.List<java.util.List<Float>>" } ], "description": "The text the model 
answers f [...]
+  },
   "properties": {
     "projectId": { "index": 0, "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.vertexai.GoogleVertexAIConfiguration", 
"configurationField": "configuration", "description": "Google Cloud Project ID" 
},
     "location": { "index": 1, "kind": "path", "displayName": "Location", 
"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.vertexai.GoogleVertexAIConfiguration", 
"configurationField": "configuration", "description": "Google Cloud 
location\/region (e.g., us-central1)" },
diff --git 
a/components/camel-google/camel-google-vertexai/src/main/java/org/apache/camel/component/google/vertexai/GoogleVertexAIEndpoint.java
 
b/components/camel-google/camel-google-vertexai/src/main/java/org/apache/camel/component/google/vertexai/GoogleVertexAIEndpoint.java
index 2ecff75bd7c5..be31a47c201d 100644
--- 
a/components/camel-google/camel-google-vertexai/src/main/java/org/apache/camel/component/google/vertexai/GoogleVertexAIEndpoint.java
+++ 
b/components/camel-google/camel-google-vertexai/src/main/java/org/apache/camel/component/google/vertexai/GoogleVertexAIEndpoint.java
@@ -24,6 +24,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -42,6 +45,47 @@ import org.slf4j.LoggerFactory;
              syntax = "google-vertexai:projectId:location:modelId",
              category = { Category.AI, Category.CLOUD }, headersClass = 
GoogleVertexAIConstants.class,
              producerOnly = true)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.FILE },
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "generateEmbeddings",
+                                                         carriers = {
+                                                                 Carrier.TEXT, 
Carrier.BYTES, Carrier.STREAM, Carrier.FILE,
+                                                                 Carrier.LIST 
}),
+                                          @BodyType.When(option = "operation", 
value = "generateMultimodal",
+                                                         carriers = { 
Carrier.TEXT, Carrier.BYTES }),
+                                          @BodyType.When(option = "operation", 
value = "rawPredict",
+                                                         carriers = { 
Carrier.TEXT, Carrier.MAP }),
+                                          @BodyType.When(option = "operation", 
value = "streamRawPredict",
+                                                         carriers = { 
Carrier.TEXT, Carrier.MAP }) },
+                                  description = "The prompt for generateText, 
the default, and the other generate operations,"
+                                                + " unless the 
CamelGoogleVertexAIPrompt header has it: bytes, a stream or a"
+                                                + " file are read as text, a 
Map or a POJO is sent as its toString(), and no"
+                                                + " body fails. 
generateEmbeddings also takes a List of texts. generateMultimodal"
+                                                + " takes the text, or the 
bytes of an image with the"
+                                                + " 
CamelGoogleVertexAIMediaMimeType header, only when the"
+                                                + " 
CamelGoogleVertexAIMediaData and CamelGoogleVertexAIMediaGcsUri headers are"
+                                                + " not set: a stream or a 
file is not used. rawPredict and streamRawPredict take"
+                                                + " the JSON request as a 
String or a Map, or a plain text prompt: bytes, a"
+                                                + " stream or a file fail, so 
convert them to a String first"),
+           producerOut = @BodyType(value = Carrier.TEXT,
+                                   byOption = {
+                                           @BodyType.When(option = 
"streamOutputMode", value = "chunks",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<String>"),
+                                           @BodyType.When(option = 
"operation", value = "generateImage",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.genai.types.Image>"),
+                                           @BodyType.When(option = 
"operation", value = "generateEmbeddings",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<java.util.List<Float>>") },
+                                   description = "The text the model answers 
for generateText, the default, and the other"
+                                                 + " generate operations, JSON 
with jsonMode=true, with the token counts and the"
+                                                 + " finish reason in headers. 
generateChatStreaming joins the chunks, or gives"
+                                                 + " the List of them with 
streamOutputMode=chunks. The List of the generated"
+                                                 + " images for generateImage, 
and one vector of Floats per input text for"
+                                                 + " generateEmbeddings. 
rawPredict and streamRawPredict give the JSON the model"
+                                                 + " answers, or for publisher 
anthropic the text of Claude with the JSON in the"
+                                                 + " 
CamelGoogleVertexAIRawResponse header"))
 public class GoogleVertexAIEndpoint extends ScheduledPollEndpoint implements 
EndpointServiceLocation {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(GoogleVertexAIEndpoint.class);
diff --git 
a/components/camel-google/camel-google-vision/src/generated/resources/META-INF/org/apache/camel/component/google/vision/google-vision.json
 
b/components/camel-google/camel-google-vision/src/generated/resources/META-INF/org/apache/camel/component/google/vision/google-vision.json
index 128cd7f08be5..f9ab7f6eeebe 100644
--- 
a/components/camel-google/camel-google-vision/src/generated/resources/META-INF/org/apache/camel/component/google/vision/google-vision.json
+++ 
b/components/camel-google/camel-google-vision/src/generated/resources/META-INF/org/apache/camel/component/google/vision/google-vision.json
@@ -31,6 +31,10 @@
     "CamelGoogleCloudVisionOperation": { "index": 0, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": 
"org.apache.camel.component.google.vision.GoogleCloudVisionOperations", "enum": 
[ "labelDetection", "textDetection", "faceDetection", "landmarkDetection", 
"logoDetection", "safeSearchDetection", "imagePropertiesDetection", 
"webDetection", "objectLocalization", "cropHintsDetection", 
"documentTextDetection" ], "deprecated": false, "depre [...]
     "CamelGoogleCloudVisionResponseObject": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "", "required": false, 
"javaType": "com.google.cloud.vision.v1.AnnotateImageResponse", "deprecated": 
false, "deprecationNote": "", "autowired": false, "secret": false, 
"description": "The response object resulting from the Google Cloud Vision API 
invocation", "constantName": 
"org.apache.camel.component.google.vision.GoogleCloudVisionConstants#RESPONSE_OBJECT"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "bytes", "stream", "file" ], "byOption": [ { 
"option": "pojoRequest", "value": "true", "carriers": [ "pojo" ], "javaType": 
"com.google.cloud.vision.v1.AnnotateImageRequest" } ], "description": "The 
image to annotate, sent inline. A stream or a file is read into bytes and a 
String is sent as its bytes, a Map, a POJO or no body fails. With 
pojoRequest=true an AnnotateImageRequest of the Google Cloud SDK: another body 
fails" },
+    "producerOut": { "carriers": [ "list", "pojo" ], "byOption": [ { "option": 
"operation", "value": "labelDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>" }, { "option": 
"operation", "value": "textDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>" }, { "option": 
"operation", "value": "faceDetection", "carriers": [ "list" ], "javaType": 
"java.util.List<com.google.cloud. [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"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.vision.GoogleCloudVisionConfiguration", 
"configurationField": "configuration", "description": "The operation name" },
     "serviceAccountKey": { "index": 1, "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.vision.GoogleCloudVisionConfiguration", 
"configurationField": "configuration", "description": "Service account key to 
authenticate an application as a service account" },
diff --git 
a/components/camel-google/camel-google-vision/src/main/java/org/apache/camel/component/google/vision/GoogleCloudVisionEndpoint.java
 
b/components/camel-google/camel-google-vision/src/main/java/org/apache/camel/component/google/vision/GoogleCloudVisionEndpoint.java
index d1639ade92dd..2374af3911a8 100644
--- 
a/components/camel-google/camel-google-vision/src/main/java/org/apache/camel/component/google/vision/GoogleCloudVisionEndpoint.java
+++ 
b/components/camel-google/camel-google-vision/src/main/java/org/apache/camel/component/google/vision/GoogleCloudVisionEndpoint.java
@@ -21,6 +21,9 @@ import org.apache.camel.Category;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.EndpointServiceLocation;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -34,6 +37,55 @@ import org.apache.camel.util.ObjectHelper;
              syntax = "google-vision:operation", category = {
                      Category.CLOUD, Category.AI },
              producerOnly = true, headersClass = 
GoogleCloudVisionConstants.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.BYTES, Carrier.STREAM, 
Carrier.FILE },
+                                  byOption = @BodyType.When(option = 
"pojoRequest", value = "true", carriers = Carrier.POJO,
+                                                            javaType = 
"com.google.cloud.vision.v1.AnnotateImageRequest"),
+                                  description = "The image to annotate, sent 
inline. A stream or a file is read into bytes"
+                                                + " and a String is sent as 
its bytes, a Map, a POJO or no body fails. With"
+                                                + " pojoRequest=true an 
AnnotateImageRequest of the Google Cloud SDK: another"
+                                                + " body fails"),
+           producerOut = @BodyType(value = { Carrier.LIST, Carrier.POJO },
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "labelDetection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "textDetection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "faceDetection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.FaceAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "landmarkDetection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "logoDetection",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.EntityAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "objectLocalization",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<com.google.cloud.vision.v1.LocalizedObjectAnnotation>"),
+                                           @BodyType.When(option = 
"operation", value = "safeSearchDetection",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.SafeSearchAnnotation"),
+                                           @BodyType.When(option = 
"operation", value = "imagePropertiesDetection",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.ImageProperties"),
+                                           @BodyType.When(option = 
"operation", value = "webDetection", carriers = Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.WebDetection"),
+                                           @BodyType.When(option = 
"operation", value = "cropHintsDetection",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.CropHintsAnnotation"),
+                                           @BodyType.When(option = 
"operation", value = "documentTextDetection",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.TextAnnotation"),
+                                           @BodyType.When(option = 
"pojoRequest", value = "true", carriers = Carrier.POJO,
+                                                          javaType = 
"com.google.cloud.vision.v1.AnnotateImageResponse") },
+                                   description = "The annotations of the 
operation: a List of them for the detections that"
+                                                 + " find several things, such 
as labelDetection, and one annotation of the"
+                                                 + " Google Cloud SDK for the 
others, such as the SafeSearchAnnotation of"
+                                                 + " safeSearchDetection. The 
whole AnnotateImageResponse is in the"
+                                                 + " 
CamelGoogleCloudVisionResponseObject header, and is the body with"
+                                                 + " pojoRequest=true"))
 public class GoogleCloudVisionEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/component/hashicorp/vault/hashicorp-vault.json
 
b/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/component/hashicorp/vault/hashicorp-vault.json
index ced6bc67d8e1..e07af73a135e 100644
--- 
a/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/component/hashicorp/vault/hashicorp-vault.json
+++ 
b/components/camel-hashicorp-vault/src/generated/resources/META-INF/org/apache/camel/component/hashicorp/vault/hashicorp-vault.json
@@ -33,6 +33,10 @@
     "CamelHashicorpVaultSecretPath": { "index": 1, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the desired secret path as 
header.", "constantName": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConstants#SECRET_PATH"
 },
     "CamelHashicorpVaultSecretVersion": { "index": 2, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the desired secret version as 
header.", "constantName": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConstants#SECRET_VERSION"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "map", "pojo" ], "byOption": [ { "option": 
"operation", "value": "getSecret", "carriers": [ "any" ] }, { "option": 
"operation", "value": "deleteSecret", "carriers": [ "any" ] }, { "option": 
"operation", "value": "listSecrets", "carriers": [ "any" ] } ], "description": 
"The fields of the secret for createSecret, the default operation: a Map of the 
keys and values, or a POJO written as JSON. Text, bytes, a stream, a file or a 
List fail, so unmarshal JSON f [...]
+    "producerOut": { "carriers": [ "unchanged" ], "byOption": [ { "option": 
"operation", "value": "getSecret", "carriers": [ "map", "null" ] }, { "option": 
"operation", "value": "listSecrets", "carriers": [ "list" ], "javaType": 
"java.util.List<java.lang.String>" } ], "description": "getSecret gives a Map 
with the fields of the secret under data and its version under metadata, or no 
body when the secret does not exist or is deleted. listSecrets gives a List of 
the names of the secrets in [...]
+  },
   "properties": {
     "secretsEngine": { "index": 0, "kind": "path", "displayName": "Secrets 
Engine", "group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConfiguration", 
"configurationField": "configuration", "description": "Vault Name to be used" },
     "cloud": { "index": 1, "kind": "parameter", "displayName": "Cloud", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.hashicorp.vault.HashicorpVaultConfiguration", 
"configurationField": "configuration", "description": "Determine if the 
Hashicorp Vault is deployed on Hashicorp Cloud or not" },
diff --git 
a/components/camel-hashicorp-vault/src/main/docs/hashicorp-vault-component.adoc 
b/components/camel-hashicorp-vault/src/main/docs/hashicorp-vault-component.adoc
index 845a2c662568..98721af5462b 100644
--- 
a/components/camel-hashicorp-vault/src/main/docs/hashicorp-vault-component.adoc
+++ 
b/components/camel-hashicorp-vault/src/main/docs/hashicorp-vault-component.adoc
@@ -103,7 +103,8 @@ YAML::
 
 ==== Getting a secret
 
-The message body becomes the data of the secret; the 
`CamelHashicorpVaultSecretVersion` header reads a given
+The message body becomes a Map with the fields of the secret under `data` and 
its version details under
+`metadata`, or no body when the secret does not exist; the 
`CamelHashicorpVaultSecretVersion` header reads a given
 version instead of the latest:
 
 [tabs]
diff --git 
a/components/camel-hashicorp-vault/src/main/java/org/apache/camel/component/hashicorp/vault/HashicorpVaultEndpoint.java
 
b/components/camel-hashicorp-vault/src/main/java/org/apache/camel/component/hashicorp/vault/HashicorpVaultEndpoint.java
index ce7739bac116..bcdb20601729 100644
--- 
a/components/camel-hashicorp-vault/src/main/java/org/apache/camel/component/hashicorp/vault/HashicorpVaultEndpoint.java
+++ 
b/components/camel-hashicorp-vault/src/main/java/org/apache/camel/component/hashicorp/vault/HashicorpVaultEndpoint.java
@@ -21,6 +21,9 @@ import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -40,6 +43,27 @@ import org.springframework.vault.core.VaultTemplate;
 @Metadata(annotations = {
         "vault=hashicorp-vault",
 })
+@BodyTypes(producerIn = @BodyType(value = { Carrier.MAP, Carrier.POJO },
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "getSecret", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "deleteSecret", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "listSecrets", carriers = Carrier.ANY) },
+                                  description = "The fields of the secret for 
createSecret, the default operation: a Map of the"
+                                                + " keys and values, or a POJO 
written as JSON. Text, bytes, a stream, a file or a"
+                                                + " List fail, so unmarshal 
JSON first, and no body writes an empty version. The"
+                                                + " other operations take the 
secret from the secretPath option or the"
+                                                + " 
CamelHashicorpVaultSecretPath header"),
+           producerOut = @BodyType(value = Carrier.UNCHANGED,
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "getSecret",
+                                                          carriers = { 
Carrier.MAP, Carrier.NULL }),
+                                           @BodyType.When(option = 
"operation", value = "listSecrets",
+                                                          carriers = 
Carrier.LIST,
+                                                          javaType = 
"java.util.List<java.lang.String>") },
+                                   description = "getSecret gives a Map with 
the fields of the secret under data and its version"
+                                                 + " under metadata, or no 
body when the secret does not exist or is deleted."
+                                                 + " listSecrets gives a List 
of the names of the secrets in the engine;"
+                                                 + " createSecret and 
deleteSecret leave the body unchanged"))
 public class HashicorpVaultEndpoint extends DefaultEndpoint {
 
     private VaultTemplate vaultTemplate;
diff --git 
a/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/ibm/secrets/manager/ibm-secrets-manager.json
 
b/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/ibm/secrets/manager/ibm-secrets-manager.json
index 60e1d1c3b75d..fa2ea7fd7a2c 100644
--- 
a/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/ibm/secrets/manager/ibm-secrets-manager.json
+++ 
b/components/camel-ibm/camel-ibm-secrets-manager/src/generated/resources/META-INF/org/apache/camel/component/ibm/secrets/manager/ibm-secrets-manager.json
@@ -35,6 +35,10 @@
     "CamelIbmSecretsManagerSecretPayload": { "index": 4, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Set the secret payload for update 
operation.", "constantName": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConstants#SECRET_PAYLOAD"
 },
     "CamelIbmSecretsManagerSecretData": { "index": 5, "kind": "header", 
"displayName": "", "group": "producer", "label": "producer", "required": false, 
"javaType": "java.util.Map", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "Set the secret data (Map) 
for KV secret update operation.", "constantName": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConstants#SECRET_DATA"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"byOption": [ { "option": "operation", "value": "createKVSecret", "carriers": [ 
"map" ] }, { "option": "operation", "value": "updateSecret", "carriers": [ 
"text", "bytes", "stream", "file", "map" ] }, { "option": "operation", "value": 
"getSecret", "carriers": [ "any" ] }, { "option": "operation", "value": 
"deleteSecret", "carriers": [ "any" ] }, { "option": "operation", "value": 
"listSecrets", "carriers": [ "any" ] }, [...]
+    "producerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"byOption": [ { "option": "operation", "value": "getSecret", "carriers": [ 
"text", "map", "pojo" ] }, { "option": "operation", "value": "deleteSecret", 
"carriers": [ "unchanged" ] }, { "option": "operation", "value": "listSecrets", 
"carriers": [ "pojo" ], "javaType": 
"com.ibm.cloud.secrets_manager_sdk.secrets_manager.v2.model.SecretMetadataPaginatedCollection"
 }, { "option": "operation", "value": "updateSecret", [...]
+  },
   "properties": {
     "label": { "index": 0, "kind": "path", "displayName": "Label", "group": 
"producer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerConfiguration",
 "configurationField": "configuration", "description": "Logical name" },
     "operation": { "index": 1, "kind": "parameter", "displayName": 
"Operation", "group": "producer", "label": "producer", "required": false, 
"type": "enum", "javaType": 
"org.apache.camel.component.ibm.secrets.manager.IBMSecretsManagerOperation", 
"enum": [ "createArbitrarySecret", "createKVSecret", "getSecret", 
"deleteSecret", "listSecrets", "updateSecret", "listSecretVersions" ], 
"deprecated": false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.i [...]
diff --git 
a/components/camel-ibm/camel-ibm-secrets-manager/src/main/java/org/apache/camel/component/ibm/secrets/manager/IBMSecretsManagerEndpoint.java
 
b/components/camel-ibm/camel-ibm-secrets-manager/src/main/java/org/apache/camel/component/ibm/secrets/manager/IBMSecretsManagerEndpoint.java
index 05346b983c69..fbaada0b20a0 100644
--- 
a/components/camel-ibm/camel-ibm-secrets-manager/src/main/java/org/apache/camel/component/ibm/secrets/manager/IBMSecretsManagerEndpoint.java
+++ 
b/components/camel-ibm/camel-ibm-secrets-manager/src/main/java/org/apache/camel/component/ibm/secrets/manager/IBMSecretsManagerEndpoint.java
@@ -23,6 +23,9 @@ import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.spi.BodyType;
+import org.apache.camel.spi.BodyType.Carrier;
+import org.apache.camel.spi.BodyTypes;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.support.DefaultEndpoint;
@@ -35,6 +38,46 @@ import org.apache.camel.support.DefaultEndpoint;
                      Category.CLOUD, Category.CLOUD },
              producerOnly = true,
              headersClass = IBMSecretsManagerConstants.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.FILE },
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "createKVSecret",
+                                                         carriers = 
Carrier.MAP),
+                                          @BodyType.When(option = "operation", 
value = "updateSecret",
+                                                         carriers = {
+                                                                 Carrier.TEXT, 
Carrier.BYTES, Carrier.STREAM, Carrier.FILE,
+                                                                 Carrier.MAP 
}),
+                                          @BodyType.When(option = "operation", 
value = "getSecret", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "deleteSecret", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "listSecrets", carriers = Carrier.ANY),
+                                          @BodyType.When(option = "operation", 
value = "listSecretVersions",
+                                                         carriers = 
Carrier.ANY) },
+                                  description = "The payload of the secret for 
createArbitrarySecret, the default operation, as"
+                                                + " text: bytes, a stream or a 
file are read as text, a Map or a POJO is stored as"
+                                                + " its toString(), and no 
body fails. createKVSecret needs a Map of the keys and"
+                                                + " values: a JSON text fails, 
so unmarshal it first. updateSecret takes text for"
+                                                + " an arbitrary secret and a 
Map for a kv secret, unless the"
+                                                + " 
CamelIbmSecretsManagerSecretPayload or CamelIbmSecretsManagerSecretData header"
+                                                + " is set. The other 
operations take the secret id from a header"),
+           producerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "getSecret",
+                                                          carriers = { 
Carrier.TEXT, Carrier.MAP, Carrier.POJO }),
+                                           @BodyType.When(option = 
"operation", value = "deleteSecret",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "listSecrets",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.ibm.cloud.secrets_manager_sdk.secrets_manager.v2.model.SecretMetadataPaginatedCollection"),
+                                           @BodyType.When(option = 
"operation", value = "updateSecret",
+                                                          carriers = 
Carrier.POJO),
+                                           @BodyType.When(option = 
"operation", value = "listSecretVersions",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.ibm.cloud.secrets_manager_sdk.secrets_manager.v2.model.SecretVersionMetadataCollection")
 },
+                                   description = "The id of the new secret for 
createArbitrarySecret and createKVSecret. getSecret"
+                                                 + " gives the payload text of 
an arbitrary secret, the Map of a kv secret, or the"
+                                                 + " Secret of the IBM SDK for 
service credentials, and fails for other secret"
+                                                 + " types. updateSecret gives 
the SecretVersion of the IBM SDK, the list"
+                                                 + " operations the collection 
of the IBM SDK, and deleteSecret leaves the body"
+                                                 + " unchanged"))
 public class IBMSecretsManagerEndpoint extends DefaultEndpoint {
 
     private SecretsManager secretManager;

Reply via email to