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 f25a1073f49e2135a9b1b6c422c30bd082437e64
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Oct 24 19:57:08 2026 +0200

    CAMEL-24961: Catalog body types for docker, git, jmx, shell, lpr, 
zookeeper, master and three more ops components (#28414)
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../apache/camel/catalog/components/docker.json    |   5 +
 .../org/apache/camel/catalog/components/git.json   |   5 +
 .../org/apache/camel/catalog/components/jmx.json   |   3 +
 .../org/apache/camel/catalog/components/lpr.json   |   4 +
 .../apache/camel/catalog/components/master.json    |   3 +
 .../apache/camel/catalog/components/metrics.json   |   4 +
 .../catalog/components/opentelemetry-metrics.json  |   4 +
 .../org/apache/camel/catalog/components/shell.json |   4 +
 .../camel/catalog/components/zookeeper-master.json |   3 +
 .../apache/camel/catalog/components/zookeeper.json |   5 +
 .../org/apache/camel/component/docker/docker.json  |   5 +
 .../camel/component/docker/DockerEndpoint.java     | 106 +++++++++++++++++++++
 .../org/apache/camel/component/git/git.json        |   5 +
 .../apache/camel/component/git/GitEndpoint.java    |  59 ++++++++++++
 .../org/apache/camel/component/jmx/jmx.json        |   3 +
 .../apache/camel/component/jmx/JMXEndpoint.java    |   9 ++
 .../org/apache/camel/component/master/master.json  |   3 +
 .../camel/component/master/MasterEndpoint.java     |   7 ++
 .../apache/camel/component/metrics/metrics.json    |   4 +
 .../camel/component/metrics/MetricsEndpoint.java   |   7 ++
 .../metrics/opentelemetry-metrics.json             |   4 +
 .../metrics/OpenTelemetryEndpoint.java             |   8 ++
 .../org/apache/camel/component/printer/lpr.json    |   4 +
 .../camel/component/printer/PrinterEndpoint.java   |   8 ++
 .../org/apache/camel/component/shell/shell.json    |   4 +
 .../camel/component/shell/ShellEndpoint.java       |  11 +++
 .../zookeepermaster/zookeeper-master.json          |   3 +
 .../component/zookeepermaster/MasterEndpoint.java  |   7 ++
 .../camel/component/zookeeper/zookeeper.json       |   5 +
 .../component/zookeeper/ZooKeeperEndpoint.java     |  21 ++++
 30 files changed, 323 insertions(+)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docker.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docker.json
index 77b8e34a9b2f..1c820359545b 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docker.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/docker.json
@@ -130,6 +130,11 @@
     "CamelDockerDetach": { "index": 80, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "Boolean", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "With detach flag", "constantName": 
"org.apache.camel.component.docker.DockerConstants#DOCKER_DETACH" },
     "CamelDockerExecId": { "index": 81, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Exec ID", "constantName": 
"org.apache.camel.component.docker.DockerConstants#DOCKER_EXEC_ID" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operation", "value": "events", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Event" }, { "option": "operation", "value": 
"stats", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Statistics" } ], "description": "The object of 
docker-java for each item of the stream: an Event of the daemon with events, 
the Statistics of the container in CamelDockerContainerId with stats" },
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "imagecreate", "carriers": [ "stream", "bytes", "text", 
"file" ] }, { "option": "operation", "value": "imagebuild", "carriers": [ 
"stream", "file" ] } ], "description": "Not used by most operations, which take 
their input from the options and headers, such as the container in 
CamelDockerContainerId. imagecreate reads the image as a stream; imagebuild 
needs an InputStream or a java.io.File of the bu [...]
+    "producerOut": { "carriers": [ "pojo", "list", "text", "stream", "null", 
"unchanged" ], "byOption": [ { "option": "operation", "value": "auth", 
"carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.AuthResponse" }, { "option": "operation", 
"value": "info", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Info" }, { "option": "operation", "value": 
"ping", "carriers": [ "unchanged" ] }, { "option": "operation", "value": 
"version", "carriers": [ "pojo" [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "common", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.component.docker.DockerOperation", "enum": [ "events", 
"stats", "auth", "info", "ping", "version", "imagebuild", "imagecreate", 
"imageinspect", "imagelist", "imagepull", "imagepush", "imageremove", 
"imagesearch", "imagetag", "containerattach", "containercommit", 
"containercopyfile", "containercreate", "containerdiff", " [...]
     "email": { "index": 1, "kind": "parameter", "displayName": "Email", 
"group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.docker.DockerConfiguration", "configurationField": 
"configuration", "description": "Email address associated with the user" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
index 518bc72d4f30..00797cf2da4d 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/git.json
@@ -45,6 +45,11 @@
     "CamelGitBranchLeaf": { "index": 11, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The leaf", "constantName": 
"org.apache.camel.component.git.GitConstants#GIT_BRANCH_LEAF" },
     "CamelGitBranchObjectId": { "index": 12, "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The object id", "constantName": 
"org.apache.camel.component.git.GitConstants#GIT_BRANCH_OBJECT_ID" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The full message of the commit with type=commit, the name of 
the ref, such as refs\/heads\/main or refs\/tags\/v1, with type=branch and tag. 
The commit id, author, committer and time, or the object id of the ref, are in 
headers" },
+    "producerIn": { "carriers": [ "any" ], "description": "Not used: the 
operations take their input from the options and headers, such as the file in 
CamelGitFilename and the message in CamelGitCommitMessage" },
+    "producerOut": { "carriers": [ "unchanged", "pojo", "list", "iterator", 
"map" ], "byOption": [ { "option": "operation", "value": "status", "carriers": 
[ "pojo" ], "javaType": "org.eclipse.jgit.api.Status" }, { "option": 
"operation", "value": "log", "carriers": [ "iterator" ], "javaType": 
"org.eclipse.jgit.revwalk.RevWalk" }, { "option": "operation", "value": "push", 
"carriers": [ "list" ] }, { "option": "operation", "value": "pushTag", 
"carriers": [ "list" ] }, { "option": "operation [...]
+  },
   "properties": {
     "localPath": { "index": 0, "kind": "path", "displayName": "Local Path", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Local repository path" },
     "branchName": { "index": 1, "kind": "parameter", "displayName": "Branch 
Name", "group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The branch name to work on" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jmx.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jmx.json
index f7ceacbb6d00..92d8d788c001 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jmx.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jmx.json
@@ -30,6 +30,9 @@
   "headers": {
     "jmx.handback": { "index": 0, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"Object", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The handback.", "constantName": 
"org.apache.camel.component.jmx.JMXConstants#JMX_HANDBACK" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"format": "xml", "byOption": [ { "option": "format", "value": "raw", 
"carriers": [ "pojo" ], "javaType": "javax.management.Notification" } ], 
"description": "The notification as XML text, such as an 
AttributeChangeNotification or a MonitorNotification element; with format=raw 
the Notification object. The handback object is in the jmx.handback header" }
+  },
   "properties": {
     "serverURL": { "index": 0, "kind": "path", "displayName": "Server URL", 
"group": "consumer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Server url comes from the remaining endpoint. 
Use platform to connect to local JVM." },
     "format": { "index": 1, "kind": "parameter", "displayName": "Format", 
"group": "consumer", "label": "", "required": false, "type": "enum", 
"javaType": "java.lang.String", "enum": [ "xml", "raw" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "xml", "description": 
"Format for the message body. Either xml or raw. If xml, the notification is 
serialized to xml. If raw, then the raw java object is set as the body." },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/lpr.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/lpr.json
index fb174295943b..6c8879855c81 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/lpr.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/lpr.json
@@ -30,6 +30,10 @@
   "headers": {
     "PrinterJobName": { "index": 0, "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The name of the job", "constantName": 
"org.apache.camel.component.printer.PrinterEndpoint#JOB_NAME" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"description": "The document to print, read as a stream: text, bytes, a stream 
or a file, in the format of the mimeType and flavor options. A Map, a POJO, a 
number or no body is not converted: the print job gets no data" },
+    "producerOut": { "carriers": [ "unchanged" ] }
+  },
   "properties": {
     "hostname": { "index": 0, "kind": "path", "displayName": "Hostname", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.printer.PrinterConfiguration", 
"configurationField": "config", "description": "Hostname of the printer" },
     "port": { "index": 1, "kind": "path", "displayName": "Port", "group": 
"producer", "label": "", "required": false, "type": "integer", "javaType": 
"int", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.printer.PrinterConfiguration", 
"configurationField": "config", "description": "Port number of the printer" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/master.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/master.json
index 7449a926a169..a42453756774 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/master.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/master.json
@@ -31,6 +31,9 @@
     "service": { "index": 4, "kind": "property", "displayName": "Service", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.cluster.CamelClusterService", "deprecated": 
false, "autowired": false, "secret": false, "description": "Inject the service 
to use." },
     "serviceSelector": { "index": 5, "kind": "property", "displayName": 
"Service Selector", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.cluster.CamelClusterService.Selector", "deprecated": false, 
"autowired": false, "secret": false, "description": "Inject the service 
selector used to lookup the CamelClusterService to use." }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "unknown" ], "description": "The body the 
consumer of the delegate endpoint (delegateUri) makes, such as the file of a 
file consumer: only the node that holds the leadership of the namespace in the 
cluster service runs it" }
+  },
   "properties": {
     "namespace": { "index": 0, "kind": "path", "displayName": "Namespace", 
"group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The name of the cluster 
namespace to use" },
     "delegateUri": { "index": 1, "kind": "path", "displayName": "Delegate 
Uri", "group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The endpoint uri to use in 
master\/slave mode" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/metrics.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/metrics.json
index ce452f5c2e2e..fc8969072b83 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/metrics.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/metrics.json
@@ -38,6 +38,10 @@
     "CamelMetricsGaugeSubject": { "index": 5, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Object", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override subject value in URI", "constantName": 
"org.apache.camel.component.metrics.MetricsConstants#HEADER_GAUGE_SUBJECT" },
     "CamelMetricsName": { "index": 6, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override name value in URI", "constantName": 
"org.apache.camel.component.metrics.MetricsConstants#HEADER_METRIC_NAME" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "Not used: the 
values come from the options or the CamelMetrics headers, such as 
CamelMetricsCounterIncrement or CamelMetricsGaugeSubject" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "Unchanged; 
the CamelMetrics headers are removed" }
+  },
   "properties": {
     "metricsType": { "index": 0, "kind": "path", "displayName": "Metrics 
Type", "group": "producer", "label": "", "required": true, "type": "enum", 
"javaType": "org.apache.camel.component.metrics.MetricsType", "enum": [ 
"gauge", "counter", "histogram", "meter", "timer" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Type of metrics" },
     "metricsName": { "index": 1, "kind": "path", "displayName": "Metrics 
Name", "group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "Name of metrics" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opentelemetry-metrics.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opentelemetry-metrics.json
index 3cf7ea2565b0..3ae287b7bcfc 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opentelemetry-metrics.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/opentelemetry-metrics.json
@@ -37,6 +37,10 @@
     "CamelMetricsDescription": { "index": 5, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override description value in URI", "constantName": 
"org.apache.camel.opentelemetry.metrics.OpenTelemetryConstants#HEADER_METRIC_DESCRIPTION"
 },
     "CamelMetricsAttributes": { "index": 6, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": 
"io.opentelemetry.api.common.Attributes", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "To 
augment meter attributes defined as URI parameters", "constantName": 
"org.apache.camel.opentelemetry.metrics.OpenTelemetryConstants#HEADER_METRIC_ATTRIBUTES"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "Not used, unless an 
option such as increment, decrement or value is a simple expression that reads 
it, which must then give a number. The CamelMetrics headers override the 
options" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "Unchanged; 
the CamelMetrics headers are removed" }
+  },
   "properties": {
     "metricType": { "index": 0, "kind": "path", "displayName": "Metric Type", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.opentelemetry.metrics.InstrumentType", "enum": [ "counter", 
"summary", "timer" ], "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Type of metrics" },
     "metricName": { "index": 1, "kind": "path", "displayName": "Metric Name", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "supportSimpleExpression": true, 
"description": "Name of metric" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/shell.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/shell.json
index e98010761a1e..2664c1377836 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/shell.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/shell.json
@@ -29,6 +29,10 @@
     "bannerResource": { "index": 2, "kind": "property", "displayName": "Banner 
Resource", "group": "advanced", "label": "advanced", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "camel-shell-banner.txt", 
"description": "Classpath resource path to a custom banner text file" },
     "showBanner": { "index": 3, "kind": "property", "displayName": "Show 
Banner", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to print the 
Camel banner on startup" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The line the user typed at the prompt, as typed (an empty line 
too); exit or end of input stops the CamelContext" },
+    "consumerReply": { "carriers": [ "text", "bytes", "stream", "value", 
"null" ], "description": "The body the route ends with, converted to text and 
printed to the terminal; null prints nothing, and a failed exchange prints the 
message of its exception. A Map or a List prints as its Java toString: marshal 
it first" }
+  },
   "properties": {
     "prompt": { "index": 0, "kind": "path", "displayName": "Prompt", "group": 
"consumer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Shell prompt" },
     "color": { "index": 1, "kind": "parameter", "displayName": "Color", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "cyan", "description": "Prompt color: black, 
red, green, yellow, blue, magenta, cyan, white" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper-master.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper-master.json
index 30983b92725e..5d1bee8e1cb1 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper-master.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper-master.json
@@ -33,6 +33,9 @@
     "curator": { "index": 6, "kind": "property", "displayName": "Curator", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.curator.framework.CuratorFramework", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
configured CuratorFramework as connection to zookeeper ensemble." },
     "zooKeeperPassword": { "index": 7, "kind": "property", "displayName": "Zoo 
Keeper Password", "group": "security", "label": "security", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": true, "security": "secret", "description": "The 
password to use when connecting to the zookeeper ensemble" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "unknown" ], "description": "The body the 
consumer of the delegate endpoint (consumerEndpointUri) makes, such as the file 
of a file consumer: only the node that holds the leadership of the group runs 
it" }
+  },
   "properties": {
     "groupName": { "index": 0, "kind": "path", "displayName": "Group Name", 
"group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The name of the cluster 
group to use" },
     "consumerEndpointUri": { "index": 1, "kind": "path", "displayName": 
"Consumer Endpoint Uri", "group": "consumer", "label": "", "required": true, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
consumer endpoint to use in master\/slave mode" },
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper.json
index 9b5f89f00512..433a6fc5f69f 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zookeeper.json
@@ -45,6 +45,11 @@
     "CamelZookeeperEventType": { "index": 5, "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": 
"org.apache.zookeeper.Watcher.Event.EventType", "enum": [ "None", 
"NodeCreated", "NodeDeleted", "NodeDataChanged", "NodeChildrenChanged", 
"DataWatchRemoved", "ChildWatchRemoved", "PersistentWatchRemoved" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The event type", "constantName": "org.apach [...]
     "CamelZookeeperOperation": { "index": 6, "kind": "header", "displayName": 
"", "group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The operation to perform", "constantName": 
"org.apache.camel.component.zookeeper.ZooKeeperMessage#ZOOKEEPER_OPERATION" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "bytes", "null" ], "dependsOn": [ 
"sendEmptyMessageOnDelete" ], "byOption": [ { "option": "listChildren", 
"value": "true", "carriers": [ "list" ] } ], "description": "The data of the 
znode as bytes, and no body when the znode is deleted; with listChildren, the 
List of the names of its child znodes. The CamelZooKeeperNode and 
CamelZookeeperStatistics headers say which znode and its version" },
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"description": "The data to store in the znode, converted to bytes. A Map, a 
POJO or a number is not converted and stores no data; with the 
CamelZookeeperOperation header set to DELETE the body is not read" },
+    "producerOut": { "carriers": [ "unchanged", "bytes", "text", "value" ], 
"byOption": [ { "option": "listChildren", "value": "true", "carriers": [ 
"list", "unchanged" ] } ], "description": "InOnly writes without waiting and 
leaves the body unchanged. InOut waits and sets the bytes written, the path of 
the znode as text when it was created, or true for a DELETE; with listChildren, 
the List of the names of the child znodes of the path" }
+  },
   "properties": {
     "serverUrls": { "index": 0, "kind": "path", "displayName": "Server Urls", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.zookeeper.ZooKeeperConfiguration", 
"configurationField": "configuration", "description": "The zookeeper server 
hosts (multiple servers can be separated by comma)" },
     "path": { "index": 1, "kind": "path", "displayName": "Path", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.zookeeper.ZooKeeperConfiguration", 
"configurationField": "configuration", "description": "The node in the 
ZooKeeper server (aka znode)" },
diff --git 
a/components/camel-docker/src/generated/resources/META-INF/org/apache/camel/component/docker/docker.json
 
b/components/camel-docker/src/generated/resources/META-INF/org/apache/camel/component/docker/docker.json
index 77b8e34a9b2f..1c820359545b 100644
--- 
a/components/camel-docker/src/generated/resources/META-INF/org/apache/camel/component/docker/docker.json
+++ 
b/components/camel-docker/src/generated/resources/META-INF/org/apache/camel/component/docker/docker.json
@@ -130,6 +130,11 @@
     "CamelDockerDetach": { "index": 80, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "Boolean", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "With detach flag", "constantName": 
"org.apache.camel.component.docker.DockerConstants#DOCKER_DETACH" },
     "CamelDockerExecId": { "index": 81, "kind": "header", "displayName": "", 
"group": "common", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The Exec ID", "constantName": 
"org.apache.camel.component.docker.DockerConstants#DOCKER_EXEC_ID" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "pojo" ], "byOption": [ { "option": 
"operation", "value": "events", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Event" }, { "option": "operation", "value": 
"stats", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Statistics" } ], "description": "The object of 
docker-java for each item of the stream: an Event of the daemon with events, 
the Statistics of the container in CamelDockerContainerId with stats" },
+    "producerIn": { "carriers": [ "any" ], "byOption": [ { "option": 
"operation", "value": "imagecreate", "carriers": [ "stream", "bytes", "text", 
"file" ] }, { "option": "operation", "value": "imagebuild", "carriers": [ 
"stream", "file" ] } ], "description": "Not used by most operations, which take 
their input from the options and headers, such as the container in 
CamelDockerContainerId. imagecreate reads the image as a stream; imagebuild 
needs an InputStream or a java.io.File of the bu [...]
+    "producerOut": { "carriers": [ "pojo", "list", "text", "stream", "null", 
"unchanged" ], "byOption": [ { "option": "operation", "value": "auth", 
"carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.AuthResponse" }, { "option": "operation", 
"value": "info", "carriers": [ "pojo" ], "javaType": 
"com.github.dockerjava.api.model.Info" }, { "option": "operation", "value": 
"ping", "carriers": [ "unchanged" ] }, { "option": "operation", "value": 
"version", "carriers": [ "pojo" [...]
+  },
   "properties": {
     "operation": { "index": 0, "kind": "path", "displayName": "Operation", 
"group": "common", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.component.docker.DockerOperation", "enum": [ "events", 
"stats", "auth", "info", "ping", "version", "imagebuild", "imagecreate", 
"imageinspect", "imagelist", "imagepull", "imagepush", "imageremove", 
"imagesearch", "imagetag", "containerattach", "containercommit", 
"containercopyfile", "containercreate", "containerdiff", " [...]
     "email": { "index": 1, "kind": "parameter", "displayName": "Email", 
"group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.docker.DockerConfiguration", "configurationField": 
"configuration", "description": "Email address associated with the user" },
diff --git 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerEndpoint.java
 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerEndpoint.java
index b86840289c49..48981f10659d 100644
--- 
a/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerEndpoint.java
+++ 
b/components/camel-docker/src/main/java/org/apache/camel/component/docker/DockerEndpoint.java
@@ -27,6 +27,9 @@ import 
org.apache.camel.component.docker.consumer.DockerStatsConsumer;
 import org.apache.camel.component.docker.exception.DockerException;
 import org.apache.camel.component.docker.producer.AsyncDockerProducer;
 import org.apache.camel.component.docker.producer.DockerProducer;
+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;
@@ -38,6 +41,109 @@ import org.apache.camel.support.DefaultEndpoint;
 @UriEndpoint(firstVersion = "2.15.0", scheme = "docker", title = "Docker", 
syntax = "docker:operation",
              category = { Category.CLOUD, Category.CONTAINER }, 
lenientProperties = true,
              headersClass = DockerConstants.class)
+@BodyTypes(consumerOut = @BodyType(value = Carrier.POJO,
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "events", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.model.Event"),
+                                           @BodyType.When(option = 
"operation", value = "stats", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.model.Statistics") },
+                                   description = "The object of docker-java 
for each item of the stream: an Event of the"
+                                                 + " daemon with events, the 
Statistics of the container in"
+                                                 + " CamelDockerContainerId 
with stats"),
+           producerIn = @BodyType(value = Carrier.ANY,
+                                  byOption = {
+                                          @BodyType.When(option = "operation", 
value = "imagecreate",
+                                                         carriers = {
+                                                                 
Carrier.STREAM, Carrier.BYTES, Carrier.TEXT, Carrier.FILE }),
+                                          @BodyType.When(option = "operation", 
value = "imagebuild",
+                                                         carriers = { 
Carrier.STREAM, Carrier.FILE }) },
+                                  description = "Not used by most operations, 
which take their input from the options and"
+                                                + " headers, such as the 
container in CamelDockerContainerId. imagecreate"
+                                                + " reads the image as a 
stream; imagebuild needs an InputStream or a"
+                                                + " java.io.File of the build 
context, and another body is logged as an"
+                                                + " error"),
+           producerOut = @BodyType(value = {
+                   Carrier.POJO, Carrier.LIST, Carrier.TEXT, Carrier.STREAM, 
Carrier.NULL,
+                   Carrier.UNCHANGED },
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "auth", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.model.AuthResponse"),
+                                           @BodyType.When(option = 
"operation", value = "info", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.model.Info"),
+                                           @BodyType.When(option = 
"operation", value = "ping", carriers = Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "version", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.model.Version"),
+                                           @BodyType.When(option = 
"operation", value = "imagebuild",
+                                                          carriers = { 
Carrier.TEXT, Carrier.NULL }),
+                                           @BodyType.When(option = 
"operation", value = "imagecreate", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.CreateImageResponse"),
+                                           @BodyType.When(option = 
"operation", value = "imageinspect", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.InspectImageResponse"),
+                                           @BodyType.When(option = 
"operation", value = "imagelist", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "imagepull", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.PullImageResultCallback"),
+                                           @BodyType.When(option = 
"operation", value = "imagepush", carriers = Carrier.POJO),
+                                           @BodyType.When(option = 
"operation", value = "imageremove",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "imagesearch", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "imagetag",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerattach",
+                                                          carriers = 
Carrier.POJO),
+                                           @BodyType.When(option = 
"operation", value = "containercommit",
+                                                          carriers = 
Carrier.TEXT,
+                                                          javaType = 
"java.lang.String"),
+                                           @BodyType.When(option = 
"operation", value = "containercopyfile",
+                                                          carriers = 
Carrier.STREAM),
+                                           @BodyType.When(option = 
"operation", value = "containercreate",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.CreateContainerResponse"),
+                                           @BodyType.When(option = 
"operation", value = "containerdiff",
+                                                          carriers = 
Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "inspectcontainer",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.InspectContainerResponse"),
+                                           @BodyType.When(option = 
"operation", value = "containerkill",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerlist",
+                                                          carriers = 
Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "containerlog",
+                                                          carriers = 
Carrier.POJO),
+                                           @BodyType.When(option = 
"operation", value = "containerpause",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerrestart",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerremove",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerstart",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerstop",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containertop", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.TopContainerResponse"),
+                                           @BodyType.When(option = 
"operation", value = "containerunpause",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "containerwait",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.WaitContainerResultCallback"),
+                                           @BodyType.When(option = 
"operation", value = "execcreate", carriers = Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.ExecCreateCmdResponse"),
+                                           @BodyType.When(option = 
"operation", value = "execstart", carriers = Carrier.POJO),
+                                           @BodyType.When(option = 
"operation", value = "networkconnect",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "networkcreate",
+                                                          carriers = 
Carrier.POJO,
+                                                          javaType = 
"com.github.dockerjava.api.command.CreateNetworkResponse"),
+                                           @BodyType.When(option = 
"operation", value = "networkremove",
+                                                          carriers = 
Carrier.UNCHANGED) },
+                                   description = "The response of docker-java 
for the operation, such as the Version of"
+                                                 + " version and a List of 
Containers for containerlist; the operations"
+                                                 + " without a response, such 
as ping and containerstart, keep the body."
+                                                 + " The streaming operations 
(imagepull, imagepush, containerattach,"
+                                                 + " containerlog, 
containerwait, execstart) give the docker-java callback"
+                                                 + " once the stream is done, 
not its frames; imagebuild gives the image id"
+                                                 + " of the last line of the 
output, null when it is not the"
+                                                 + " Successfully built line"))
 public class DockerEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam
diff --git 
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
 
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
index 518bc72d4f30..00797cf2da4d 100644
--- 
a/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
+++ 
b/components/camel-git/src/generated/resources/META-INF/org/apache/camel/component/git/git.json
@@ -45,6 +45,11 @@
     "CamelGitBranchLeaf": { "index": 11, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The leaf", "constantName": 
"org.apache.camel.component.git.GitConstants#GIT_BRANCH_LEAF" },
     "CamelGitBranchObjectId": { "index": 12, "kind": "header", "displayName": 
"", "group": "consumer", "label": "consumer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The object id", "constantName": 
"org.apache.camel.component.git.GitConstants#GIT_BRANCH_OBJECT_ID" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The full message of the commit with type=commit, the name of 
the ref, such as refs\/heads\/main or refs\/tags\/v1, with type=branch and tag. 
The commit id, author, committer and time, or the object id of the ref, are in 
headers" },
+    "producerIn": { "carriers": [ "any" ], "description": "Not used: the 
operations take their input from the options and headers, such as the file in 
CamelGitFilename and the message in CamelGitCommitMessage" },
+    "producerOut": { "carriers": [ "unchanged", "pojo", "list", "iterator", 
"map" ], "byOption": [ { "option": "operation", "value": "status", "carriers": 
[ "pojo" ], "javaType": "org.eclipse.jgit.api.Status" }, { "option": 
"operation", "value": "log", "carriers": [ "iterator" ], "javaType": 
"org.eclipse.jgit.revwalk.RevWalk" }, { "option": "operation", "value": "push", 
"carriers": [ "list" ] }, { "option": "operation", "value": "pushTag", 
"carriers": [ "list" ] }, { "option": "operation [...]
+  },
   "properties": {
     "localPath": { "index": 0, "kind": "path", "displayName": "Local Path", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Local repository path" },
     "branchName": { "index": 1, "kind": "parameter", "displayName": "Branch 
Name", "group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "The branch name to work on" },
diff --git 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
index b35d55cc304c..6f2e98bfffb9 100644
--- 
a/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
+++ 
b/components/camel-git/src/main/java/org/apache/camel/component/git/GitEndpoint.java
@@ -25,6 +25,9 @@ import 
org.apache.camel.component.git.consumer.GitCommitConsumer;
 import org.apache.camel.component.git.consumer.GitTagConsumer;
 import org.apache.camel.component.git.consumer.GitType;
 import org.apache.camel.component.git.producer.GitProducer;
+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;
@@ -36,6 +39,62 @@ import org.apache.camel.support.ScheduledPollEndpoint;
  */
 @UriEndpoint(firstVersion = "2.16.0", scheme = "git", title = "Git", syntax = 
"git:localPath", category = { Category.FILE },
              headersClass = GitConstants.class)
+@BodyTypes(consumerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   description = "The full message of the 
commit with type=commit, the name of the ref,"
+                                                 + " such as refs/heads/main 
or refs/tags/v1, with type=branch and tag. The"
+                                                 + " commit id, author, 
committer and time, or the object id of the ref, are"
+                                                 + " in headers"),
+           producerIn = @BodyType(value = Carrier.ANY,
+                                  description = "Not used: the operations take 
their input from the options and headers,"
+                                                + " such as the file in 
CamelGitFilename and the message in"
+                                                + " CamelGitCommitMessage"),
+           producerOut = @BodyType(value = { Carrier.UNCHANGED, Carrier.POJO, 
Carrier.LIST, Carrier.ITERATOR, Carrier.MAP },
+                                   byOption = {
+                                           @BodyType.When(option = 
"operation", value = "status", carriers = Carrier.POJO,
+                                                          javaType = 
"org.eclipse.jgit.api.Status"),
+                                           @BodyType.When(option = 
"operation", value = "log", carriers = Carrier.ITERATOR,
+                                                          javaType = 
"org.eclipse.jgit.revwalk.RevWalk"),
+                                           @BodyType.When(option = 
"operation", value = "push", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "pushTag", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "pull", carriers = Carrier.POJO,
+                                                          javaType = 
"org.eclipse.jgit.api.PullResult"),
+                                           @BodyType.When(option = 
"operation", value = "merge", carriers = Carrier.POJO,
+                                                          javaType = 
"org.eclipse.jgit.api.MergeResult"),
+                                           @BodyType.When(option = 
"operation", value = "cherryPick", carriers = Carrier.POJO,
+                                                          javaType = 
"org.eclipse.jgit.api.CherryPickResult"),
+                                           @BodyType.When(option = 
"operation", value = "showBranches",
+                                                          carriers = 
Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "showTags", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "clean", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "gc", carriers = Carrier.MAP,
+                                                          javaType = 
"java.util.Properties"),
+                                           @BodyType.When(option = 
"operation", value = "remoteAdd", carriers = Carrier.POJO,
+                                                          javaType = 
"org.eclipse.jgit.transport.RemoteConfig"),
+                                           @BodyType.When(option = 
"operation", value = "remoteList", carriers = Carrier.LIST),
+                                           @BodyType.When(option = 
"operation", value = "add", carriers = Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "checkout",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "clone", carriers = Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "commit", carriers = Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "commitAll",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "createBranch",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "createTag",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "deleteBranch",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "deleteTag",
+                                                          carriers = 
Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "init", carriers = Carrier.UNCHANGED),
+                                           @BodyType.When(option = 
"operation", value = "remove",
+                                                          carriers = 
Carrier.UNCHANGED) },
+                                   description = "The result of JGit for the 
operation: the Status of status, the commits of"
+                                                 + " log as a RevWalk read 
once, a List of Refs for showBranches and"
+                                                 + " showTags, the PushResults 
of push, the Properties of the statistics of"
+                                                 + " gc. The operations that 
change the repository, such as add and commit,"
+                                                 + " keep the body. Without 
the operation option the operation is taken"
+                                                 + " from the 
CamelGitOperation header"))
 public class GitEndpoint extends ScheduledPollEndpoint {
 
     @UriPath
diff --git 
a/components/camel-jmx/src/generated/resources/META-INF/org/apache/camel/component/jmx/jmx.json
 
b/components/camel-jmx/src/generated/resources/META-INF/org/apache/camel/component/jmx/jmx.json
index f7ceacbb6d00..92d8d788c001 100644
--- 
a/components/camel-jmx/src/generated/resources/META-INF/org/apache/camel/component/jmx/jmx.json
+++ 
b/components/camel-jmx/src/generated/resources/META-INF/org/apache/camel/component/jmx/jmx.json
@@ -30,6 +30,9 @@
   "headers": {
     "jmx.handback": { "index": 0, "kind": "header", "displayName": "", 
"group": "consumer", "label": "consumer", "required": false, "javaType": 
"Object", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The handback.", "constantName": 
"org.apache.camel.component.jmx.JMXConstants#JMX_HANDBACK" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"format": "xml", "byOption": [ { "option": "format", "value": "raw", 
"carriers": [ "pojo" ], "javaType": "javax.management.Notification" } ], 
"description": "The notification as XML text, such as an 
AttributeChangeNotification or a MonitorNotification element; with format=raw 
the Notification object. The handback object is in the jmx.handback header" }
+  },
   "properties": {
     "serverURL": { "index": 0, "kind": "path", "displayName": "Server URL", 
"group": "consumer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Server url comes from the remaining endpoint. 
Use platform to connect to local JVM." },
     "format": { "index": 1, "kind": "parameter", "displayName": "Format", 
"group": "consumer", "label": "", "required": false, "type": "enum", 
"javaType": "java.lang.String", "enum": [ "xml", "raw" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "xml", "description": 
"Format for the message body. Either xml or raw. If xml, the notification is 
serialized to xml. If raw, then the raw java object is set as the body." },
diff --git 
a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
 
b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
index 25c4556f4cd8..8b58608dede7 100644
--- 
a/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
+++ 
b/components/camel-jmx/src/main/java/org/apache/camel/component/jmx/JMXEndpoint.java
@@ -28,6 +28,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;
@@ -53,6 +56,12 @@ import org.apache.camel.util.ObjectHelper;
  */
 @UriEndpoint(firstVersion = "2.6.0", scheme = "jmx", title = "JMX", syntax = 
"jmx:serverURL", consumerOnly = true,
              remote = false, category = { Category.MONITORING }, headersClass 
= JMXConstants.class)
+@BodyTypes(consumerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String", format = "xml",
+                                   byOption = @BodyType.When(option = 
"format", value = "raw", carriers = Carrier.POJO,
+                                                             javaType = 
"javax.management.Notification"),
+                                   description = "The notification as XML 
text, such as an AttributeChangeNotification"
+                                                 + " or a MonitorNotification 
element; with format=raw the Notification"
+                                                 + " object. The handback 
object is in the jmx.handback header"))
 public class JMXEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     // error messages as constants so they can be asserted on from unit tests
diff --git 
a/components/camel-master/src/generated/resources/META-INF/org/apache/camel/component/master/master.json
 
b/components/camel-master/src/generated/resources/META-INF/org/apache/camel/component/master/master.json
index 7449a926a169..a42453756774 100644
--- 
a/components/camel-master/src/generated/resources/META-INF/org/apache/camel/component/master/master.json
+++ 
b/components/camel-master/src/generated/resources/META-INF/org/apache/camel/component/master/master.json
@@ -31,6 +31,9 @@
     "service": { "index": 4, "kind": "property", "displayName": "Service", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.cluster.CamelClusterService", "deprecated": 
false, "autowired": false, "secret": false, "description": "Inject the service 
to use." },
     "serviceSelector": { "index": 5, "kind": "property", "displayName": 
"Service Selector", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.cluster.CamelClusterService.Selector", "deprecated": false, 
"autowired": false, "secret": false, "description": "Inject the service 
selector used to lookup the CamelClusterService to use." }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "unknown" ], "description": "The body the 
consumer of the delegate endpoint (delegateUri) makes, such as the file of a 
file consumer: only the node that holds the leadership of the namespace in the 
cluster service runs it" }
+  },
   "properties": {
     "namespace": { "index": 0, "kind": "path", "displayName": "Namespace", 
"group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The name of the cluster 
namespace to use" },
     "delegateUri": { "index": 1, "kind": "path", "displayName": "Delegate 
Uri", "group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The endpoint uri to use in 
master\/slave mode" },
diff --git 
a/components/camel-master/src/main/java/org/apache/camel/component/master/MasterEndpoint.java
 
b/components/camel-master/src/main/java/org/apache/camel/component/master/MasterEndpoint.java
index 64e22c5ae757..2d7850ffff01 100644
--- 
a/components/camel-master/src/main/java/org/apache/camel/component/master/MasterEndpoint.java
+++ 
b/components/camel-master/src/main/java/org/apache/camel/component/master/MasterEndpoint.java
@@ -25,6 +25,9 @@ import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.cluster.CamelClusterService;
+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.UriPath;
@@ -36,6 +39,10 @@ import org.apache.camel.support.DefaultEndpoint;
 @ManagedResource(description = "Managed Master Endpoint")
 @UriEndpoint(firstVersion = "2.20.0", scheme = "master", syntax = 
"master:namespace:delegateUri", title = "Master",
              consumerOnly = true, lenientProperties = true, category = { 
Category.CLUSTERING })
+@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN,
+                                   description = "The body the consumer of the 
delegate endpoint (delegateUri) makes, such as"
+                                                 + " the file of a file 
consumer: only the node that holds the leadership of"
+                                                 + " the namespace in the 
cluster service runs it"))
 public class MasterEndpoint extends DefaultEndpoint implements 
DelegateEndpoint {
 
     private final Endpoint delegateEndpoint;
diff --git 
a/components/camel-metrics/src/generated/resources/META-INF/org/apache/camel/component/metrics/metrics.json
 
b/components/camel-metrics/src/generated/resources/META-INF/org/apache/camel/component/metrics/metrics.json
index ce452f5c2e2e..fc8969072b83 100644
--- 
a/components/camel-metrics/src/generated/resources/META-INF/org/apache/camel/component/metrics/metrics.json
+++ 
b/components/camel-metrics/src/generated/resources/META-INF/org/apache/camel/component/metrics/metrics.json
@@ -38,6 +38,10 @@
     "CamelMetricsGaugeSubject": { "index": 5, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "Object", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override subject value in URI", "constantName": 
"org.apache.camel.component.metrics.MetricsConstants#HEADER_GAUGE_SUBJECT" },
     "CamelMetricsName": { "index": 6, "kind": "header", "displayName": "", 
"group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override name value in URI", "constantName": 
"org.apache.camel.component.metrics.MetricsConstants#HEADER_METRIC_NAME" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "Not used: the 
values come from the options or the CamelMetrics headers, such as 
CamelMetricsCounterIncrement or CamelMetricsGaugeSubject" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "Unchanged; 
the CamelMetrics headers are removed" }
+  },
   "properties": {
     "metricsType": { "index": 0, "kind": "path", "displayName": "Metrics 
Type", "group": "producer", "label": "", "required": true, "type": "enum", 
"javaType": "org.apache.camel.component.metrics.MetricsType", "enum": [ 
"gauge", "counter", "histogram", "meter", "timer" ], "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": 
"Type of metrics" },
     "metricsName": { "index": 1, "kind": "path", "displayName": "Metrics 
Name", "group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "Name of metrics" },
diff --git 
a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsEndpoint.java
 
b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsEndpoint.java
index d8987cf49d47..f83b3b799365 100644
--- 
a/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsEndpoint.java
+++ 
b/components/camel-metrics/src/main/java/org/apache/camel/component/metrics/MetricsEndpoint.java
@@ -23,6 +23,9 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.RuntimeCamelException;
+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;
@@ -35,6 +38,10 @@ import org.apache.camel.support.DefaultEndpoint;
 @UriEndpoint(firstVersion = "2.14.0", scheme = "metrics", title = "Metrics", 
syntax = "metrics:metricsType:metricsName",
              remote = false, internal = true, producerOnly = true, category = 
{ Category.MONITORING },
              headersClass = MetricsConstants.class)
+@BodyTypes(producerIn = @BodyType(value = Carrier.ANY,
+                                  description = "Not used: the values come 
from the options or the CamelMetrics headers,"
+                                                + " such as 
CamelMetricsCounterIncrement or CamelMetricsGaugeSubject"),
+           producerOut = @BodyType(value = Carrier.UNCHANGED, description = 
"Unchanged; the CamelMetrics headers are removed"))
 public class MetricsEndpoint extends DefaultEndpoint {
 
     protected final MetricRegistry registry;
diff --git 
a/components/camel-opentelemetry-metrics/src/generated/resources/META-INF/org/apache/camel/opentelemetry/metrics/opentelemetry-metrics.json
 
b/components/camel-opentelemetry-metrics/src/generated/resources/META-INF/org/apache/camel/opentelemetry/metrics/opentelemetry-metrics.json
index 3cf7ea2565b0..3ae287b7bcfc 100644
--- 
a/components/camel-opentelemetry-metrics/src/generated/resources/META-INF/org/apache/camel/opentelemetry/metrics/opentelemetry-metrics.json
+++ 
b/components/camel-opentelemetry-metrics/src/generated/resources/META-INF/org/apache/camel/opentelemetry/metrics/opentelemetry-metrics.json
@@ -37,6 +37,10 @@
     "CamelMetricsDescription": { "index": 5, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": "String", 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "Override description value in URI", "constantName": 
"org.apache.camel.opentelemetry.metrics.OpenTelemetryConstants#HEADER_METRIC_DESCRIPTION"
 },
     "CamelMetricsAttributes": { "index": 6, "kind": "header", "displayName": 
"", "group": "producer", "label": "", "required": false, "javaType": 
"io.opentelemetry.api.common.Attributes", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "To 
augment meter attributes defined as URI parameters", "constantName": 
"org.apache.camel.opentelemetry.metrics.OpenTelemetryConstants#HEADER_METRIC_ATTRIBUTES"
 }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "any" ], "description": "Not used, unless an 
option such as increment, decrement or value is a simple expression that reads 
it, which must then give a number. The CamelMetrics headers override the 
options" },
+    "producerOut": { "carriers": [ "unchanged" ], "description": "Unchanged; 
the CamelMetrics headers are removed" }
+  },
   "properties": {
     "metricType": { "index": 0, "kind": "path", "displayName": "Metric Type", 
"group": "producer", "label": "", "required": true, "type": "enum", "javaType": 
"org.apache.camel.opentelemetry.metrics.InstrumentType", "enum": [ "counter", 
"summary", "timer" ], "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Type of metrics" },
     "metricName": { "index": 1, "kind": "path", "displayName": "Metric Name", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "supportSimpleExpression": true, 
"description": "Name of metric" },
diff --git 
a/components/camel-opentelemetry-metrics/src/main/java/org/apache/camel/opentelemetry/metrics/OpenTelemetryEndpoint.java
 
b/components/camel-opentelemetry-metrics/src/main/java/org/apache/camel/opentelemetry/metrics/OpenTelemetryEndpoint.java
index 8a297c8960b6..1359e0feb136 100644
--- 
a/components/camel-opentelemetry-metrics/src/main/java/org/apache/camel/opentelemetry/metrics/OpenTelemetryEndpoint.java
+++ 
b/components/camel-opentelemetry-metrics/src/main/java/org/apache/camel/opentelemetry/metrics/OpenTelemetryEndpoint.java
@@ -27,6 +27,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;
@@ -37,6 +40,11 @@ import org.apache.camel.support.DefaultEndpoint;
              remote = false, syntax = 
"opentelemetry-metrics:metricType:metricName", producerOnly = true,
              category = { Category.MONITORING },
              headersClass = OpenTelemetryConstants.class)
+@BodyTypes(producerIn = @BodyType(value = Carrier.ANY,
+                                  description = "Not used, unless an option 
such as increment, decrement or value is a simple"
+                                                + " expression that reads it, 
which must then give a number. The CamelMetrics"
+                                                + " headers override the 
options"),
+           producerOut = @BodyType(value = Carrier.UNCHANGED, description = 
"Unchanged; the CamelMetrics headers are removed"))
 public class OpenTelemetryEndpoint extends DefaultEndpoint {
 
     protected Meter meter;
diff --git 
a/components/camel-printer/src/generated/resources/META-INF/org/apache/camel/component/printer/lpr.json
 
b/components/camel-printer/src/generated/resources/META-INF/org/apache/camel/component/printer/lpr.json
index fb174295943b..6c8879855c81 100644
--- 
a/components/camel-printer/src/generated/resources/META-INF/org/apache/camel/component/printer/lpr.json
+++ 
b/components/camel-printer/src/generated/resources/META-INF/org/apache/camel/component/printer/lpr.json
@@ -30,6 +30,10 @@
   "headers": {
     "PrinterJobName": { "index": 0, "kind": "header", "displayName": "", 
"group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The name of the job", "constantName": 
"org.apache.camel.component.printer.PrinterEndpoint#JOB_NAME" }
   },
+  "bodyTypes": {
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"description": "The document to print, read as a stream: text, bytes, a stream 
or a file, in the format of the mimeType and flavor options. A Map, a POJO, a 
number or no body is not converted: the print job gets no data" },
+    "producerOut": { "carriers": [ "unchanged" ] }
+  },
   "properties": {
     "hostname": { "index": 0, "kind": "path", "displayName": "Hostname", 
"group": "producer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.printer.PrinterConfiguration", 
"configurationField": "config", "description": "Hostname of the printer" },
     "port": { "index": 1, "kind": "path", "displayName": "Port", "group": 
"producer", "label": "", "required": false, "type": "integer", "javaType": 
"int", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.printer.PrinterConfiguration", 
"configurationField": "config", "description": "Port number of the printer" },
diff --git 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java
 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java
index f65e2d4e2e2a..00e47f9554f1 100644
--- 
a/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.java
+++ 
b/components/camel-printer/src/main/java/org/apache/camel/component/printer/PrinterEndpoint.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.EndpointServiceLocation;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
@@ -38,6 +41,11 @@ import org.apache.camel.support.DefaultEndpoint;
  */
 @UriEndpoint(firstVersion = "2.1.0", scheme = "lpr", title = "Printer", syntax 
= "lpr:hostname:port/printername",
              producerOnly = true, category = { Category.DOCUMENT }, 
headersClass = PrinterEndpoint.class)
+@BodyTypes(producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.FILE },
+                                  description = "The document to print, read 
as a stream: text, bytes, a stream or a file,"
+                                                + " in the format of the 
mimeType and flavor options. A Map, a POJO, a number"
+                                                + " or no body is not 
converted: the print job gets no data"),
+           producerOut = @BodyType(Carrier.UNCHANGED))
 public class PrinterEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @Metadata(label = "producer", description = "The name of the job", 
javaType = "String")
diff --git 
a/components/camel-shell/src/generated/resources/META-INF/org/apache/camel/component/shell/shell.json
 
b/components/camel-shell/src/generated/resources/META-INF/org/apache/camel/component/shell/shell.json
index e98010761a1e..2664c1377836 100644
--- 
a/components/camel-shell/src/generated/resources/META-INF/org/apache/camel/component/shell/shell.json
+++ 
b/components/camel-shell/src/generated/resources/META-INF/org/apache/camel/component/shell/shell.json
@@ -29,6 +29,10 @@
     "bannerResource": { "index": 2, "kind": "property", "displayName": "Banner 
Resource", "group": "advanced", "label": "advanced", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "camel-shell-banner.txt", 
"description": "Classpath resource path to a custom banner text file" },
     "showBanner": { "index": 3, "kind": "property", "displayName": "Show 
Banner", "group": "advanced", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Whether to print the 
Camel banner on startup" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "text" ], "javaType": "java.lang.String", 
"description": "The line the user typed at the prompt, as typed (an empty line 
too); exit or end of input stops the CamelContext" },
+    "consumerReply": { "carriers": [ "text", "bytes", "stream", "value", 
"null" ], "description": "The body the route ends with, converted to text and 
printed to the terminal; null prints nothing, and a failed exchange prints the 
message of its exception. A Map or a List prints as its Java toString: marshal 
it first" }
+  },
   "properties": {
     "prompt": { "index": 0, "kind": "path", "displayName": "Prompt", "group": 
"consumer", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "Shell prompt" },
     "color": { "index": 1, "kind": "parameter", "displayName": "Color", 
"group": "consumer", "label": "consumer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "cyan", "description": "Prompt color: black, 
red, green, yellow, blue, magenta, cyan, white" },
diff --git 
a/components/camel-shell/src/main/java/org/apache/camel/component/shell/ShellEndpoint.java
 
b/components/camel-shell/src/main/java/org/apache/camel/component/shell/ShellEndpoint.java
index 9748a36be6ad..d75e9461293f 100644
--- 
a/components/camel-shell/src/main/java/org/apache/camel/component/shell/ShellEndpoint.java
+++ 
b/components/camel-shell/src/main/java/org/apache/camel/component/shell/ShellEndpoint.java
@@ -20,6 +20,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.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
@@ -30,6 +33,14 @@ import org.jline.terminal.Terminal;
 
 @UriEndpoint(firstVersion = "4.21.0", category = { Category.API }, scheme = 
"shell", title = "Shell",
              syntax = "shell:prompt", consumerOnly = true, remote = false)
+@BodyTypes(consumerOut = @BodyType(value = Carrier.TEXT, javaType = 
"java.lang.String",
+                                   description = "The line the user typed at 
the prompt, as typed (an empty line too);"
+                                                 + " exit or end of input 
stops the CamelContext"),
+           consumerReply = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.VALUE, Carrier.NULL },
+                                     description = "The body the route ends 
with, converted to text and printed to the"
+                                                   + " terminal; null prints 
nothing, and a failed exchange prints the"
+                                                   + " message of its 
exception. A Map or a List prints as its Java"
+                                                   + " toString: marshal it 
first"))
 public class ShellEndpoint extends DefaultEndpoint {
 
     @UriPath
diff --git 
a/components/camel-zookeeper-master/src/generated/resources/META-INF/org/apache/camel/component/zookeepermaster/zookeeper-master.json
 
b/components/camel-zookeeper-master/src/generated/resources/META-INF/org/apache/camel/component/zookeepermaster/zookeeper-master.json
index 30983b92725e..5d1bee8e1cb1 100644
--- 
a/components/camel-zookeeper-master/src/generated/resources/META-INF/org/apache/camel/component/zookeepermaster/zookeeper-master.json
+++ 
b/components/camel-zookeeper-master/src/generated/resources/META-INF/org/apache/camel/component/zookeepermaster/zookeeper-master.json
@@ -33,6 +33,9 @@
     "curator": { "index": 6, "kind": "property", "displayName": "Curator", 
"group": "advanced", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.curator.framework.CuratorFramework", "deprecated": 
false, "autowired": false, "secret": false, "description": "To use a custom 
configured CuratorFramework as connection to zookeeper ensemble." },
     "zooKeeperPassword": { "index": 7, "kind": "property", "displayName": "Zoo 
Keeper Password", "group": "security", "label": "security", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": true, "security": "secret", "description": "The 
password to use when connecting to the zookeeper ensemble" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "unknown" ], "description": "The body the 
consumer of the delegate endpoint (consumerEndpointUri) makes, such as the file 
of a file consumer: only the node that holds the leadership of the group runs 
it" }
+  },
   "properties": {
     "groupName": { "index": 0, "kind": "path", "displayName": "Group Name", 
"group": "consumer", "label": "", "required": true, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "description": "The name of the cluster 
group to use" },
     "consumerEndpointUri": { "index": 1, "kind": "path", "displayName": 
"Consumer Endpoint Uri", "group": "consumer", "label": "", "required": true, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"deprecationNote": "", "autowired": false, "secret": false, "description": "The 
consumer endpoint to use in master\/slave mode" },
diff --git 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/MasterEndpoint.java
 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/MasterEndpoint.java
index cfce36d2f6fc..c165380073e3 100644
--- 
a/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/MasterEndpoint.java
+++ 
b/components/camel-zookeeper-master/src/main/java/org/apache/camel/component/zookeepermaster/MasterEndpoint.java
@@ -24,6 +24,9 @@ import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedResource;
+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.UriPath;
@@ -37,6 +40,10 @@ import org.apache.camel.support.DefaultEndpoint;
              consumerOnly = true,
              title = "ZooKeeper Master", lenientProperties = true,
              category = { Category.CLUSTERING, Category.MANAGEMENT, 
Category.BIGDATA })
+@BodyTypes(consumerOut = @BodyType(value = Carrier.UNKNOWN,
+                                   description = "The body the consumer of the 
delegate endpoint (consumerEndpointUri) makes,"
+                                                 + " such as the file of a 
file consumer: only the node that holds the"
+                                                 + " leadership of the group 
runs it"))
 public class MasterEndpoint extends DefaultEndpoint implements 
DelegateEndpoint {
 
     private final MasterComponent component;
diff --git 
a/components/camel-zookeeper/src/generated/resources/META-INF/org/apache/camel/component/zookeeper/zookeeper.json
 
b/components/camel-zookeeper/src/generated/resources/META-INF/org/apache/camel/component/zookeeper/zookeeper.json
index 9b5f89f00512..433a6fc5f69f 100644
--- 
a/components/camel-zookeeper/src/generated/resources/META-INF/org/apache/camel/component/zookeeper/zookeeper.json
+++ 
b/components/camel-zookeeper/src/generated/resources/META-INF/org/apache/camel/component/zookeeper/zookeeper.json
@@ -45,6 +45,11 @@
     "CamelZookeeperEventType": { "index": 5, "kind": "header", "displayName": 
"", "group": "common", "label": "", "required": false, "javaType": 
"org.apache.zookeeper.Watcher.Event.EventType", "enum": [ "None", 
"NodeCreated", "NodeDeleted", "NodeDataChanged", "NodeChildrenChanged", 
"DataWatchRemoved", "ChildWatchRemoved", "PersistentWatchRemoved" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "description": "The event type", "constantName": "org.apach [...]
     "CamelZookeeperOperation": { "index": 6, "kind": "header", "displayName": 
"", "group": "producer", "label": "producer", "required": false, "javaType": 
"String", "deprecated": false, "deprecationNote": "", "autowired": false, 
"secret": false, "description": "The operation to perform", "constantName": 
"org.apache.camel.component.zookeeper.ZooKeeperMessage#ZOOKEEPER_OPERATION" }
   },
+  "bodyTypes": {
+    "consumerOut": { "carriers": [ "bytes", "null" ], "dependsOn": [ 
"sendEmptyMessageOnDelete" ], "byOption": [ { "option": "listChildren", 
"value": "true", "carriers": [ "list" ] } ], "description": "The data of the 
znode as bytes, and no body when the znode is deleted; with listChildren, the 
List of the names of its child znodes. The CamelZooKeeperNode and 
CamelZookeeperStatistics headers say which znode and its version" },
+    "producerIn": { "carriers": [ "text", "bytes", "stream", "file" ], 
"description": "The data to store in the znode, converted to bytes. A Map, a 
POJO or a number is not converted and stores no data; with the 
CamelZookeeperOperation header set to DELETE the body is not read" },
+    "producerOut": { "carriers": [ "unchanged", "bytes", "text", "value" ], 
"byOption": [ { "option": "listChildren", "value": "true", "carriers": [ 
"list", "unchanged" ] } ], "description": "InOnly writes without waiting and 
leaves the body unchanged. InOut waits and sets the bytes written, the path of 
the znode as text when it was created, or true for a DELETE; with listChildren, 
the List of the names of the child znodes of the path" }
+  },
   "properties": {
     "serverUrls": { "index": 0, "kind": "path", "displayName": "Server Urls", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.zookeeper.ZooKeeperConfiguration", 
"configurationField": "configuration", "description": "The zookeeper server 
hosts (multiple servers can be separated by comma)" },
     "path": { "index": 1, "kind": "path", "displayName": "Path", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.zookeeper.ZooKeeperConfiguration", 
"configurationField": "configuration", "description": "The node in the 
ZooKeeper server (aka znode)" },
diff --git 
a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java
 
b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java
index 4c50e67b21d0..97de9258c2eb 100644
--- 
a/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java
+++ 
b/components/camel-zookeeper/src/main/java/org/apache/camel/component/zookeeper/ZooKeeperEndpoint.java
@@ -25,6 +25,9 @@ import org.apache.camel.Producer;
 import org.apache.camel.api.management.ManagedAttribute;
 import org.apache.camel.api.management.ManagedOperation;
 import org.apache.camel.api.management.ManagedResource;
+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;
@@ -36,6 +39,24 @@ import org.apache.camel.support.DefaultEndpoint;
 @ManagedResource(description = "ZooKeeper Endpoint")
 @UriEndpoint(firstVersion = "2.9.0", scheme = "zookeeper", title = 
"ZooKeeper", syntax = "zookeeper:serverUrls/path",
              category = { Category.CLUSTERING, Category.MANAGEMENT, 
Category.BIGDATA }, headersClass = ZooKeeperMessage.class)
+@BodyTypes(consumerOut = @BodyType(value = { Carrier.BYTES, Carrier.NULL }, 
dependsOn = "sendEmptyMessageOnDelete",
+                                   byOption = @BodyType.When(option = 
"listChildren", value = "true",
+                                                             carriers = 
Carrier.LIST),
+                                   description = "The data of the znode as 
bytes, and no body when the znode is deleted;"
+                                                 + " with listChildren, the 
List of the names of its child znodes. The"
+                                                 + " CamelZooKeeperNode and 
CamelZookeeperStatistics headers say which znode"
+                                                 + " and its version"),
+           producerIn = @BodyType(value = { Carrier.TEXT, Carrier.BYTES, 
Carrier.STREAM, Carrier.FILE },
+                                  description = "The data to store in the 
znode, converted to bytes. A Map, a POJO or a"
+                                                + " number is not converted 
and stores no data; with the CamelZookeeperOperation"
+                                                + " header set to DELETE the 
body is not read"),
+           producerOut = @BodyType(value = { Carrier.UNCHANGED, Carrier.BYTES, 
Carrier.TEXT, Carrier.VALUE },
+                                   byOption = @BodyType.When(option = 
"listChildren", value = "true",
+                                                             carriers = { 
Carrier.LIST, Carrier.UNCHANGED }),
+                                   description = "InOnly writes without 
waiting and leaves the body unchanged. InOut waits and"
+                                                 + " sets the bytes written, 
the path of the znode as text when it was created,"
+                                                 + " or true for a DELETE; 
with listChildren, the List of the names of the child"
+                                                 + " znodes of the path"))
 public class ZooKeeperEndpoint extends DefaultEndpoint implements 
EndpointServiceLocation {
 
     @UriParam

Reply via email to