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


The following commit(s) were added to refs/heads/main by this push:
     new 31013f0a77d Gen trans (#13128)
31013f0a77d is described below

commit 31013f0a77dba7d05c9d59a35ff400bb8c247585
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Feb 15 12:21:20 2024 +0100

    Gen trans (#13128)
    
    CAMEL-20419: Generate json metadata for @DataTypeTransformer
---
 .../apache/camel/catalog/transformers.properties   |  21 ++
 .../transformers/application-cloudevents-json.json |  14 ++
 .../catalog/transformers/application-json.json     |  14 ++
 .../transformers/application-octet-stream.json     |  13 ++
 .../transformers/application-x-java-object.json    |  14 ++
 .../catalog/transformers/application-x-struct.json |  14 ++
 .../camel/catalog/transformers/avro-binary.json    |  14 ++
 .../catalog/transformers/avro-x-java-object.json   |  14 ++
 .../camel/catalog/transformers/avro-x-struct.json  |  14 ++
 .../aws-cloudtrail-application-cloudevents.json    |  14 ++
 .../transformers/aws2-ddb-application-json.json    |  14 ++
 .../aws2-s3-application-cloudevents.json           |  14 ++
 .../aws2-sqs-application-cloudevents.json          |  14 ++
 ...azure-storage-blob-application-cloudevents.json |  14 ++
 ...zure-storage-queue-application-cloudevents.json |  14 ++
 .../google-sheets-application-x-struct.json        |  14 ++
 .../google-storage-application-cloudevents.json    |  14 ++
 .../transformers/http-application-cloudevents.json |  14 ++
 .../catalog/transformers/protobuf-binary.json      |  14 ++
 .../transformers/protobuf-x-java-object.json       |  14 ++
 .../catalog/transformers/protobuf-x-struct.json    |  14 ++
 .../camel/catalog/transformers/text-plain.json     |  13 ++
 .../org/apache/camel/catalog/CamelCatalog.java     |  29 +++
 .../catalog/CamelCatalogJSonSchemaResolver.java    |   6 +
 .../apache/camel/catalog/DefaultCamelCatalog.java  |  33 +++
 .../camel/catalog/DefaultRuntimeProvider.java      |  28 +++
 .../main/java/org/apache/camel/catalog/Kind.java   |   1 +
 .../org/apache/camel/catalog/RuntimeProvider.java  |  10 +
 .../camel/catalog/CamelCatalogJsonSchemaTest.java  |  19 ++
 .../org/apache/camel/catalog/CamelCatalogTest.java |  24 ++-
 .../org/apache/camel/transformer.properties        |   7 +
 .../aws-cloudtrail-application-cloudevents.json    |  14 ++
 .../CloudtrailCloudEventDataTypeTransformer.java   |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../transformer/aws2-ddb-application-json.json     |  14 ++
 .../ddb/transform/Ddb2JsonDataTypeTransformer.java |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../aws2-s3-application-cloudevents.json           |  14 ++
 .../AWS2S3CloudEventDataTypeTransformer.java       |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../aws2-sqs-application-cloudevents.json          |  14 ++
 .../AWS2SQSCloudEventDataTypeTransformer.java      |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 ...azure-storage-blob-application-cloudevents.json |  14 ++
 ...reStorageBlobCloudEventDataTypeTransformer.java |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 ...zure-storage-queue-application-cloudevents.json |  14 ++
 ...eStorageQueueCloudEventDataTypeTransformer.java |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../transformer/application-cloudevents-json.json  |  14 ++
 .../transformer/http-application-cloudevents.json  |  14 ++
 .../CloudEventHttpDataTypeTransformer.java         |   3 +-
 .../CloudEventJsonDataTypeTransformer.java         |   7 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../google-sheets-application-x-struct.json        |  14 ++
 .../GoogleSheetsJsonStructDataTypeTransformer.java |  59 +-----
 .../org/apache/camel/transformer.properties        |   7 +
 .../google-storage-application-cloudevents.json    |  14 ++
 ...GoogleStorageCloudEventDataTypeTransformer.java |   3 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../org/apache/camel/transformer/avro-binary.json  |  14 ++
 .../camel/transformer/avro-x-java-object.json      |  14 ++
 .../apache/camel/transformer/avro-x-struct.json    |  14 ++
 .../component/jackson/avro/transform/Avro.java     |   1 -
 .../transform/AvroBinaryDataTypeTransformer.java   |   3 +-
 .../transform/AvroPojoDataTypeTransformer.java     |   4 +-
 .../jackson/avro/transform/AvroSchemaResolver.java |   1 -
 .../transform/AvroStructDataTypeTransformer.java   |   4 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../apache/camel/transformer/protobuf-binary.json  |  14 ++
 .../camel/transformer/protobuf-x-java-object.json  |  14 ++
 .../camel/transformer/protobuf-x-struct.json       |  14 ++
 .../jackson/protobuf/transform/Protobuf.java       |   1 -
 .../ProtobufBinaryDataTypeTransformer.java         |   4 +-
 .../transform/ProtobufPojoDataTypeTransformer.java |   4 +-
 .../protobuf/transform/ProtobufSchemaResolver.java |   1 -
 .../ProtobufStructDataTypeTransformer.java         |   4 +-
 .../org/apache/camel/transformer.properties        |   7 +
 .../apache/camel/transformer/application-json.json |  14 ++
 .../transformer/application-x-java-object.json     |  14 ++
 .../camel/transformer/application-x-struct.json    |  14 ++
 .../camel/component/jackson/transform/Json.java    |   1 -
 .../jackson/transform/JsonDataTypeTransformer.java |   4 +-
 .../transform/JsonPojoDataTypeTransformer.java     |   4 +-
 .../jackson/transform/JsonSchemaResolver.java      |   1 -
 .../transform/JsonStructDataTypeTransformer.java   |   4 +-
 .../java/org/apache/camel/CatalogCamelContext.java |   8 +
 .../apache/camel/catalog/JSonSchemaResolver.java   |   8 +
 .../org/apache/camel/spi/DataTypeTransformer.java  |   5 +
 .../camel/impl/engine/AbstractCamelContext.java    |  16 ++
 .../camel/catalog/impl/AbstractCamelCatalog.java   |  10 +
 .../impl/CamelContextJSonSchemaResolver.java       |  10 +
 .../catalog/impl/DefaultRuntimeCamelCatalog.java   |  11 +
 .../org/apache/camel/transformer.properties        |   7 +
 .../transformer/application-octet-stream.json      |  13 ++
 .../org/apache/camel/transformer/text-plain.json   |  13 ++
 .../org/apache/camel/transformer/transformers.json |  19 ++
 .../camel/yaml/io/ModelJSonSchemaResolver.java     |   5 +
 .../dsl/jbang/core/commands/CamelJBangMain.java    |   2 +
 .../core/commands/catalog/CatalogBaseCommand.java  |   6 +-
 .../core/commands/catalog/CatalogTransformer.java  |  57 +++++
 .../org/apache/camel/tooling/model/JsonMapper.java |  17 ++
 .../camel/tooling/model/TransformerModel.java      |  40 +++-
 .../maven/packaging/GenerateComponentMojo.java     |   2 +
 .../packaging/GenerateDataTypeTransformerMojo.java | 235 +++++++++++++++++++++
 .../packaging/GenerateInvokeOnHeaderMojo.java      |   2 +-
 .../apache/camel/maven/packaging/GenerateMojo.java |   2 +
 .../camel/maven/packaging/PrepareCatalogMojo.java  |  70 +++++-
 108 files changed, 1404 insertions(+), 98 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
new file mode 100644
index 00000000000..371ae705b6e
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers.properties
@@ -0,0 +1,21 @@
+application-cloudevents-json
+application-json
+application-octet-stream
+application-x-java-object
+application-x-struct
+avro-binary
+avro-x-java-object
+avro-x-struct
+aws-cloudtrail-application-cloudevents
+aws2-ddb-application-json
+aws2-s3-application-cloudevents
+aws2-sqs-application-cloudevents
+azure-storage-blob-application-cloudevents
+azure-storage-queue-application-cloudevents
+google-sheets-application-x-struct
+google-storage-application-cloudevents
+http-application-cloudevents
+protobuf-binary
+protobuf-x-java-object
+protobuf-x-struct
+text-plain
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-cloudevents-json.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-cloudevents-json.json
new file mode 100644
index 00000000000..99708b3f260
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-cloudevents-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-cloudevents+json",
+    "title": "Application Cloudevents+json",
+    "description": "Adds default CloudEvent (JSon binding) headers to the 
Camel message (such as content-type, event source, event type etc.)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.cloudevents.transformer.CloudEventJsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-cloudevents",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-json.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-json.json
new file mode 100644
index 00000000000..9ceb56c441c
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-json",
+    "title": "Application Json",
+    "description": "Transforms from JSon to binary (byte array) using Jackson",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-octet-stream.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-octet-stream.json
new file mode 100644
index 00000000000..9eb3b79fbbb
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-octet-stream.json
@@ -0,0 +1,13 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-octet-stream",
+    "title": "Application Octet Stream",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.processor.transformer.ByteArrayDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-core-processor",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-java-object.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-java-object.json
new file mode 100644
index 00000000000..f8cf2821393
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-x-java-object",
+    "title": "Application X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-struct.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-struct.json
new file mode 100644
index 00000000000..9a25ad645e6
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/application-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-x-struct",
+    "title": "Application X Struct",
+    "description": "Transforms to generic JSonNode using Jackson",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-binary.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-binary.json
new file mode 100644
index 00000000000..e5d97cb20c5
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-binary.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-binary",
+    "title": "Avro Binary",
+    "description": "Transforms from JSon to binary (byte array) using Jackson 
Avro (supports Avro schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroBinaryDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-java-object.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-java-object.json
new file mode 100644
index 00000000000..5b3b8ef8673
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-x-java-object",
+    "title": "Avro X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson Avro 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-struct.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-struct.json
new file mode 100644
index 00000000000..358a934a48a
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/avro-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-x-struct",
+    "title": "Avro X Struct",
+    "description": "Transforms to generic JSonNode using Jackson Avro 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws-cloudtrail-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws-cloudtrail-application-cloudevents.json
new file mode 100644
index 00000000000..74be5a728f1
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws-cloudtrail-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws-cloudtrail:application-cloudevents",
+    "title": "Aws Cloudtrail (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS 
Cloudtrail lookup events response details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws.cloudtrail.transform.CloudtrailCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws-cloudtrail",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-ddb-application-json.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-ddb-application-json.json
new file mode 100644
index 00000000000..af1ef6fdbff
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-ddb-application-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-ddb:application-json",
+    "title": "Aws2 Ddb (Application Json)",
+    "description": "Prepares the message to perform a DynamoDB operation with 
the aws2-ddb component",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.ddb.transform.Ddb2JsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-ddb",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-s3-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-s3-application-cloudevents.json
new file mode 100644
index 00000000000..9b85eae2df7
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-s3-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-s3:application-cloudevents",
+    "title": "Aws2 S3 (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS S3 
get object response details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.s3.transform.AWS2S3CloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-s3",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-sqs-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-sqs-application-cloudevents.json
new file mode 100644
index 00000000000..75b568d7c8c
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/aws2-sqs-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-sqs:application-cloudevents",
+    "title": "Aws2 Sqs (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS SQS 
receive message details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.sqs.transform.AWS2SQSCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-sqs",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-blob-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-blob-application-cloudevents.json
new file mode 100644
index 00000000000..908f09cb1a8
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-blob-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "azure-storage-blob:application-cloudevents",
+    "title": "Azure Storage Blob (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Azure 
Store Blob get blob information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.azure.storage.blob.transform.AzureStorageBlobCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-azure-storage-blob",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-queue-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-queue-application-cloudevents.json
new file mode 100644
index 00000000000..29bed1b3341
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/azure-storage-queue-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "azure-storage-queue:application-cloudevents",
+    "title": "Azure Storage Queue (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Azure 
Storage Queue receive message information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.azure.storage.queue.transform.AzureStorageQueueCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-azure-storage-queue",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-sheets-application-x-struct.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-sheets-application-x-struct.json
new file mode 100644
index 00000000000..d237393e64e
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-sheets-application-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "google-sheets:application-x-struct",
+    "title": "Google Sheets (Application X Struct)",
+    "description": "Transforms to\/from JSon data and Google Sheets ValueRange 
object",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.google.sheets.transform.GoogleSheetsJsonStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-sheets",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-storage-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-storage-application-cloudevents.json
new file mode 100644
index 00000000000..250592b78c3
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/google-storage-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "google-storage:application-cloudevents",
+    "title": "Google Storage (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Google 
Storage downloadTo response information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.google.storage.transform.GoogleStorageCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/http-application-cloudevents.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/http-application-cloudevents.json
new file mode 100644
index 00000000000..b9acfc98780
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/http-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "http:application-cloudevents",
+    "title": "Http (Application Cloudevents)",
+    "description": "Adds default CloudEvent (HTTP binding) headers to the 
Camel message (such as content-type, event source, event type etc.)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.cloudevents.transformer.CloudEventHttpDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-cloudevents",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-binary.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-binary.json
new file mode 100644
index 00000000000..6111dcaa843
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-binary.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-binary",
+    "title": "Protobuf Binary",
+    "description": "Transforms from JSon to binary (byte array) using Jackson 
Protobuf (supports Protobuf schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufBinaryDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-java-object.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-java-object.json
new file mode 100644
index 00000000000..9d22cd0808d
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-x-java-object",
+    "title": "Protobuf X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson Protobuf 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-struct.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-struct.json
new file mode 100644
index 00000000000..86bc82de954
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/protobuf-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-x-struct",
+    "title": "Protobuf X Struct",
+    "description": "Transforms to generic JSonNode using Jackson Protobuf 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/text-plain.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/text-plain.json
new file mode 100644
index 00000000000..d48faddafc9
--- /dev/null
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/transformers/text-plain.json
@@ -0,0 +1,13 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "text-plain",
+    "title": "Text Plain",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.processor.transformer.StringDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-core-processor",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 3b5fefe5ac3..ec167d2490e 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -31,6 +31,7 @@ import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.MainModel;
 import org.apache.camel.tooling.model.OtherModel;
 import org.apache.camel.tooling.model.ReleaseModel;
+import org.apache.camel.tooling.model.TransformerModel;
 
 /**
  * Catalog of components, data formats, models (EIPs), languages, and more 
from this Apache Camel release.
@@ -192,6 +193,11 @@ public interface CamelCatalog {
      */
     List<String> findLanguageNames();
 
+    /**
+     * Find all the transformer names from the Camel catalog
+     */
+    List<String> findTransformerNames();
+
     /**
      * Find all the model names from the Camel catalog
      */
@@ -214,6 +220,8 @@ public interface CamelCatalog {
                 return findDataFormatNames();
             case language:
                 return findLanguageNames();
+            case transformer:
+                return findTransformerNames();
             case other:
                 return findOtherNames();
             case eip:
@@ -272,6 +280,14 @@ public interface CamelCatalog {
      */
     String languageJSonSchema(String name);
 
+    /**
+     * Returns the transformer information as JSON format.
+     *
+     * @param  name the transformer name
+     * @return      transformer details in JSon
+     */
+    String transformerJSonSchema(String name);
+
     /**
      * Returns the other (miscellaneous) information as JSON format.
      *
@@ -487,6 +503,11 @@ public interface CamelCatalog {
      */
     String listLanguagesAsJson();
 
+    /**
+     * Lists all the transformers summary details in JSon
+     */
+    String listTransformersAsJson();
+
     /**
      * Lists all the models (EIPs) summary details in JSon
      */
@@ -520,6 +541,12 @@ public interface CamelCatalog {
      */
     LanguageModel languageModel(String name);
 
+    /**
+     * @param  name the transformer name to look up
+     * @return      the requested transformer or {@code null} in case it is 
not available in this {@link CamelCatalog}
+     */
+    TransformerModel transformerModel(String name);
+
     /**
      * @param  name the other name to look up
      * @return      the requested other or {@code null} in case it is not 
available in this {@link CamelCatalog}
@@ -552,6 +579,8 @@ public interface CamelCatalog {
                 return dataFormatModel(name);
             case language:
                 return languageModel(name);
+            case transformer:
+                return transformerModel(name);
             case other:
                 return otherModel(name);
             case eip:
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java
index b9c25c0c8f8..ca2d2994081 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalogJSonSchemaResolver.java
@@ -108,6 +108,12 @@ public class CamelCatalogJSonSchemaResolver implements 
JSonSchemaResolver {
         return loadResourceFromVersionManager(file);
     }
 
+    @Override
+    public String getTransformerJSonSchema(String name) {
+        final String file = 
camelCatalog.getRuntimeProvider().getTransformerJSonSchemaDirectory() + "/" + 
name + EXTENSION;
+        return loadResourceFromVersionManager(file);
+    }
+
     @Override
     public String getModelJSonSchema(String name) {
         final String file = MODEL_DIR + "/" + name + EXTENSION;
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index 81fea9dd310..3fbca05ec17 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -44,6 +44,7 @@ import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.MainModel;
 import org.apache.camel.tooling.model.OtherModel;
 import org.apache.camel.tooling.model.ReleaseModel;
+import org.apache.camel.tooling.model.TransformerModel;
 import org.apache.camel.util.json.JsonArray;
 import org.apache.camel.util.json.JsonObject;
 import org.apache.camel.util.json.Jsoner;
@@ -62,7 +63,9 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog 
implements CamelCa
     public static final String FIND_DATA_FORMAT_NAMES = "findDataFormatNames";
     public static final String LIST_DATA_FORMATS_AS_JSON = 
"listDataFormatsAsJson";
     public static final String FIND_LANGUAGE_NAMES = "findLanguageNames";
+    public static final String FIND_TRANSFORMER_NAMES = "findTransformerNames";
     public static final String LIST_LANGUAGES_AS_JSON = "listLanguagesAsJson";
+    public static final String LIST_TRANSFORMERS_AS_JSON = 
"listTransformersAsJson";
 
     private final VersionHelper version = new VersionHelper();
 
@@ -223,6 +226,11 @@ public class DefaultCamelCatalog extends 
AbstractCamelCatalog implements CamelCa
         return cache(FIND_LANGUAGE_NAMES, runtimeProvider::findLanguageNames);
     }
 
+    @Override
+    public List<String> findTransformerNames() {
+        return cache(FIND_TRANSFORMER_NAMES, 
runtimeProvider::findTransformerNames);
+    }
+
     @Override
     public List<String> findModelNames() {
         return cache("findModelNames", () -> {
@@ -328,11 +336,21 @@ public class DefaultCamelCatalog extends 
AbstractCamelCatalog implements CamelCa
         return cache("language-" + name, name, super::languageJSonSchema);
     }
 
+    @Override
+    public String transformerJSonSchema(String name) {
+        return cache("transformer-" + name, name, 
super::transformerJSonSchema);
+    }
+
     @Override
     public LanguageModel languageModel(String name) {
         return cache("language-model-" + name, name, super::languageModel);
     }
 
+    @Override
+    public TransformerModel transformerModel(String name) {
+        return cache("transformer-model-" + name, name, 
super::transformerModel);
+    }
+
     @Override
     public String otherJSonSchema(String name) {
         return cache("other-" + name, name, super::otherJSonSchema);
@@ -429,6 +447,15 @@ public class DefaultCamelCatalog extends 
AbstractCamelCatalog implements CamelCa
                 .toList()));
     }
 
+    @Override
+    public String listTransformersAsJson() {
+        return cache(LIST_TRANSFORMERS_AS_JSON, () -> 
JsonMapper.serialize(findTransformerNames().stream()
+                .map(this::transformerJSonSchema)
+                .map(JsonMapper::deserialize)
+                .map(o -> o.get("transformer"))
+                .toList()));
+    }
+
     @Override
     public String listModelsAsJson() {
         return cache("listModelsAsJson", () -> 
JsonMapper.serialize(findModelNames().stream()
@@ -487,6 +514,12 @@ public class DefaultCamelCatalog extends 
AbstractCamelCatalog implements CamelCa
                 return am;
             }
         }
+        for (String name : findTransformerNames()) {
+            ArtifactModel<?> am = transformerModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
         return null;
     }
 
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
index c7c9ada2018..308b0de64f9 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java
@@ -28,10 +28,12 @@ public class DefaultRuntimeProvider implements 
RuntimeProvider {
     private static final String COMPONENT_DIR = 
"org/apache/camel/catalog/components";
     private static final String DATAFORMAT_DIR = 
"org/apache/camel/catalog/dataformats";
     private static final String LANGUAGE_DIR = 
"org/apache/camel/catalog/languages";
+    private static final String TRANSFORMER_DIR = 
"org/apache/camel/catalog/transformers";
     private static final String OTHER_DIR = "org/apache/camel/catalog/others";
     private static final String COMPONENTS_CATALOG = 
"org/apache/camel/catalog/components.properties";
     private static final String DATA_FORMATS_CATALOG = 
"org/apache/camel/catalog/dataformats.properties";
     private static final String LANGUAGE_CATALOG = 
"org/apache/camel/catalog/languages.properties";
+    private static final String TRANSFORMER_CATALOG = 
"org/apache/camel/catalog/transformers.properties";
     private static final String OTHER_CATALOG = 
"org/apache/camel/catalog/others.properties";
 
     private CamelCatalog camelCatalog;
@@ -83,6 +85,11 @@ public class DefaultRuntimeProvider implements 
RuntimeProvider {
         return LANGUAGE_DIR;
     }
 
+    @Override
+    public String getTransformerJSonSchemaDirectory() {
+        return TRANSFORMER_DIR;
+    }
+
     @Override
     public String getOtherJSonSchemaDirectory() {
         return OTHER_DIR;
@@ -100,6 +107,10 @@ public class DefaultRuntimeProvider implements 
RuntimeProvider {
         return LANGUAGE_CATALOG;
     }
 
+    protected String getTransformerCatalog() {
+        return TRANSFORMER_CATALOG;
+    }
+
     protected String getOtherCatalog() {
         return OTHER_CATALOG;
     }
@@ -155,6 +166,23 @@ public class DefaultRuntimeProvider implements 
RuntimeProvider {
         return names;
     }
 
+    @Override
+    public List<String> findTransformerNames() {
+        List<String> names = new ArrayList<>();
+        try (InputStream is = 
getCamelCatalog().getVersionManager().getResourceAsStream(getTransformerCatalog()))
 {
+            if (is != null) {
+                try {
+                    CatalogHelper.loadLines(is, names);
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+        } catch (IOException e1) {
+            // ignore
+        }
+        return names;
+    }
+
     @Override
     public List<String> findOtherNames() {
         List<String> names = new ArrayList<>();
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
index 747d7b2c980..6ca4c43b5ad 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
@@ -23,6 +23,7 @@ public enum Kind {
     component,
     dataformat,
     language,
+    transformer,
     other,
     eip
 }
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
index 7cb20d0da26..2122773f5dc 100644
--- 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
+++ 
b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java
@@ -65,6 +65,11 @@ public interface RuntimeProvider {
      */
     String getLanguageJSonSchemaDirectory();
 
+    /**
+     * Gets the directory where the transformer json files are stored in the 
catalog JAR file
+     */
+    String getTransformerJSonSchemaDirectory();
+
     /**
      * Gets the directory where the other (miscellaneous) json files are 
stored in the catalog JAR file
      */
@@ -85,6 +90,11 @@ public interface RuntimeProvider {
      */
     List<String> findLanguageNames();
 
+    /**
+     * Find all the transfromer names from the Camel catalog supported by the 
provider
+     */
+    List<String> findTransformerNames();
+
     /**
      * Find all the other (miscellaneous) names from the Camel catalog 
supported by the provider
      */
diff --git 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogJsonSchemaTest.java
 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogJsonSchemaTest.java
index 84e58818272..bcdc8f19fc8 100644
--- 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogJsonSchemaTest.java
+++ 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogJsonSchemaTest.java
@@ -54,6 +54,10 @@ public class CamelCatalogJsonSchemaTest {
         return CATALOG.findLanguageNames().stream();
     }
 
+    static Stream<String> transformers() {
+        return CATALOG.findTransformerNames().stream();
+    }
+
     static Stream<String> models() {
         return CATALOG.findModelNames().stream();
     }
@@ -154,6 +158,21 @@ public class CamelCatalogJsonSchemaTest {
         assertTrue(tree.has("properties"), name);
     }
 
+    @ParameterizedTest
+    @MethodSource("transformers")
+    public void testValidateJsonTransformers(String name) throws Exception {
+        String json = CATALOG.transformerJSonSchema(name);
+        LOG.info("Validating {} transformer", name);
+        LOG.debug("with JSon: {}", json);
+
+        // validate we can parse the json
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode tree = mapper.readTree(json);
+        assertNotNull(tree);
+
+        assertTrue(tree.has("transformer"), name);
+    }
+
     @ParameterizedTest
     @MethodSource("models")
     public void testValidateJsonModels(String name) throws Exception {
diff --git 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index f4725ca3afc..7a020b5721f 100644
--- 
a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ 
b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -84,7 +84,7 @@ public class CamelCatalogTest {
         assertTrue(names.contains("log"));
         assertTrue(names.contains("docker"));
         assertTrue(names.contains("jms"));
-        // TODO: camel4 assertTrue(names.contains("activemq"));
+        assertTrue(names.contains("activemq"));
         assertTrue(names.contains("zookeeper-master"));
     }
 
@@ -127,6 +127,17 @@ public class CamelCatalogTest {
         assertTrue(names.contains("hl7terser"));
     }
 
+    @Test
+    public void testFindTransformerNames() {
+        List<String> names = catalog.findTransformerNames();
+
+        assertTrue(names.contains("application-cloudevents-json"));
+        assertTrue(names.contains("application-x-java-object"));
+        assertTrue(names.contains("aws-cloudtrail-application-cloudevents"));
+        
assertTrue(names.contains("azure-storage-queue-application-cloudevents"));
+        assertTrue(names.contains("http-application-cloudevents"));
+    }
+
     @Test
     public void testFindModelNames() {
         List<String> names = catalog.findModelNames();
@@ -868,6 +879,17 @@ public class CamelCatalogTest {
         assertNotNull(tree);
     }
 
+    @Test
+    public void testListTransformersAsJson() throws Exception {
+        String json = catalog.listTransformersAsJson();
+        assertNotNull(json);
+
+        // validate we can parse the json
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode tree = mapper.readTree(json);
+        assertNotNull(tree);
+    }
+
     @Test
     public void testListModelsAsJson() throws Exception {
         String json = catalog.listModelsAsJson();
diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..c576a45b018
--- /dev/null
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=aws-cloudtrail:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-aws-cloudtrail
+version=4.4.0-SNAPSHOT
+projectName=Camel :: AWS Cloutrail
+projectDescription=Consume Events coming from AWS Cloudtrail Service
diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents.json
 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents.json
new file mode 100644
index 00000000000..74be5a728f1
--- /dev/null
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws-cloudtrail-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws-cloudtrail:application-cloudevents",
+    "title": "Aws Cloudtrail (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS 
Cloudtrail lookup events response details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws.cloudtrail.transform.CloudtrailCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws-cloudtrail",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
index dbfc15a999f..1e943f0251f 100644
--- 
a/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/transform/CloudtrailCloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Data type transformer converts AWS Cloudtrail lookup events response to 
CloudEvent v1_0 data format. The data type
  * sets Camel specific CloudEvent headers with values extracted from AWS 
Cloudtrail lookup events response.
  */
-@DataTypeTransformer(name = "aws-cloudtrail:application-cloudevents")
+@DataTypeTransformer(name = "aws-cloudtrail:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with AWS 
Cloudtrail lookup events response details")
 public class CloudtrailCloudEventDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..3005b30aa28
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=aws2-ddb:application-json
+groupId=org.apache.camel
+artifactId=camel-aws2-ddb
+version=4.4.0-SNAPSHOT
+projectName=Camel :: AWS2 DDB
+projectDescription=Store and retrieve data and events from Amazon DynamoDB 
service
diff --git 
a/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-json.json
 
b/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-json.json
new file mode 100644
index 00000000000..af1ef6fdbff
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-ddb/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-ddb-application-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-ddb:application-json",
+    "title": "Aws2 Ddb (Application Json)",
+    "description": "Prepares the message to perform a DynamoDB operation with 
the aws2-ddb component",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.ddb.transform.Ddb2JsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-ddb",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
index e91883a1f6e..90167c3519c 100644
--- 
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
+++ 
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/transform/Ddb2JsonDataTypeTransformer.java
@@ -78,7 +78,8 @@ import 
software.amazon.awssdk.services.dynamodb.model.ReturnValue;
  * In case key and item attribute value maps are identical you can omit the 
special top level properties completely. The
  * transformer will map the whole Json body as is then and use it as source 
for the attribute value map.
  */
-@DataTypeTransformer(name = "aws2-ddb:application-json")
+@DataTypeTransformer(name = "aws2-ddb:application-json",
+description = "Prepares the message to perform a DynamoDB operation with the 
aws2-ddb component")
 public class Ddb2JsonDataTypeTransformer extends Transformer {
 
     private final JacksonDataFormat dataFormat = new 
JacksonDataFormat(Json.mapper(), JsonNode.class);
diff --git 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..0f4d056b934
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=aws2-s3:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-aws2-s3
+version=4.4.0-SNAPSHOT
+projectName=Camel :: AWS2 S3
+projectDescription=Consume files and upload files through AWS S3 Service
diff --git 
a/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents.json
 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents.json
new file mode 100644
index 00000000000..9b85eae2df7
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-s3/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-s3-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-s3:application-cloudevents",
+    "title": "Aws2 S3 (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS S3 
get object response details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.s3.transform.AWS2S3CloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-s3",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/transform/AWS2S3CloudEventDataTypeTransformer.java
 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/transform/AWS2S3CloudEventDataTypeTransformer.java
index a2840525835..eea4f345a45 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/transform/AWS2S3CloudEventDataTypeTransformer.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/main/java/org/apache/camel/component/aws2/s3/transform/AWS2S3CloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Data type transformer converts AWS S3 get object response to CloudEvent 
v1_0 data format. The data type sets Camel
  * specific CloudEvent headers with values extracted from AWS S3 get object 
response.
  */
-@DataTypeTransformer(name = "aws2-s3:application-cloudevents")
+@DataTypeTransformer(name = "aws2-s3:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with AWS 
S3 get object response details")
 public class AWS2S3CloudEventDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..81f9a390c12
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=aws2-sqs:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-aws2-sqs
+version=4.4.0-SNAPSHOT
+projectName=Camel :: AWS2 SQS
+projectDescription=Consume and produce messages through AWS SQS Service
diff --git 
a/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-sqs-application-cloudevents.json
 
b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-sqs-application-cloudevents.json
new file mode 100644
index 00000000000..75b568d7c8c
--- /dev/null
+++ 
b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/services/org/apache/camel/transformer/aws2-sqs-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "aws2-sqs:application-cloudevents",
+    "title": "Aws2 Sqs (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with AWS SQS 
receive message details",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.aws2.sqs.transform.AWS2SQSCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-aws2-sqs",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/transform/AWS2SQSCloudEventDataTypeTransformer.java
 
b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/transform/AWS2SQSCloudEventDataTypeTransformer.java
index 65a0afc328e..e847d7a43bd 100644
--- 
a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/transform/AWS2SQSCloudEventDataTypeTransformer.java
+++ 
b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/transform/AWS2SQSCloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Output data type represents AWS SQS receive Message response as CloudEvent 
V1. The data type sets Camel specific
  * CloudEvent headers on the exchange.
  */
-@DataTypeTransformer(name = "aws2-sqs:application-cloudevents")
+@DataTypeTransformer(name = "aws2-sqs:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with AWS 
SQS receive message details")
 public class AWS2SQSCloudEventDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..5a8799b6466
--- /dev/null
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=azure-storage-blob:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-azure-storage-blob
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Azure :: Storage Blob
+projectDescription=Camel Azure Blob Storage Service Component
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-blob-application-cloudevents.json
 
b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-blob-application-cloudevents.json
new file mode 100644
index 00000000000..908f09cb1a8
--- /dev/null
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-blob-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "azure-storage-blob:application-cloudevents",
+    "title": "Azure Storage Blob (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Azure 
Store Blob get blob information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.azure.storage.blob.transform.AzureStorageBlobCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-azure-storage-blob",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/transform/AzureStorageBlobCloudEventDataTypeTransformer.java
 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/transform/AzureStorageBlobCloudEventDataTypeTransformer.java
index 021f7c84cfa..ec1f294e461 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/transform/AzureStorageBlobCloudEventDataTypeTransformer.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/transform/AzureStorageBlobCloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Output data type represents Azure Storage Blob get blob response as 
CloudEvent V1. The data type sets Camel specific
  * CloudEvent headers on the exchange.
  */
-@DataTypeTransformer(name = "azure-storage-blob:application-cloudevents")
+@DataTypeTransformer(name = "azure-storage-blob:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with Azure 
Store Blob get blob information")
 public class AzureStorageBlobCloudEventDataTypeTransformer extends Transformer 
{
 
     @Override
diff --git 
a/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..1aa249873ff
--- /dev/null
+++ 
b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=azure-storage-queue:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-azure-storage-queue
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Azure :: Storage Queue
+projectDescription=Camel Azure Storage Queue Service Component
diff --git 
a/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-queue-application-cloudevents.json
 
b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-queue-application-cloudevents.json
new file mode 100644
index 00000000000..29bed1b3341
--- /dev/null
+++ 
b/components/camel-azure/camel-azure-storage-queue/src/generated/resources/META-INF/services/org/apache/camel/transformer/azure-storage-queue-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "azure-storage-queue:application-cloudevents",
+    "title": "Azure Storage Queue (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Azure 
Storage Queue receive message information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.azure.storage.queue.transform.AzureStorageQueueCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-azure-storage-queue",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/transform/AzureStorageQueueCloudEventDataTypeTransformer.java
 
b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/transform/AzureStorageQueueCloudEventDataTypeTransformer.java
index e5ea8fd5ae0..d8542af06ea 100644
--- 
a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/transform/AzureStorageQueueCloudEventDataTypeTransformer.java
+++ 
b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/transform/AzureStorageQueueCloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Output data type represents Azure Storage Queue receive messages operation 
as CloudEvent V1. The data type sets Camel
  * specific CloudEvent headers on the exchange.
  */
-@DataTypeTransformer(name = "azure-storage-queue:application-cloudevents")
+@DataTypeTransformer(name = "azure-storage-queue:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with Azure 
Storage Queue receive message information")
 public class AzureStorageQueueCloudEventDataTypeTransformer extends 
Transformer {
 
     @Override
diff --git 
a/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..91bf5087304
--- /dev/null
+++ 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=application-cloudevents+json http:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-cloudevents
+version=4.4.0-SNAPSHOT
+projectName=Camel :: CloudEvents
+projectDescription=Camel support for the CloudEvents specification
diff --git 
a/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-cloudevents-json.json
 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-cloudevents-json.json
new file mode 100644
index 00000000000..99708b3f260
--- /dev/null
+++ 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-cloudevents-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-cloudevents+json",
+    "title": "Application Cloudevents+json",
+    "description": "Adds default CloudEvent (JSon binding) headers to the 
Camel message (such as content-type, event source, event type etc.)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.cloudevents.transformer.CloudEventJsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-cloudevents",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/http-application-cloudevents.json
 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/http-application-cloudevents.json
new file mode 100644
index 00000000000..b9acfc98780
--- /dev/null
+++ 
b/components/camel-cloudevents/src/generated/resources/META-INF/services/org/apache/camel/transformer/http-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "http:application-cloudevents",
+    "title": "Http (Application Cloudevents)",
+    "description": "Adds default CloudEvent (HTTP binding) headers to the 
Camel message (such as content-type, event source, event type etc.)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.cloudevents.transformer.CloudEventHttpDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-cloudevents",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventHttpDataTypeTransformer.java
 
b/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventHttpDataTypeTransformer.java
index c52c9af460e..bfe295f27a3 100644
--- 
a/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventHttpDataTypeTransformer.java
+++ 
b/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventHttpDataTypeTransformer.java
@@ -32,7 +32,8 @@ import org.apache.camel.spi.Transformer;
  * headers and transforms these to Http headers according to the CloudEvents 
Http binding specification. Sets default
  * values for CloudEvent attributes such as the Http content type header, 
event source, event type.
  */
-@DataTypeTransformer(name = "http:application-cloudevents")
+@DataTypeTransformer(name = "http:application-cloudevents",
+        description = "Adds default CloudEvent (HTTP binding) headers to the 
Camel message (such as content-type, event source, event type etc.)")
 public class CloudEventHttpDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventJsonDataTypeTransformer.java
 
b/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventJsonDataTypeTransformer.java
index 1eef7d27fab..175687b5511 100644
--- 
a/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventJsonDataTypeTransformer.java
+++ 
b/components/camel-cloudevents/src/main/java/org/apache/camel/component/cloudevents/transformer/CloudEventJsonDataTypeTransformer.java
@@ -27,13 +27,15 @@ import org.apache.camel.component.cloudevents.CloudEvents;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeTransformer;
 import org.apache.camel.spi.Transformer;
+import org.apache.camel.support.MessageHelper;
 
 /**
  * Data type represents a default Camel CloudEvent V1 Json format binding. The 
data type reads Camel specific CloudEvent
  * headers and transforms these to a Json object representing the CloudEvents 
Json format specification. Sets default
  * values for CloudEvent attributes such as the Http content type header, 
event source, event type.
  */
-@DataTypeTransformer(name = "application-cloudevents+json")
+@DataTypeTransformer(name = "application-cloudevents+json",
+        description = "Adds default CloudEvent (JSon binding) headers to the 
Camel message (such as content-type, event source, event type etc.)")
 public class CloudEventJsonDataTypeTransformer extends Transformer {
 
     @Override
@@ -60,7 +62,8 @@ public class CloudEventJsonDataTypeTransformer extends 
Transformer {
         
cloudEventAttributes.putIfAbsent(cloudEvent.mandatoryAttribute(CloudEvent.CAMEL_CLOUD_EVENT_TIME).json(),
                 cloudEvent.getEventTime(message.getExchange()));
 
-        cloudEventAttributes.putIfAbsent("data", 
message.getBody(String.class));
+        String body = MessageHelper.extractBodyAsString(message);
+        cloudEventAttributes.putIfAbsent("data", body);
         
cloudEventAttributes.putIfAbsent(cloudEvent.mandatoryAttribute(CloudEvent.CAMEL_CLOUD_EVENT_DATA_CONTENT_TYPE).json(),
                 
headers.getOrDefault(CloudEvent.CAMEL_CLOUD_EVENT_CONTENT_TYPE, 
"application/json"));
 
diff --git 
a/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..679d3b9b21e
--- /dev/null
+++ 
b/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=google-sheets:application-x-struct
+groupId=org.apache.camel
+artifactId=camel-google-sheets
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Google :: Sheets
+projectDescription=Camel Component for Google Sheets
diff --git 
a/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-sheets-application-x-struct.json
 
b/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-sheets-application-x-struct.json
new file mode 100644
index 00000000000..d237393e64e
--- /dev/null
+++ 
b/components/camel-google/camel-google-sheets/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-sheets-application-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "google-sheets:application-x-struct",
+    "title": "Google Sheets (Application X Struct)",
+    "description": "Transforms to\/from JSon data and Google Sheets ValueRange 
object",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.google.sheets.transform.GoogleSheetsJsonStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-sheets",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/transform/GoogleSheetsJsonStructDataTypeTransformer.java
 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/transform/GoogleSheetsJsonStructDataTypeTransformer.java
index aedb745b9be..9f6960b28dc 100644
--- 
a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/transform/GoogleSheetsJsonStructDataTypeTransformer.java
+++ 
b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/transform/GoogleSheetsJsonStructDataTypeTransformer.java
@@ -37,6 +37,7 @@ import org.apache.camel.component.jackson.transform.Json;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeTransformer;
 import org.apache.camel.spi.Transformer;
+import org.apache.camel.support.MessageHelper;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -45,10 +46,11 @@ import org.apache.camel.util.ObjectHelper;
  * depending on the given message body content. When Google Sheets ValueRange 
object is given as message body (e.g. as a
  * result of a get values operation) the transformer will transform into 
generic Json struct. When generic Json struct
  * is given as a message body transformer will transform into a proper 
ValueRange object that is ready to be used in an
- * update/append values operation. Implementation also supports splitResults 
setting where a set of values is split into
+ * update/append values operation. The Implementation also supports 
splitResults setting where a set of values is split into
  * its individual items.
  */
-@DataTypeTransformer(name = "google-sheets:application-x-struct")
+@DataTypeTransformer(name = "google-sheets:application-x-struct",
+        description = "Transforms to/from JSon data and Google Sheets 
ValueRange object")
 public class GoogleSheetsJsonStructDataTypeTransformer extends Transformer {
 
     private static final String ROW_PREFIX = "#";
@@ -82,14 +84,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
 
     /**
      * Constructs proper ValueRange object from given generic Json struct.
-     *
-     * @param  message
-     * @param  spreadsheetId
-     * @param  range
-     * @param  majorDimension
-     * @param  valueInputOption
-     * @param  columnNames
-     * @return
      */
     private ValueRange transformToValueRangeModel(
             Message message, String spreadsheetId, String range, String 
majorDimension, String valueInputOption,
@@ -137,8 +131,7 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
             return valueRange;
         } catch (InvalidPayloadException | JsonProcessingException e) {
             throw new CamelExecutionException(
-                    "Failed to apply Google Sheets Json struct " +
-                                              "data type on exchange",
+                    "Failed to apply Google Sheets Json struct data type on 
exchange",
                     message.getExchange(), e);
         }
     }
@@ -146,14 +139,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Construct generic Json struct from given ValueRange object. Json struct 
represents the row and column values
      * only.
-     *
-     * @param  message
-     * @param  valueRange
-     * @param  spreadsheetId
-     * @param  range
-     * @param  majorDimension
-     * @param  columnNames
-     * @return
      */
     private List<String> transformFromValueRangeModel(
             Message message, ValueRange valueRange, String spreadsheetId, 
String range, String majorDimension,
@@ -199,8 +184,7 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
 
         } catch (IOException e) {
             throw new CamelExecutionException(
-                    "Failed to apply Google Sheets Json struct " +
-                                              "data type on exchange",
+                    "Failed to apply Google Sheets Json struct data type on 
exchange",
                     message.getExchange(), e);
         }
 
@@ -210,13 +194,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Construct generic Json struct from given split values model. Json 
struct represents the row and column values
      * only. In split mode one single row/column is handled as an individual 
result.
-     *
-     * @param  message
-     * @param  spreadsheetId
-     * @param  range
-     * @param  majorDimension
-     * @param  columnNames
-     * @return
      */
     private String transformFromSplitValuesModel(
             Message message, String spreadsheetId, String range, String 
majorDimension, String[] columnNames) {
@@ -255,8 +232,7 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
             return Json.mapper().writer().writeValueAsString(model);
         } catch (InvalidPayloadException | JsonProcessingException e) {
             throw new CamelExecutionException(
-                    "Failed to apply Google Sheets Json struct " +
-                                              "data type on exchange",
+                    "Failed to apply Google Sheets Json struct data type on 
exchange",
                     message.getExchange(), e);
         }
     }
@@ -264,16 +240,13 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Try to convert message body to a ValueRange object if possible. Returns 
empty optional when message body
      * conversion is not applicable.
-     *
-     * @param  message
-     * @return
      */
     private static Optional<ValueRange> getValueRangeBody(Message message) {
         if (message.getBody() instanceof ValueRange) {
             return Optional.of(message.getBody(ValueRange.class));
         }
 
-        String jsonBody = message.getBody(String.class);
+        String jsonBody = MessageHelper.extractBodyAsString(message);
         if (jsonBody != null) {
             try {
                 ValueRange valueRange = 
Json.mapper().reader().readValue(jsonBody, ValueRange.class);
@@ -289,10 +262,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Converts message body to list of Json objects. Supports different 
message body types such as List, String,
      * InputStream.
-     *
-     * @param  message
-     * @return
-     * @throws JsonProcessingException
      */
     private static List<String> bodyAsJsonBeans(Message message) throws 
JsonProcessingException, InvalidPayloadException {
         if (message.getBody() == null) {
@@ -316,11 +285,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Construct row and column coordinate names for given range. Supports 
mapping of custom column names to proper
      * row/column coordinates.
-     *
-     * @param  range
-     * @param  majorDimension
-     * @param  columnNames
-     * @return
      */
     public static ArrayList<String> createCoordinateNameSpec(String range, 
String majorDimension, String... columnNames) {
         ArrayList<String> names = new ArrayList<>();
@@ -338,10 +302,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Create dynamic json schema from row dimension. If split only a single 
object "ROW" holding 1-n column values is
      * created. Otherwise, each row results in a separate object with 1-n 
column values as property.
-     *
-     * @param properties
-     * @param coordinate
-     * @param columnNames
      */
     private static void createSchemaFromRowDimension(
             ArrayList<String> properties, RangeCoordinate coordinate, 
String... columnNames) {
@@ -353,9 +313,6 @@ public class GoogleSheetsJsonStructDataTypeTransformer 
extends Transformer {
     /**
      * Create dynamic json schema from column dimension. If split only a 
single object "COLUMN" holding 1-n row values
      * is created. Otherwise, each column results in a separate object with 
1-n row values as property.
-     *
-     * @param properties
-     * @param coordinate
      */
     private static void createSchemaFromColumnDimension(ArrayList<String> 
properties, RangeCoordinate coordinate) {
         for (int i = coordinate.getRowStartIndex() + 1; i <= 
coordinate.getRowEndIndex(); i++) {
diff --git 
a/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..3fc322dc308
--- /dev/null
+++ 
b/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=google-storage:application-cloudevents
+groupId=org.apache.camel
+artifactId=camel-google-storage
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Google :: Storage
+projectDescription=For storing and accessing data on Google Cloud Platform
diff --git 
a/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-storage-application-cloudevents.json
 
b/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-storage-application-cloudevents.json
new file mode 100644
index 00000000000..250592b78c3
--- /dev/null
+++ 
b/components/camel-google/camel-google-storage/src/generated/resources/META-INF/services/org/apache/camel/transformer/google-storage-application-cloudevents.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "google-storage:application-cloudevents",
+    "title": "Google Storage (Application Cloudevents)",
+    "description": "Adds CloudEvent headers to the Camel message with Google 
Storage downloadTo response information",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.google.storage.transform.GoogleStorageCloudEventDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-google-storage",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/transform/GoogleStorageCloudEventDataTypeTransformer.java
 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/transform/GoogleStorageCloudEventDataTypeTransformer.java
index a5f8158f1f3..5a7a99eb20c 100644
--- 
a/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/transform/GoogleStorageCloudEventDataTypeTransformer.java
+++ 
b/components/camel-google/camel-google-storage/src/main/java/org/apache/camel/component/google/storage/transform/GoogleStorageCloudEventDataTypeTransformer.java
@@ -31,7 +31,8 @@ import org.apache.camel.spi.Transformer;
  * Output data type represents Google Storage downloadTo response as 
CloudEvent V1. The data type sets Camel specific
  * CloudEvent headers on the exchange.
  */
-@DataTypeTransformer(name = "google-storage:application-cloudevents")
+@DataTypeTransformer(name = "google-storage:application-cloudevents",
+        description = "Adds CloudEvent headers to the Camel message with 
Google Storage downloadTo response information")
 public class GoogleStorageCloudEventDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..749815bc9c8
--- /dev/null
+++ 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=avro-binary avro-x-java-object avro-x-struct
+groupId=org.apache.camel
+artifactId=camel-jackson-avro
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Jackson Avro
+projectDescription=Camel Jackson Avro support
diff --git 
a/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-binary.json
 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-binary.json
new file mode 100644
index 00000000000..e5d97cb20c5
--- /dev/null
+++ 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-binary.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-binary",
+    "title": "Avro Binary",
+    "description": "Transforms from JSon to binary (byte array) using Jackson 
Avro (supports Avro schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroBinaryDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-java-object.json
 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-java-object.json
new file mode 100644
index 00000000000..5b3b8ef8673
--- /dev/null
+++ 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-x-java-object",
+    "title": "Avro X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson Avro 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-struct.json
 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-struct.json
new file mode 100644
index 00000000000..358a934a48a
--- /dev/null
+++ 
b/components/camel-jackson-avro/src/generated/resources/META-INF/services/org/apache/camel/transformer/avro-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "avro-x-struct",
+    "title": "Avro X Struct",
+    "description": "Transforms to generic JSonNode using Jackson Avro 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.avro.transform.AvroStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-avro",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/Avro.java
 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/Avro.java
index e1ce3fbba44..6e47a1cfa5a 100644
--- 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/Avro.java
+++ 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/Avro.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.avro.transform;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
diff --git 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroBinaryDataTypeTransformer.java
 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroBinaryDataTypeTransformer.java
index af3ed9598f5..c59ab4d1cdc 100644
--- 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroBinaryDataTypeTransformer.java
+++ 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroBinaryDataTypeTransformer.java
@@ -39,7 +39,8 @@ import org.apache.camel.spi.Transformer;
  * representation. Uses given Avro schema from the Exchange properties when 
marshalling the payload (usually already
  * resolved via schema resolver).
  */
-@DataTypeTransformer(name = "avro-binary")
+@DataTypeTransformer(name = "avro-binary",
+        description = "Transforms from JSon to binary (byte array) using 
Jackson Avro (supports Avro schema)")
 public class AvroBinaryDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformer.java
 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformer.java
index e58c87ca63e..abc6b12b202 100644
--- 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformer.java
+++ 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroPojoDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.avro.transform;
 
 import java.io.IOException;
@@ -34,7 +33,8 @@ import org.apache.camel.spi.DataTypeTransformer;
  * object mapper implementation for the unmarshal operation. Requires proper 
setting of content schema, class and schema
  * type in Exchange properties (usually resolved via Json schema resolver).
  */
-@DataTypeTransformer(name = "avro-x-java-object")
+@DataTypeTransformer(name = "avro-x-java-object",
+        description = "Transforms from JSon to Java object using Jackson Avro 
(supports content schema)")
 public class AvroPojoDataTypeTransformer extends JsonPojoDataTypeTransformer {
 
     @Override
diff --git 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroSchemaResolver.java
 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroSchemaResolver.java
index 8d0a2a44c5a..d533e5bf307 100644
--- 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroSchemaResolver.java
+++ 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroSchemaResolver.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.avro.transform;
 
 import java.io.InputStream;
diff --git 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroStructDataTypeTransformer.java
 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroStructDataTypeTransformer.java
index 3c8a975915b..ac89e1474d0 100644
--- 
a/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroStructDataTypeTransformer.java
+++ 
b/components/camel-jackson-avro/src/main/java/org/apache/camel/component/jackson/avro/transform/AvroStructDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.avro.transform;
 
 import java.io.ByteArrayInputStream;
@@ -37,7 +36,8 @@ import org.apache.camel.spi.Transformer;
  * Data type uses Avro Jackson data format to unmarshal Exchange body to 
generic JsonNode. Uses given Avro schema from
  * the Exchange properties when unmarshalling the payload (usually already 
resolved via schema resolver).
  */
-@DataTypeTransformer(name = "avro-x-struct")
+@DataTypeTransformer(name = "avro-x-struct",
+        description = "Transforms to generic JSonNode using Jackson Avro 
(supports content schema)")
 public class AvroStructDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..494944ff30f
--- /dev/null
+++ 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=protobuf-binary protobuf-x-java-object protobuf-x-struct
+groupId=org.apache.camel
+artifactId=camel-jackson-protobuf
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Jackson Protobuf
+projectDescription=Camel Jackson Protobuf support
diff --git 
a/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-binary.json
 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-binary.json
new file mode 100644
index 00000000000..6111dcaa843
--- /dev/null
+++ 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-binary.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-binary",
+    "title": "Protobuf Binary",
+    "description": "Transforms from JSon to binary (byte array) using Jackson 
Protobuf (supports Protobuf schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufBinaryDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-java-object.json
 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-java-object.json
new file mode 100644
index 00000000000..9d22cd0808d
--- /dev/null
+++ 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-x-java-object",
+    "title": "Protobuf X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson Protobuf 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-struct.json
 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-struct.json
new file mode 100644
index 00000000000..86bc82de954
--- /dev/null
+++ 
b/components/camel-jackson-protobuf/src/generated/resources/META-INF/services/org/apache/camel/transformer/protobuf-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "protobuf-x-struct",
+    "title": "Protobuf X Struct",
+    "description": "Transforms to generic JSonNode using Jackson Protobuf 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.protobuf.transform.ProtobufStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson-protobuf",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/Protobuf.java
 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/Protobuf.java
index b46d54814d7..81d4a16ba5f 100644
--- 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/Protobuf.java
+++ 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/Protobuf.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.protobuf.transform;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
diff --git 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufBinaryDataTypeTransformer.java
 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufBinaryDataTypeTransformer.java
index b9007650e23..6d73884220b 100644
--- 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufBinaryDataTypeTransformer.java
+++ 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufBinaryDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.protobuf.transform;
 
 import java.io.ByteArrayInputStream;
@@ -39,7 +38,8 @@ import org.apache.camel.spi.Transformer;
  * representation. Uses given Protobuf schema from the Exchange properties 
when marshalling the payload (usually already
  * resolved via schema resolver).
  */
-@DataTypeTransformer(name = "protobuf-binary")
+@DataTypeTransformer(name = "protobuf-binary",
+        description = "Transforms from JSon to binary (byte array) using 
Jackson Protobuf (supports Protobuf schema)")
 public class ProtobufBinaryDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufPojoDataTypeTransformer.java
 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufPojoDataTypeTransformer.java
index 4befcbfb88b..7dd3731cca5 100644
--- 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufPojoDataTypeTransformer.java
+++ 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufPojoDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.protobuf.transform;
 
 import java.io.IOException;
@@ -34,7 +33,8 @@ import org.apache.camel.spi.DataTypeTransformer;
  * Protobuf object mapper implementation for the unmarshal operation. Requires 
proper setting of content schema, class
  * and schema type in Exchange properties (usually resolved via Json schema 
resolver).
  */
-@DataTypeTransformer(name = "protobuf-x-java-object")
+@DataTypeTransformer(name = "protobuf-x-java-object",
+        description = "Transforms from JSon to Java object using Jackson 
Protobuf (supports content schema)")
 public class ProtobufPojoDataTypeTransformer extends 
JsonPojoDataTypeTransformer {
 
     @Override
diff --git 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufSchemaResolver.java
 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufSchemaResolver.java
index c3aeed976b9..030e6505d8c 100644
--- 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufSchemaResolver.java
+++ 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufSchemaResolver.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.protobuf.transform;
 
 import java.io.IOException;
diff --git 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufStructDataTypeTransformer.java
 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufStructDataTypeTransformer.java
index 7d7a64551dc..a18b9a3627b 100644
--- 
a/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufStructDataTypeTransformer.java
+++ 
b/components/camel-jackson-protobuf/src/main/java/org/apache/camel/component/jackson/protobuf/transform/ProtobufStructDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.protobuf.transform;
 
 import java.io.ByteArrayInputStream;
@@ -38,7 +37,8 @@ import org.apache.camel.spi.Transformer;
  * Data type uses Protobuf Jackson data format to unmarshal Exchange body to 
generic JsonNode. Uses given Protobuf
  * schema from the Exchange properties when unmarshalling the payload (usually 
already resolved via schema resolver).
  */
-@DataTypeTransformer(name = "protobuf-x-struct")
+@DataTypeTransformer(name = "protobuf-x-struct",
+        description = "Transforms to generic JSonNode using Jackson Protobuf 
(supports content schema)")
 public class ProtobufStructDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..f379089dfff
--- /dev/null
+++ 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=application-json application-x-java-object application-x-struct
+groupId=org.apache.camel
+artifactId=camel-jackson
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Jackson
+projectDescription=Camel Jackson support
diff --git 
a/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-json.json
 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-json.json
new file mode 100644
index 00000000000..9ceb56c441c
--- /dev/null
+++ 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-json.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-json",
+    "title": "Application Json",
+    "description": "Transforms from JSon to binary (byte array) using Jackson",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-java-object.json
 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-java-object.json
new file mode 100644
index 00000000000..f8cf2821393
--- /dev/null
+++ 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-java-object.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-x-java-object",
+    "title": "Application X Java Object",
+    "description": "Transforms from JSon to Java object using Jackson 
(supports content schema)",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonPojoDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-struct.json
 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-struct.json
new file mode 100644
index 00000000000..9a25ad645e6
--- /dev/null
+++ 
b/components/camel-jackson/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-x-struct.json
@@ -0,0 +1,14 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-x-struct",
+    "title": "Application X Struct",
+    "description": "Transforms to generic JSonNode using Jackson",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.component.jackson.transform.JsonStructDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jackson",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/Json.java
 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/Json.java
index 2a4578214cf..7081eff96df 100644
--- 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/Json.java
+++ 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/Json.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.transform;
 
 import java.util.ArrayList;
diff --git 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonDataTypeTransformer.java
 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonDataTypeTransformer.java
index 8553de0823e..4554ae6efae 100644
--- 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonDataTypeTransformer.java
+++ 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.transform;
 
 import java.nio.charset.StandardCharsets;
@@ -34,7 +33,8 @@ import org.apache.camel.spi.Transformer;
  * Data type uses Jackson data format to marshal given Exchange payload to a 
Json (binary byte array representation).
  * Requires Exchange payload as JsonNode representation.
  */
-@DataTypeTransformer(name = "application-json")
+@DataTypeTransformer(name = "application-json",
+        description = "Transforms from JSon to binary (byte array) using 
Jackson")
 public class JsonDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonPojoDataTypeTransformer.java
 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonPojoDataTypeTransformer.java
index 6877613a01f..9a1f9e1e031 100644
--- 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonPojoDataTypeTransformer.java
+++ 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonPojoDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.transform;
 
 import java.io.ByteArrayInputStream;
@@ -42,7 +41,8 @@ import org.apache.camel.util.ObjectHelper;
  * mapper implementation for the unmarshal operation. Requires proper setting 
of content schema, class and schema type
  * in Exchange properties (usually resolved via Json schema resolver).
  */
-@DataTypeTransformer(name = "application-x-java-object")
+@DataTypeTransformer(name = "application-x-java-object",
+        description = "Transforms from JSon to Java object using Jackson 
(supports content schema)")
 public class JsonPojoDataTypeTransformer extends Transformer implements 
CamelContextAware {
 
     private CamelContext camelContext;
diff --git 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonSchemaResolver.java
 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonSchemaResolver.java
index be93d622473..27a3e5b7dba 100644
--- 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonSchemaResolver.java
+++ 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonSchemaResolver.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.transform;
 
 import java.io.InputStream;
diff --git 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonStructDataTypeTransformer.java
 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonStructDataTypeTransformer.java
index 36a0877115a..101e9812894 100644
--- 
a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonStructDataTypeTransformer.java
+++ 
b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/transform/JsonStructDataTypeTransformer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.jackson.transform;
 
 import java.io.ByteArrayInputStream;
@@ -36,7 +35,8 @@ import org.apache.camel.spi.Transformer;
 /**
  * Data type uses Jackson data format to unmarshal Exchange body to a generic 
JsonNode representation.
  */
-@DataTypeTransformer(name = "application-x-struct")
+@DataTypeTransformer(name = "application-x-struct",
+        description = "Transforms to generic JSonNode using Jackson")
 public class JsonStructDataTypeTransformer extends Transformer {
 
     @Override
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/CatalogCamelContext.java 
b/core/camel-api/src/main/java/org/apache/camel/CatalogCamelContext.java
index b388dd8fcca..7b2e7ffdd69 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CatalogCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CatalogCamelContext.java
@@ -47,6 +47,14 @@ public interface CatalogCamelContext extends CamelContext {
      */
     String getLanguageParameterJsonSchema(String languageName) throws 
IOException;
 
+    /**
+     * Returns the JSON schema representation of the {@link 
org.apache.camel.spi.DataTypeTransformer} parameters for the
+     * given transformer name.
+     *
+     * @return the json or <tt>null</tt> if the transformer does not exist
+     */
+    String getTransformerParameterJsonSchema(String transformerName) throws 
IOException;
+
     /**
      * Returns the JSON schema representation of the EIP parameters for the 
given EIP name.
      *
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java 
b/core/camel-api/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
index d54364fdede..788fc9b96b6 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
@@ -50,6 +50,14 @@ public interface JSonSchemaResolver {
      */
     String getLanguageJSonSchema(String name);
 
+    /**
+     * Returns the transformer information as JSON format.
+     *
+     * @param  name the transformer name
+     * @return      transformer details in JSon
+     */
+    String getTransformerJSonSchema(String name);
+
     /**
      * Returns the other (miscellaneous) information as JSON format.
      *
diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/DataTypeTransformer.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/DataTypeTransformer.java
index 9d3de679f6a..24a6a757501 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/DataTypeTransformer.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DataTypeTransformer.java
@@ -53,4 +53,9 @@ public @interface DataTypeTransformer {
      */
     String toType() default "";
 
+    /**
+     * A human-readable description of what this transformer can do.
+     */
+    String description() default "";
+
 }
diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index c1aed60c68a..118af831990 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -1463,8 +1463,24 @@ public abstract class AbstractCamelContext extends 
BaseService
         return null;
     }
 
+    @Override
+    public String getTransformerParameterJsonSchema(String transformerName) 
throws IOException {
+        String name = sanitizeFileName(transformerName) + ".json";
+        String path = 
DefaultTransformerResolver.DATA_TYPE_TRANSFORMER_RESOURCE_PATH + name;
+        String inputStream = doLoadResource(transformerName, path, 
"transformer");
+        if (inputStream != null) {
+            return inputStream;
+        }
+        return null;
+    }
+
     // Helper methods
     // -----------------------------------------------------------------------
+
+    private String sanitizeFileName(String fileName) {
+        return fileName.replaceAll("[^A-Za-z0-9-]", "-");
+    }
+
     @Override
     public String getEipParameterJsonSchema(String eipName) throws IOException 
{
         // the eip json schema may be in some of the sub-packages so look until
diff --git 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
index 84d998fa840..89255902142 100644
--- 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
+++ 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
@@ -53,6 +53,7 @@ import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.MainModel;
 import org.apache.camel.tooling.model.OtherModel;
+import org.apache.camel.tooling.model.TransformerModel;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ReflectionHelper;
 import org.apache.camel.util.StringHelper;
@@ -112,6 +113,15 @@ public abstract class AbstractCamelCatalog {
         return json != null ? JsonMapper.generateLanguageModel(json) : null;
     }
 
+    public String transformerJSonSchema(String name) {
+        return getJSonSchemaResolver().getTransformerJSonSchema(name);
+    }
+
+    public TransformerModel transformerModel(String name) {
+        String json = transformerJSonSchema(name);
+        return json != null ? JsonMapper.generateTransformerModel(json) : null;
+    }
+
     public String otherJSonSchema(String name) {
         return getJSonSchemaResolver().getOtherJSonSchema(name);
     }
diff --git 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelContextJSonSchemaResolver.java
 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelContextJSonSchemaResolver.java
index dbda9bd0d35..bf427a042c4 100644
--- 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelContextJSonSchemaResolver.java
+++ 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/CamelContextJSonSchemaResolver.java
@@ -72,6 +72,16 @@ public class CamelContextJSonSchemaResolver implements 
JSonSchemaResolver {
         return null;
     }
 
+    @Override
+    public String getTransformerJSonSchema(String name) {
+        try {
+            return camelContext.getTransformerParameterJsonSchema(name);
+        } catch (IOException e) {
+            // ignore
+        }
+        return null;
+    }
+
     @Override
     public String getOtherJSonSchema(String name) {
         // not supported
diff --git 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/DefaultRuntimeCamelCatalog.java
 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/DefaultRuntimeCamelCatalog.java
index f88a7b1bf9b..0523b0d46fc 100644
--- 
a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/DefaultRuntimeCamelCatalog.java
+++ 
b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/DefaultRuntimeCamelCatalog.java
@@ -29,6 +29,7 @@ import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.MainModel;
 import org.apache.camel.tooling.model.OtherModel;
+import org.apache.camel.tooling.model.TransformerModel;
 
 /**
  * Default {@link RuntimeCamelCatalog}.
@@ -116,6 +117,16 @@ public class DefaultRuntimeCamelCatalog extends 
AbstractCamelCatalog implements
         return cache("language-model-" + name, name, super::languageModel);
     }
 
+    @Override
+    public String transformerJSonSchema(String name) {
+        return cache("transformer-" + name, name, 
super::transformerJSonSchema);
+    }
+
+    @Override
+    public TransformerModel transformerModel(String name) {
+        return cache("transformer-model-" + name, name, 
super::transformerModel);
+    }
+
     @Override
     public String otherJSonSchema(String name) {
         return cache("other-" + name, name, super::otherJSonSchema);
diff --git 
a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
new file mode 100644
index 00000000000..9e149f18fcf
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+transformers=application-octet-stream text-plain
+groupId=org.apache.camel
+artifactId=camel-core-processor
+version=4.4.0-SNAPSHOT
+projectName=Camel :: Core Processor
+projectDescription=Camel core processors
diff --git 
a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-octet-stream.json
 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-octet-stream.json
new file mode 100644
index 00000000000..9eb3b79fbbb
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/application-octet-stream.json
@@ -0,0 +1,13 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "application-octet-stream",
+    "title": "Application Octet Stream",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.processor.transformer.ByteArrayDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-core-processor",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/text-plain.json
 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/text-plain.json
new file mode 100644
index 00000000000..d48faddafc9
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/text-plain.json
@@ -0,0 +1,13 @@
+{
+  "transformer": {
+    "kind": "transformer",
+    "name": "text-plain",
+    "title": "Text Plain",
+    "deprecated": false,
+    "javaType": 
"org.apache.camel.processor.transformer.StringDataTypeTransformer",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-core-processor",
+    "version": "4.4.0-SNAPSHOT"
+  }
+}
+
diff --git 
a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/transformers.json
 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/transformers.json
new file mode 100644
index 00000000000..0e33f276033
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/transformer/transformers.json
@@ -0,0 +1,19 @@
+{
+  "transformers": [
+    {
+      "groupId": "org.apache.camel",
+      "artifactId": "camel-core-processor",
+      "version": "4.4.0-SNAPSHOT",
+      "className": 
"org.apache.camel.processor.transformer.ByteArrayDataTypeTransformer",
+      "name": "application-octet-stream"
+    },
+    {
+      "groupId": "org.apache.camel",
+      "artifactId": "camel-core-processor",
+      "version": "4.4.0-SNAPSHOT",
+      "className": 
"org.apache.camel.processor.transformer.StringDataTypeTransformer",
+      "name": "text-plain"
+    }
+  ]
+}
+
diff --git 
a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/io/ModelJSonSchemaResolver.java
 
b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/io/ModelJSonSchemaResolver.java
index d9c2e6c0bf4..300ec9535d0 100644
--- 
a/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/io/ModelJSonSchemaResolver.java
+++ 
b/core/camel-yaml-io/src/main/java/org/apache/camel/yaml/io/ModelJSonSchemaResolver.java
@@ -49,6 +49,11 @@ class ModelJSonSchemaResolver implements JSonSchemaResolver {
         throw new UnsupportedOperationException("Only getModelJSonSchema is in 
use");
     }
 
+    @Override
+    public String getTransformerJSonSchema(String name) {
+        throw new UnsupportedOperationException("Only getModelJSonSchema is in 
use");
+    }
+
     @Override
     public String getOtherJSonSchema(String name) {
         throw new UnsupportedOperationException("Only getModelJSonSchema is in 
use");
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 79c6b90dfe8..5d7b3620824 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -28,6 +28,7 @@ import 
org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDoc;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogKamelet;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogLanguage;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogOther;
+import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogTransformer;
 import org.apache.camel.dsl.jbang.core.commands.config.ConfigCommand;
 import org.apache.camel.dsl.jbang.core.commands.config.ConfigGet;
 import org.apache.camel.dsl.jbang.core.commands.config.ConfigList;
@@ -117,6 +118,7 @@ public class CamelJBangMain implements Callable<Integer> {
                         .addSubcommand("component", new CommandLine(new 
CatalogComponent(main)))
                         .addSubcommand("dataformat", new CommandLine(new 
CatalogDataFormat(main)))
                         .addSubcommand("language", new CommandLine(new 
CatalogLanguage(main)))
+                        .addSubcommand("transformer", new CommandLine(new 
CatalogTransformer(main)))
                         .addSubcommand("other", new CommandLine(new 
CatalogOther(main)))
                         .addSubcommand("kamelet", new CommandLine(new 
CatalogKamelet(main))))
                 .addSubcommand("doc", new CommandLine(new CatalogDoc(main)))
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index b92a5944ef8..0d4c79cfd76 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -143,7 +143,7 @@ public abstract class CatalogBaseCommand extends 
CamelCommand {
                                         "native", 
row.nativeSupported)).collect(Collectors.toList())));
             } else {
                 printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
-                        new 
Column().header("NAME").visible(!gav).dataAlign(HorizontalAlign.LEFT).maxWidth(30)
+                        new 
Column().header("NAME").visible(!gav).dataAlign(HorizontalAlign.LEFT).maxWidth(nameWidth())
                                 .with(r -> r.name),
                         new 
Column().header("ARTIFACT-ID").visible(gav).dataAlign(HorizontalAlign.LEFT).with(this::shortGav),
                         new 
Column().header("LEVEL").dataAlign(HorizontalAlign.LEFT).with(r -> r.level),
@@ -157,6 +157,10 @@ public abstract class CatalogBaseCommand extends 
CamelCommand {
         return 0;
     }
 
+    int nameWidth() {
+        return 30;
+    }
+
     int sortRow(Row o1, Row o2) {
         String s = sort;
         int negate = 1;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogTransformer.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogTransformer.java
new file mode 100644
index 00000000000..f527c113a27
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogTransformer.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.catalog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.tooling.model.TransformerModel;
+import picocli.CommandLine;
+
[email protected](name = "transformer",
+                     description = "List data type transformers from the Camel 
Catalog", sortOptions = false)
+public class CatalogTransformer extends CatalogBaseCommand {
+
+    public CatalogTransformer(CamelJBangMain main) {
+        super(main);
+    }
+
+    @Override
+    int nameWidth() {
+        return 60;
+    }
+
+    @Override
+    List<Row> collectRows() {
+        List<Row> rows = new ArrayList<>();
+        for (String name : catalog.findTransformerNames()) {
+            TransformerModel model = catalog.transformerModel(name);
+            if (model != null) {
+                Row row = new Row();
+                row.name = model.getName();
+                row.title = model.getTitle();
+                row.description = model.getDescription();
+                row.deprecated = model.isDeprecated();
+                row.gav = getGAV(model);
+                rows.add(row);
+            }
+        }
+        return rows;
+    }
+
+}
diff --git 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
index caeda324f43..81f129e8d7c 100644
--- 
a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/JsonMapper.java
@@ -64,6 +64,8 @@ public final class JsonMapper {
             return generateLanguageModel(obj);
         } else if (obj.containsKey("dataformat")) {
             return generateDataFormatModel(obj);
+        } else if (obj.containsKey("transformer")) {
+            return generateTransformerModel(obj);
         } else if (obj.containsKey("other")) {
             return generateOtherModel(obj);
         } else if (obj.containsKey("model")) {
@@ -359,6 +361,21 @@ public final class JsonMapper {
         return wrapper;
     }
 
+    public static TransformerModel generateTransformerModel(String json) {
+        JsonObject obj = deserialize(json);
+        return generateTransformerModel(obj);
+    }
+
+    public static TransformerModel generateTransformerModel(JsonObject obj) {
+        JsonObject mobj = (JsonObject) obj.get("transformer");
+        TransformerModel model = new TransformerModel();
+        parseModel(mobj, model);
+        model.setFrom(mobj.getString("from"));
+        model.setTo(mobj.getString("to"));
+        parseArtifact(mobj, model);
+        return model;
+    }
+
     public static OtherModel generateOtherModel(String json) {
         JsonObject obj = deserialize(json);
         return generateOtherModel(obj);
diff --git 
a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/TransformerModel.java
similarity index 60%
copy from catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
copy to 
tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/TransformerModel.java
index 747d7b2c980..3e6db9254ca 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
+++ 
b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/TransformerModel.java
@@ -14,15 +14,35 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.catalog;
+package org.apache.camel.tooling.model;
+
+public class TransformerModel extends ArtifactModel<BaseOptionModel> {
+
+    protected String from;
+    protected String to;
+
+    public TransformerModel() {
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getTo() {
+        return to;
+    }
+
+    public void setTo(String to) {
+        this.to = to;
+    }
+
+    @Override
+    public String getKind() {
+        return "transformer";
+    }
 
-/**
- * Kind of a Camel part, such as component, dataformat, language, etc.
- */
-public enum Kind {
-    component,
-    dataformat,
-    language,
-    other,
-    eip
 }
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
index c5de00de8b4..39e69a47d0a 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
@@ -48,6 +48,8 @@ public class GenerateComponentMojo extends 
AbstractGenerateMojo {
         invoke(GenerateEndpointUriFactoryMojo.class);
         // generate invoke-on-header
         invoke(GenerateInvokeOnHeaderMojo.class);
+        // generate data-type-transformer
+        invoke(GenerateDataTypeTransformerMojo.class);
         // prepare-components
         invoke(PrepareComponentMojo.class);
         // validate-components
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDataTypeTransformerMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDataTypeTransformerMojo.java
new file mode 100644
index 00000000000..d490476a7d0
--- /dev/null
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDataTypeTransformerMojo.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.packaging;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.StringJoiner;
+
+import org.apache.camel.maven.packaging.generics.PackagePluginUtils;
+import org.apache.camel.tooling.util.Strings;
+import org.apache.camel.util.json.JsonObject;
+import org.apache.camel.util.json.Jsoner;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.jboss.jandex.AnnotationInstance;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.Index;
+
+/**
+ * Factory for generating code for @DataTypeTransformer.
+ */
+@Mojo(name = "generate-data-type-transformer", threadSafe = true, defaultPhase 
= LifecyclePhase.PROCESS_CLASSES,
+      requiresDependencyCollection = ResolutionScope.COMPILE,
+      requiresDependencyResolution = ResolutionScope.COMPILE)
+public class GenerateDataTypeTransformerMojo extends AbstractGeneratorMojo {
+
+    public static final DotName DATA_TYPE_ANNOTATION = 
DotName.createSimple("org.apache.camel.spi.DataTypeTransformer");
+
+    /**
+     * The project build directory
+     */
+    @Parameter(defaultValue = "${project.build.directory}")
+    protected File buildDir;
+
+    @Parameter(defaultValue = "${project.basedir}/src/generated/resources")
+    protected File resourcesOutputDir;
+
+    private static class DataTypeTransformerModel {
+        private String className;
+        private String name;
+        private String from;
+        private String to;
+        private String description;
+        private boolean deprecated;
+
+        public String getClassName() {
+            return className;
+        }
+
+        public void setClassName(String className) {
+            this.className = className;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getFrom() {
+            return from;
+        }
+
+        public void setFrom(String from) {
+            this.from = from;
+        }
+
+        public String getTo() {
+            return to;
+        }
+
+        public void setTo(String to) {
+            this.to = to;
+        }
+
+        public String getDescription() {
+            return description;
+        }
+
+        public void setDescription(String description) {
+            this.description = description;
+        }
+
+        public boolean isDeprecated() {
+            return deprecated;
+        }
+
+        public void setDeprecated(boolean deprecated) {
+            this.deprecated = deprecated;
+        }
+    }
+
+    public GenerateDataTypeTransformerMojo() {
+    }
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if ("pom".equals(project.getPackaging())) {
+            return;
+        }
+
+        buildDir = new File(project.getBuild().getDirectory());
+
+        if (resourcesOutputDir == null) {
+            resourcesOutputDir = new File(project.getBasedir(), 
"src/generated/resources");
+        }
+
+        Index index = PackagePluginUtils.readJandexIndexIgnoreMissing(project, 
getLog());
+        if (index == null) {
+            return;
+        }
+
+        List<DataTypeTransformerModel> models = new ArrayList<>();
+        List<AnnotationInstance> annotations = 
index.getAnnotations(DATA_TYPE_ANNOTATION);
+        annotations.forEach(a -> {
+            DataTypeTransformerModel model = new DataTypeTransformerModel();
+
+            String currentClass = a.target().asClass().name().toString();
+            boolean deprecated
+                    = a.target().asClass().hasAnnotation(Deprecated.class) || 
project.getName().contains("(deprecated)");
+            model.setClassName(currentClass);
+            model.setDeprecated(deprecated);
+            var name = a.value("name");
+            if (name != null) {
+                model.setName(name.value().toString());
+            }
+            var from = a.value("from");
+            if (from != null) {
+                model.setFrom(from.value().toString());
+            }
+            var to = a.value("to");
+            if (to != null) {
+                model.setFrom(to.value().toString());
+            }
+            var desc = a.value("description");
+            if (desc != null) {
+                model.setDescription(desc.value().toString());
+            }
+            models.add(model);
+        });
+        models.sort(Comparator.comparing(DataTypeTransformerModel::getName));
+
+        if (!models.isEmpty()) {
+            try {
+                StringJoiner names = new StringJoiner(" ");
+                for (var model : models) {
+                    names.add(model.getName());
+
+                    JsonObject jo = asJsonObject(model);
+                    String json = jo.toJson();
+                    json = Jsoner.prettyPrint(json, 2);
+                    String fn = sanitizeFileName(model.getName()) + ".json";
+                    boolean updated = 
updateResource(resourcesOutputDir.toPath(),
+                            "META-INF/services/org/apache/camel/transformer/" 
+ fn,
+                            json + NL);
+                    if (updated) {
+                        getLog().info("Updated transformer json: " + 
model.getName());
+                    }
+                }
+
+                // generate marker file
+                File camelMetaDir = new File(resourcesOutputDir, 
"META-INF/services/org/apache/camel/");
+                int count = models.size();
+                String properties = createProperties(project, "transformers", 
names.toString());
+                updateResource(camelMetaDir.toPath(), 
"transformer.properties", properties);
+                getLog().info("Generated transformer.properties containing " + 
count + " Camel "
+                              + (count > 1 ? "transformers: " : "transformer: 
") + names);
+            } catch (Exception e) {
+                throw new MojoExecutionException(e);
+            }
+        }
+    }
+
+    private JsonObject asJsonObject(DataTypeTransformerModel model) {
+        JsonObject jo = new JsonObject();
+        // we need to know the maven GAV also
+        jo.put("kind", "transformer");
+        jo.put("name", model.getName());
+        jo.put("title", asTitle(model.getName()));
+        if (model.getDescription() != null) {
+            jo.put("description", model.getDescription());
+        }
+        jo.put("deprecated", model.isDeprecated());
+        jo.put("javaType", model.getClassName());
+        if (model.getFrom() != null) {
+            jo.put("from", model.getFrom());
+        }
+        if (model.getTo() != null) {
+            jo.put("to", model.getTo());
+        }
+        jo.put("groupId", project.getGroupId());
+        jo.put("artifactId", project.getArtifactId());
+        jo.put("version", project.getVersion());
+        JsonObject root = new JsonObject();
+        root.put("transformer", jo);
+        return root;
+    }
+
+    private String sanitizeFileName(String fileName) {
+        return fileName.replaceAll("[^A-Za-z0-9-]", "-");
+    }
+
+    private String asTitle(String name) {
+        name = Strings.camelDashToTitle(name);
+        String part = Strings.after(name, ":");
+        if (part != null) {
+            part = Strings.capitalize(part);
+            name = Strings.before(name, ":") + " (" + part + ")";
+        }
+        return name;
+    }
+
+}
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
index e87432925f3..4e62bee08a0 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateInvokeOnHeaderMojo.java
@@ -42,7 +42,7 @@ import org.jboss.jandex.MethodInfo;
 import org.jboss.jandex.Type;
 
 /**
- * Abstract class for @InvokeOnHeader factory generator.
+ * Factory for generating code for @InvokeOnHeader.
  */
 @Mojo(name = "generate-invoke-on-header", threadSafe = true, defaultPhase = 
LifecyclePhase.PROCESS_CLASSES,
       requiresDependencyCollection = ResolutionScope.COMPILE,
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
index bb4cc531bec..b93ce0826ce 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
@@ -50,6 +50,8 @@ public class GenerateMojo extends AbstractGenerateMojo {
         invoke(GenerateConfigurerMojo.class);
         // generate invoke-on-header
         invoke(GenerateInvokeOnHeaderMojo.class);
+        // generate data-type-transformer
+        invoke(GenerateDataTypeTransformerMojo.class);
         // prepare-components
         invoke(PrepareComponentMojo.class);
         // prepare-main
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
index 162e0a467c9..240332d0908 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java
@@ -48,6 +48,7 @@ import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.OtherModel;
+import org.apache.camel.tooling.model.TransformerModel;
 import org.apache.camel.tooling.util.FileUtil;
 import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
@@ -111,6 +112,12 @@ public class PrepareCatalogMojo extends AbstractMojo {
     @Parameter(defaultValue = 
"${project.basedir}/src/generated/resources/org/apache/camel/catalog/languages")
     protected File languagesOutDir;
 
+    /**
+     * The output directory for transformers catalog
+     */
+    @Parameter(defaultValue = 
"${project.basedir}/src/generated/resources/org/apache/camel/catalog/transformers")
+    protected File transformersOutDir;
+
     /**
      * The output directory for others catalog
      */
@@ -314,7 +321,8 @@ public class PrepareCatalogMojo extends AbstractMojo {
                             if (f.endsWith(PackageHelper.JSON_SUFIX)) {
                                 allJsonFiles.add(p);
                             } else if (f.equals("component.properties") || 
f.equals("dataformat.properties")
-                                    || f.equals("language.properties") || 
f.equals("other.properties")) {
+                                    || f.equals("language.properties") || 
f.equals("other.properties")
+                                    || f.equals("transformer.properties")) {
                                 allPropertiesFiles.add(p);
                             }
                         });
@@ -365,6 +373,7 @@ public class PrepareCatalogMojo extends AbstractMojo {
             Set<String> components = executeComponents();
             Set<String> dataformats = executeDataFormats();
             Set<String> languages = executeLanguages();
+            Set<String> transformers = executeTransformers();
             Set<String> others = executeOthers();
             executeDocuments(components, dataformats, languages, others);
             executeXmlSchemas();
@@ -712,6 +721,48 @@ public class PrepareCatalogMojo extends AbstractMojo {
         return languagesNames;
     }
 
+    protected Set<String> executeTransformers() throws Exception {
+        Path transformersOutDir = this.transformersOutDir.toPath();
+
+        getLog().info("Copying all Camel transformer json descriptors");
+
+        // lets use sorted set/maps
+        Set<Path> jsonFiles;
+        Set<Path> duplicateJsonFiles;
+        Set<Path> transformerFiles;
+
+        // find all transformers from the components directory
+        transformerFiles = allPropertiesFiles.stream().filter(p -> 
p.endsWith("transformer.properties"))
+                .collect(Collectors.toCollection(TreeSet::new));
+        jsonFiles = allJsonFiles.stream().filter(p -> allModels.get(p) 
instanceof TransformerModel)
+                .collect(Collectors.toCollection(TreeSet::new));
+
+        getLog().info("Found " + transformerFiles.size() + " 
transformer.properties files");
+        getLog().info("Found " + jsonFiles.size() + " transformer json files");
+
+        // make sure to create out dir
+        Files.createDirectories(transformersOutDir);
+
+        // Check duplicates
+        duplicateJsonFiles = getDuplicates(jsonFiles);
+
+        // Copy all descriptors
+        Map<Path, Path> newJsons = map(jsonFiles, p -> p, p -> 
transformersOutDir.resolve(p.getFileName()));
+        try (Stream<Path> stream = list(transformersOutDir).filter(p -> 
!newJsons.containsValue(p))) {
+            stream.forEach(this::delete);
+        }
+        newJsons.forEach(this::copy);
+
+        Path all = transformersOutDir.resolve("../transformers.properties");
+        Set<String> transformerNames
+                = 
jsonFiles.stream().map(PrepareCatalogMojo::asComponentName).collect(Collectors.toCollection(TreeSet::new));
+        FileUtil.updateFile(all, String.join("\n", transformerNames) + "\n");
+
+        printTransformersReport(jsonFiles, duplicateJsonFiles);
+
+        return transformerNames;
+    }
+
     private Set<String> executeOthers() throws Exception {
         Path othersOutDir = this.othersOutDir.toPath();
 
@@ -1154,6 +1205,23 @@ public class PrepareCatalogMojo extends AbstractMojo {
         getLog().info(SEPARATOR);
     }
 
+    private void printTransformersReport(
+            Set<Path> json, Set<Path> duplicate) {
+        getLog().info(SEPARATOR);
+        getLog().info("");
+        getLog().info("Camel transformer catalog report");
+        getLog().info("");
+        getLog().info("\tTransformers found: " + json.size());
+        printComponentDebug(json);
+        if (!duplicate.isEmpty()) {
+            getLog().info("");
+            getLog().warn("\tDuplicate transformer detected: " + 
duplicate.size());
+            printComponentWarning(duplicate);
+        }
+        getLog().info("");
+        getLog().info(SEPARATOR);
+    }
+
     private void printOthersReport(
             Set<Path> json, Set<Path> duplicate, Map<String, Set<String>> 
usedLabels, Set<Path> missingFirstVersions) {
         getLog().info(SEPARATOR);

Reply via email to