You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/10/14 10:11:16 UTC

[camel-kamelets] 01/04: Kamelets Enricher Maven Plugin for improving Kamelets metadata

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

acosentino pushed a commit to branch enricher-maven-plugin
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git

commit ccf07846cb6f60587feee8f8df293c566e3e4ea9
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Thu Oct 13 18:49:21 2022 +0200

    Kamelets Enricher Maven Plugin for improving Kamelets metadata
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 kamelets/aws-s3-sink.kamelet.yaml                  | 246 ++++++++++++------
 kamelets/aws-s3-source.kamelet.yaml                | 288 ++++++++++++++-------
 library/camel-kamelets-bom/pom.xml                 |   1 +
 .../resources/kamelets/aws-s3-sink.kamelet.yaml    | 246 ++++++++++++------
 .../resources/kamelets/aws-s3-source.kamelet.yaml  | 288 ++++++++++++++-------
 .../kamelets/maven/plugin/EnrichKameletsMojo.java  | 106 ++++++++
 6 files changed, 833 insertions(+), 342 deletions(-)

diff --git a/kamelets/aws-s3-sink.kamelet.yaml b/kamelets/aws-s3-sink.kamelet.yaml
index d8d8ab6f..670feea5 100644
--- a/kamelets/aws-s3-sink.kamelet.yaml
+++ b/kamelets/aws-s3-sink.kamelet.yaml
@@ -1,24 +1,7 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
+---
+apiVersion: "camel.apache.org/v1alpha1"
+kind: "Kamelet"
 metadata:
-  name: aws-s3-sink
   annotations:
     camel.apache.org/kamelet.support.level: "Stable"
     camel.apache.org/catalog.version: "main-SNAPSHOT"
@@ -27,82 +10,183 @@ metadata:
     camel.apache.org/kamelet.group: "AWS S3"
   labels:
     camel.apache.org/kamelet.type: "sink"
+  name: "aws-s3-sink"
+  Headers:
+    CamelAwsS3Metadata: "A map of metadata to be stored or stored with the object\
+      \ in S3. More details about metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.htmlhere."
+    CamelAwsS3ContentEncoding: "The optional Content-Encoding HTTP header specifying\
+      \ what content encodings have been applied to the object and what decoding mechanisms\
+      \ must be applied in order to obtain the media-type referenced by the Content-Type\
+      \ field."
+    CamelAwsS3ETag: "(producer) The ETag value for the newly uploaded object. (consumer)\
+      \ The hex encoded 128-bit MD5 digest of the associated object according to RFC\
+      \ 1864. This data is used as an integrity check to verify that the data received\
+      \ by the caller is the same data that was sent by Amazon S3."
+    CamelAwsS3Operation: "The operation to perform. Permitted values are copyObject,\
+      \ deleteObject, listBuckets, deleteBucket, listObjects"
+    CamelAwsS3DowloadLinkExpirationTime: "The expiration time of the download link\
+      \ in milliseconds"
+    CamelAwsS3DownloadLinkSignedPayload: "The request payload that is needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3DestinationKey: "The Destination key which will be used for the current\
+      \ operation"
+    CamelAwsS3BucketDestinationName: "The bucket Destination Name which will be used\
+      \ for the current operation"
+    CamelMessageTimestamp: "The timestamp of the message"
+    CamelAwsS3ContentDisposition: "The optional Content-Disposition HTTP header, which\
+      \ specifies presentational information such as the recommended filename for\
+      \ the object to be saved as."
+    CamelAwsS3ContentType: "The Content-Type HTTP header, which indicates the type\
+      \ of content stored in the associated object. The value of this header is a\
+      \ standard MIME type."
+    CamelAwsS3LastModified: "The value of the Last-Modified header, indicating the\
+      \ date and time at which Amazon S3 last recorded a modification to the associated\
+      \ object."
+    CamelAwsS3ExpirationTime: "If the object expiration is configured (see PUT Bucket\
+      \ lifecycle), the response includes this header."
+    CamelAwsS3ContentControl: "The optional Cache-Control HTTP header which allows\
+      \ the user to specify caching behavior along the HTTP request/reply chain."
+    CamelAwsS3ServerSideEncryption: "Sets the server-side encryption algorithm when\
+      \ encrypting the object using AWS-managed keys. For example use AES256."
+    CamelAwsS3DownloadLinkHttpRequestHeaders: "The headers that are needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3VersionId: "(producer) The optional version ID of the newly uploaded\
+      \ object. (consumer) The version ID of the associated Amazon S3 object if available.\
+      \ Version IDs are only assigned to objects when an object is uploaded to an\
+      \ Amazon S3 bucket that has object versioning enabled."
+    CamelAwsS3ReplicationStatus: "Amazon S3 can return this if your request involves\
+      \ a bucket that is either a source or destination in a replication rule."
+    CamelAwsS3Acl: "A well constructed Amazon S3 Access Control List object."
+    CamelAwsS3RangeStart: "The position of the first byte to get"
+    CamelAwsS3CannedAcl: "The canned acl that will be applied to the object. see software.amazon.awssdk.services.s3.model.ObjectCannedACL\
+      \ for allowed values."
+    CamelAwsS3DownloadLinkBrowserCompatible: "Whether the download link is browser\
+      \ compatible"
+    CamelAwsS3BucketName: "The bucket Name which this object will be stored or which\
+      \ will be used for the current operation or in which this object is contained."
+    CamelAwsS3ContentMD5: "The base64 encoded 128-bit MD5 digest of the associated\
+      \ object (content - not including headers) according to RFC 1864. This data\
+      \ is used as a message integrity check to verify that the data received by Amazon\
+      \ S3 is the same data that the caller sent."
+    CamelAwsS3Key: "The key under which this object is stored or will be stored or\
+      \ which will be used for the current operation"
+    CamelAwsS3ContentLength: "The Content-Length HTTP header indicating the size of\
+      \ the associated object in bytes."
+    CamelAwsS3StorageClass: "The storage class of this object."
+    CamelAwsS3RangeEnd: "The position of the last byte to get"
 spec:
   definition:
-    title: "AWS S3 Sink"
-    description: |-
-      Upload data to an Amazon S3 Bucket.
-
-      The basic authentication method for the S3 service is to specify an access key and a secret key. These parameters are optional because the Kamelet provides a default credentials provider.
-
-      If you use the default credentials provider, the S3 client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      In the header, you can optionally set the `file` / `ce-partition` property to specify the name of the file to upload.
-
-      If you do not set the property in the header, the Kamelet uses the exchange ID for the file name.
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
+    description: "Upload data to an Amazon S3 Bucket.\n\nThe basic authentication\
+      \ method for the S3 service is to specify an access key and a secret key. These\
+      \ parameters are optional because the Kamelet provides a default credentials\
+      \ provider.\n\nIf you use the default credentials provider, the S3 client loads\
+      \ the credentials through this provider and doesn't use the basic authentication\
+      \ method.\n\nIn the header, you can optionally set the `file` / `ce-partition`\
+      \ property to specify the name of the file to upload.\n\nIf you do not set the\
+      \ property in the header, the Kamelet uses the exchange ID for the file name."
     properties:
       bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        type: string
+        description: "The S3 Bucket name or Amazon Resource Name (ARN)."
+        title: "Bucket Name"
+        type: "string"
       accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
+        description: "The access key obtained from AWS."
+        format: "password"
+        title: "Access Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       secretKey:
-        title: Secret Key
-        description: The secret key obtained from AWS.
-        type: string
-        format: password
+        description: "The secret key obtained from AWS."
+        format: "password"
+        title: "Secret Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       region:
-        title: AWS Region
-        description: The AWS region to access.
-        type: string
-        enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1", "ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", "ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1", "sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1", "ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2", "cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
+        description: "The AWS region to access."
+        enum:
+        - "ap-south-1"
+        - "eu-south-1"
+        - "us-gov-east-1"
+        - "me-central-1"
+        - "ca-central-1"
+        - "eu-central-1"
+        - "us-iso-west-1"
+        - "us-west-1"
+        - "us-west-2"
+        - "af-south-1"
+        - "eu-north-1"
+        - "eu-west-3"
+        - "eu-west-2"
+        - "eu-west-1"
+        - "ap-northeast-3"
+        - "ap-northeast-2"
+        - "ap-northeast-1"
+        - "me-south-1"
+        - "sa-east-1"
+        - "ap-east-1"
+        - "cn-north-1"
+        - "us-gov-west-1"
+        - "ap-southeast-1"
+        - "ap-southeast-2"
+        - "us-iso-east-1"
+        - "ap-southeast-3"
+        - "us-east-1"
+        - "us-east-2"
+        - "cn-northwest-1"
+        - "us-isob-east-1"
+        - "aws-global"
+        - "aws-cn-global"
+        - "aws-us-gov-global"
+        - "aws-iso-global"
+        - "aws-iso-b-global"
+        title: "AWS Region"
+        type: "string"
       autoCreateBucket:
-        title: Autocreate Bucket
-        description: Specifies to automatically create the S3 bucket.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the S3 client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
+        description: "Specifies to automatically create the S3 bucket."
+        title: "Autocreate Bucket"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      useDefaultCredentialsProvider:
         default: false
+        description: "If true, the S3 client loads credentials through a default credentials\
+          \ provider. If false, it uses the basic authentication method (access key\
+          \ and secret key)."
+        title: "Default Credentials Provider"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        type: string
+        description: "The overriding endpoint URI. To use this option, you must also\
+          \ select the `overrideEndpoint` option."
+        title: "Overwrite Endpoint URI"
+        type: "string"
       overrideEndpoint:
-        title: Endpoint Overwrite
-        description: Select this option to override the endpoint URI. To use this option, you must also provide a URI for the `uriEndpointOverride` option.
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
+        description: "Select this option to override the endpoint URI. To use this\
+          \ option, you must also provide a URI for the `uriEndpointOverride` option."
+        title: "Endpoint Overwrite"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       keyName:
-        title: Key Name
-        description: The key name for saving an element in the bucket.
-        type: string
+        description: "The key name for saving an element in the bucket."
+        title: "Key Name"
+        type: "string"
+    required:
+    - "bucketNameOrArn"
+    - "region"
+    title: "AWS S3 Sink"
+    type: "object"
   dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "camel:kamelet"
+  - "camel:core"
+  - "camel:aws2-s3"
+  - "camel:kamelet"
   template:
     from:
       uri: "kamelet:source"
@@ -112,17 +196,17 @@ spec:
           - simple: "${header[file]}"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${header[file]}"
           - simple: "${header[ce-file]}"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${header[ce-file]}"
           - simple: "'{{?keyName}}' == ''"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${exchangeId}"
       - to:
           uri: "aws2-s3:{{bucketNameOrArn}}"
diff --git a/kamelets/aws-s3-source.kamelet.yaml b/kamelets/aws-s3-source.kamelet.yaml
index 6ab2bca4..78f85fbb 100644
--- a/kamelets/aws-s3-source.kamelet.yaml
+++ b/kamelets/aws-s3-source.kamelet.yaml
@@ -1,7 +1,7 @@
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
+---
+apiVersion: "camel.apache.org/v1alpha1"
+kind: "Kamelet"
 metadata:
-  name: aws-s3-source
   annotations:
     camel.apache.org/kamelet.support.level: "Stable"
     camel.apache.org/catalog.version: "main-SNAPSHOT"
@@ -10,121 +10,229 @@ metadata:
     camel.apache.org/kamelet.group: "AWS S3"
   labels:
     camel.apache.org/kamelet.type: "source"
+  name: "aws-s3-source"
+  Headers:
+    CamelAwsS3Metadata: "A map of metadata to be stored or stored with the object\
+      \ in S3. More details about metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.htmlhere."
+    CamelAwsS3ContentEncoding: "The optional Content-Encoding HTTP header specifying\
+      \ what content encodings have been applied to the object and what decoding mechanisms\
+      \ must be applied in order to obtain the media-type referenced by the Content-Type\
+      \ field."
+    CamelAwsS3ETag: "(producer) The ETag value for the newly uploaded object. (consumer)\
+      \ The hex encoded 128-bit MD5 digest of the associated object according to RFC\
+      \ 1864. This data is used as an integrity check to verify that the data received\
+      \ by the caller is the same data that was sent by Amazon S3."
+    CamelAwsS3Operation: "The operation to perform. Permitted values are copyObject,\
+      \ deleteObject, listBuckets, deleteBucket, listObjects"
+    CamelAwsS3DowloadLinkExpirationTime: "The expiration time of the download link\
+      \ in milliseconds"
+    CamelAwsS3DownloadLinkSignedPayload: "The request payload that is needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3DestinationKey: "The Destination key which will be used for the current\
+      \ operation"
+    CamelAwsS3BucketDestinationName: "The bucket Destination Name which will be used\
+      \ for the current operation"
+    CamelMessageTimestamp: "The timestamp of the message"
+    CamelAwsS3ContentDisposition: "The optional Content-Disposition HTTP header, which\
+      \ specifies presentational information such as the recommended filename for\
+      \ the object to be saved as."
+    CamelAwsS3ContentType: "The Content-Type HTTP header, which indicates the type\
+      \ of content stored in the associated object. The value of this header is a\
+      \ standard MIME type."
+    CamelAwsS3LastModified: "The value of the Last-Modified header, indicating the\
+      \ date and time at which Amazon S3 last recorded a modification to the associated\
+      \ object."
+    CamelAwsS3ExpirationTime: "If the object expiration is configured (see PUT Bucket\
+      \ lifecycle), the response includes this header."
+    CamelAwsS3ContentControl: "The optional Cache-Control HTTP header which allows\
+      \ the user to specify caching behavior along the HTTP request/reply chain."
+    CamelAwsS3ServerSideEncryption: "Sets the server-side encryption algorithm when\
+      \ encrypting the object using AWS-managed keys. For example use AES256."
+    CamelAwsS3DownloadLinkHttpRequestHeaders: "The headers that are needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3VersionId: "(producer) The optional version ID of the newly uploaded\
+      \ object. (consumer) The version ID of the associated Amazon S3 object if available.\
+      \ Version IDs are only assigned to objects when an object is uploaded to an\
+      \ Amazon S3 bucket that has object versioning enabled."
+    CamelAwsS3ReplicationStatus: "Amazon S3 can return this if your request involves\
+      \ a bucket that is either a source or destination in a replication rule."
+    CamelAwsS3Acl: "A well constructed Amazon S3 Access Control List object."
+    CamelAwsS3RangeStart: "The position of the first byte to get"
+    CamelAwsS3CannedAcl: "The canned acl that will be applied to the object. see software.amazon.awssdk.services.s3.model.ObjectCannedACL\
+      \ for allowed values."
+    CamelAwsS3DownloadLinkBrowserCompatible: "Whether the download link is browser\
+      \ compatible"
+    CamelAwsS3BucketName: "The bucket Name which this object will be stored or which\
+      \ will be used for the current operation or in which this object is contained."
+    CamelAwsS3ContentMD5: "The base64 encoded 128-bit MD5 digest of the associated\
+      \ object (content - not including headers) according to RFC 1864. This data\
+      \ is used as a message integrity check to verify that the data received by Amazon\
+      \ S3 is the same data that the caller sent."
+    CamelAwsS3Key: "The key under which this object is stored or will be stored or\
+      \ which will be used for the current operation"
+    CamelAwsS3ContentLength: "The Content-Length HTTP header indicating the size of\
+      \ the associated object in bytes."
+    CamelAwsS3StorageClass: "The storage class of this object."
+    CamelAwsS3RangeEnd: "The position of the last byte to get"
 spec:
   definition:
-    title: "AWS S3 Source"
-    description: |-
-      Receive data from an Amazon S3 Bucket.
-
-      The basic authentication method for the S3 service is to specify an access key and a secret key. These parameters are optional because the Kamelet provides a default credentials provider.
-      
-      If you use the default credentials provider, the S3 client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      Two headers will be duplicated with different names for clarity at sink level, CamelAwsS3Key will be duplicated into aws.s3.key and CamelAwsS3BucketName will be duplicated in aws.s3.bucket.name
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
+    description: "Receive data from an Amazon S3 Bucket.\n\nThe basic authentication\
+      \ method for the S3 service is to specify an access key and a secret key. These\
+      \ parameters are optional because the Kamelet provides a default credentials\
+      \ provider.\n\nIf you use the default credentials provider, the S3 client loads\
+      \ the credentials through this provider and doesn't use the basic authentication\
+      \ method.\n\nTwo headers will be duplicated with different names for clarity\
+      \ at sink level, CamelAwsS3Key will be duplicated into aws.s3.key and CamelAwsS3BucketName\
+      \ will be duplicated in aws.s3.bucket.name"
     properties:
       bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        type: string
+        description: "The S3 Bucket name or Amazon Resource Name (ARN)."
+        title: "Bucket Name"
+        type: "string"
       deleteAfterRead:
-        title: Auto-delete Objects
-        description: Specifies to delete objects after consuming them.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: true
+        description: "Specifies to delete objects after consuming them."
+        title: "Auto-delete Objects"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
+        description: "The access key obtained from AWS."
+        format: "password"
+        title: "Access Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       secretKey:
-        title: Secret Key
-        description: The secret key obtained from AWS.
-        type: string
-        format: password
+        description: "The secret key obtained from AWS."
+        format: "password"
+        title: "Secret Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       region:
-        title: AWS Region
-        description: The AWS region to access.
-        type: string
-        enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1", "ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", "ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1", "sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1", "ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2", "cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
+        description: "The AWS region to access."
+        enum:
+        - "ap-south-1"
+        - "eu-south-1"
+        - "us-gov-east-1"
+        - "me-central-1"
+        - "ca-central-1"
+        - "eu-central-1"
+        - "us-iso-west-1"
+        - "us-west-1"
+        - "us-west-2"
+        - "af-south-1"
+        - "eu-north-1"
+        - "eu-west-3"
+        - "eu-west-2"
+        - "eu-west-1"
+        - "ap-northeast-3"
+        - "ap-northeast-2"
+        - "ap-northeast-1"
+        - "me-south-1"
+        - "sa-east-1"
+        - "ap-east-1"
+        - "cn-north-1"
+        - "us-gov-west-1"
+        - "ap-southeast-1"
+        - "ap-southeast-2"
+        - "us-iso-east-1"
+        - "ap-southeast-3"
+        - "us-east-1"
+        - "us-east-2"
+        - "cn-northwest-1"
+        - "us-isob-east-1"
+        - "aws-global"
+        - "aws-cn-global"
+        - "aws-us-gov-global"
+        - "aws-iso-global"
+        - "aws-iso-b-global"
+        title: "AWS Region"
+        type: "string"
       autoCreateBucket:
-        title: Autocreate Bucket
-        description: Specifies to automatically create the S3 bucket.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      includeBody:
-        title: Include Body
-        description: If true, the exchange is consumed and put into the body and closed. If false, the S3Object stream is put raw into the body and the headers are set with the S3 object metadata.
-        type: boolean
+        description: "Specifies to automatically create the S3 bucket."
+        title: "Autocreate Bucket"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      includeBody:
         default: true
+        description: "If true, the exchange is consumed and put into the body and\
+          \ closed. If false, the S3Object stream is put raw into the body and the\
+          \ headers are set with the S3 object metadata."
+        title: "Include Body"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       prefix:
-        title: Prefix
-        description: The AWS S3 bucket prefix to consider while searching.
-        type: string
-        example: 'folder/'
+        description: "The AWS S3 bucket prefix to consider while searching."
+        example: "folder/"
+        title: "Prefix"
+        type: "string"
       ignoreBody:
-        title: Ignore Body
-        description: If true, the S3 Object body is ignored. Setting this to true overrides any behavior defined by the `includeBody` option. If false, the S3 object is put in the body.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the S3 client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
+        description: "If true, the S3 Object body is ignored. Setting this to true\
+          \ overrides any behavior defined by the `includeBody` option. If false,\
+          \ the S3 object is put in the body."
+        title: "Ignore Body"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      useDefaultCredentialsProvider:
         default: false
+        description: "If true, the S3 client loads credentials through a default credentials\
+          \ provider. If false, it uses the basic authentication method (access key\
+          \ and secret key)."
+        title: "Default Credentials Provider"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        type: string
+        description: "The overriding endpoint URI. To use this option, you must also\
+          \ select the `overrideEndpoint` option."
+        title: "Overwrite Endpoint URI"
+        type: "string"
       overrideEndpoint:
-        title: Endpoint Overwrite
-        description: Select this option to override the endpoint URI. To use this option, you must also provide a URI for the `uriEndpointOverride` option.
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
+        description: "Select this option to override the endpoint URI. To use this\
+          \ option, you must also provide a URI for the `uriEndpointOverride` option."
+        title: "Endpoint Overwrite"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       delay:
-        title: Delay
-        description: The number of milliseconds before the next poll of the selected bucket.
-        type: integer
         default: 500
+        description: "The number of milliseconds before the next poll of the selected\
+          \ bucket."
+        title: "Delay"
+        type: "integer"
+    required:
+    - "bucketNameOrArn"
+    - "region"
+    title: "AWS S3 Source"
+    type: "object"
   dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT"
-    - "camel:kamelet"
+  - "camel:core"
+  - "camel:aws2-s3"
+  - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT"
+  - "camel:kamelet"
   template:
     beans:
-      - name: renameHeaders
-        type: "#class:org.apache.camel.kamelets.utils.headers.DuplicateNamingHeaders"
-        property:
-          - key: prefix
-            value: 'CamelAwsS3'
-          - key: renamingPrefix
-            value: 'aws.s3.'
-          - key: mode
-            value: 'filtering'
-          - key: selectedHeaders
-            value: 'CamelAwsS3Key,CamelAwsS3BucketName'
+    - name: "renameHeaders"
+      type: "#class:org.apache.camel.kamelets.utils.headers.DuplicateNamingHeaders"
+      property:
+      - key: "prefix"
+        value: "CamelAwsS3"
+      - key: "renamingPrefix"
+        value: "aws.s3."
+      - key: "mode"
+        value: "filtering"
+      - key: "selectedHeaders"
+        value: "CamelAwsS3Key,CamelAwsS3BucketName"
     from:
       uri: "aws2-s3:{{bucketNameOrArn}}"
       parameters:
diff --git a/library/camel-kamelets-bom/pom.xml b/library/camel-kamelets-bom/pom.xml
index dfb6fa14..5093b3da 100644
--- a/library/camel-kamelets-bom/pom.xml
+++ b/library/camel-kamelets-bom/pom.xml
@@ -82,6 +82,7 @@
                         <phase>compile</phase>
                         <goals>
                             <goal>validate</goal>
+                           <goal>enrich</goal>
                         </goals>
                     </execution>
                 </executions>
diff --git a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-sink.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/aws-s3-sink.kamelet.yaml
index d8d8ab6f..670feea5 100644
--- a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-sink.kamelet.yaml
+++ b/library/camel-kamelets/src/main/resources/kamelets/aws-s3-sink.kamelet.yaml
@@ -1,24 +1,7 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
+---
+apiVersion: "camel.apache.org/v1alpha1"
+kind: "Kamelet"
 metadata:
-  name: aws-s3-sink
   annotations:
     camel.apache.org/kamelet.support.level: "Stable"
     camel.apache.org/catalog.version: "main-SNAPSHOT"
@@ -27,82 +10,183 @@ metadata:
     camel.apache.org/kamelet.group: "AWS S3"
   labels:
     camel.apache.org/kamelet.type: "sink"
+  name: "aws-s3-sink"
+  Headers:
+    CamelAwsS3Metadata: "A map of metadata to be stored or stored with the object\
+      \ in S3. More details about metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.htmlhere."
+    CamelAwsS3ContentEncoding: "The optional Content-Encoding HTTP header specifying\
+      \ what content encodings have been applied to the object and what decoding mechanisms\
+      \ must be applied in order to obtain the media-type referenced by the Content-Type\
+      \ field."
+    CamelAwsS3ETag: "(producer) The ETag value for the newly uploaded object. (consumer)\
+      \ The hex encoded 128-bit MD5 digest of the associated object according to RFC\
+      \ 1864. This data is used as an integrity check to verify that the data received\
+      \ by the caller is the same data that was sent by Amazon S3."
+    CamelAwsS3Operation: "The operation to perform. Permitted values are copyObject,\
+      \ deleteObject, listBuckets, deleteBucket, listObjects"
+    CamelAwsS3DowloadLinkExpirationTime: "The expiration time of the download link\
+      \ in milliseconds"
+    CamelAwsS3DownloadLinkSignedPayload: "The request payload that is needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3DestinationKey: "The Destination key which will be used for the current\
+      \ operation"
+    CamelAwsS3BucketDestinationName: "The bucket Destination Name which will be used\
+      \ for the current operation"
+    CamelMessageTimestamp: "The timestamp of the message"
+    CamelAwsS3ContentDisposition: "The optional Content-Disposition HTTP header, which\
+      \ specifies presentational information such as the recommended filename for\
+      \ the object to be saved as."
+    CamelAwsS3ContentType: "The Content-Type HTTP header, which indicates the type\
+      \ of content stored in the associated object. The value of this header is a\
+      \ standard MIME type."
+    CamelAwsS3LastModified: "The value of the Last-Modified header, indicating the\
+      \ date and time at which Amazon S3 last recorded a modification to the associated\
+      \ object."
+    CamelAwsS3ExpirationTime: "If the object expiration is configured (see PUT Bucket\
+      \ lifecycle), the response includes this header."
+    CamelAwsS3ContentControl: "The optional Cache-Control HTTP header which allows\
+      \ the user to specify caching behavior along the HTTP request/reply chain."
+    CamelAwsS3ServerSideEncryption: "Sets the server-side encryption algorithm when\
+      \ encrypting the object using AWS-managed keys. For example use AES256."
+    CamelAwsS3DownloadLinkHttpRequestHeaders: "The headers that are needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3VersionId: "(producer) The optional version ID of the newly uploaded\
+      \ object. (consumer) The version ID of the associated Amazon S3 object if available.\
+      \ Version IDs are only assigned to objects when an object is uploaded to an\
+      \ Amazon S3 bucket that has object versioning enabled."
+    CamelAwsS3ReplicationStatus: "Amazon S3 can return this if your request involves\
+      \ a bucket that is either a source or destination in a replication rule."
+    CamelAwsS3Acl: "A well constructed Amazon S3 Access Control List object."
+    CamelAwsS3RangeStart: "The position of the first byte to get"
+    CamelAwsS3CannedAcl: "The canned acl that will be applied to the object. see software.amazon.awssdk.services.s3.model.ObjectCannedACL\
+      \ for allowed values."
+    CamelAwsS3DownloadLinkBrowserCompatible: "Whether the download link is browser\
+      \ compatible"
+    CamelAwsS3BucketName: "The bucket Name which this object will be stored or which\
+      \ will be used for the current operation or in which this object is contained."
+    CamelAwsS3ContentMD5: "The base64 encoded 128-bit MD5 digest of the associated\
+      \ object (content - not including headers) according to RFC 1864. This data\
+      \ is used as a message integrity check to verify that the data received by Amazon\
+      \ S3 is the same data that the caller sent."
+    CamelAwsS3Key: "The key under which this object is stored or will be stored or\
+      \ which will be used for the current operation"
+    CamelAwsS3ContentLength: "The Content-Length HTTP header indicating the size of\
+      \ the associated object in bytes."
+    CamelAwsS3StorageClass: "The storage class of this object."
+    CamelAwsS3RangeEnd: "The position of the last byte to get"
 spec:
   definition:
-    title: "AWS S3 Sink"
-    description: |-
-      Upload data to an Amazon S3 Bucket.
-
-      The basic authentication method for the S3 service is to specify an access key and a secret key. These parameters are optional because the Kamelet provides a default credentials provider.
-
-      If you use the default credentials provider, the S3 client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      In the header, you can optionally set the `file` / `ce-partition` property to specify the name of the file to upload.
-
-      If you do not set the property in the header, the Kamelet uses the exchange ID for the file name.
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
+    description: "Upload data to an Amazon S3 Bucket.\n\nThe basic authentication\
+      \ method for the S3 service is to specify an access key and a secret key. These\
+      \ parameters are optional because the Kamelet provides a default credentials\
+      \ provider.\n\nIf you use the default credentials provider, the S3 client loads\
+      \ the credentials through this provider and doesn't use the basic authentication\
+      \ method.\n\nIn the header, you can optionally set the `file` / `ce-partition`\
+      \ property to specify the name of the file to upload.\n\nIf you do not set the\
+      \ property in the header, the Kamelet uses the exchange ID for the file name."
     properties:
       bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        type: string
+        description: "The S3 Bucket name or Amazon Resource Name (ARN)."
+        title: "Bucket Name"
+        type: "string"
       accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
+        description: "The access key obtained from AWS."
+        format: "password"
+        title: "Access Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       secretKey:
-        title: Secret Key
-        description: The secret key obtained from AWS.
-        type: string
-        format: password
+        description: "The secret key obtained from AWS."
+        format: "password"
+        title: "Secret Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       region:
-        title: AWS Region
-        description: The AWS region to access.
-        type: string
-        enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1", "ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", "ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1", "sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1", "ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2", "cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
+        description: "The AWS region to access."
+        enum:
+        - "ap-south-1"
+        - "eu-south-1"
+        - "us-gov-east-1"
+        - "me-central-1"
+        - "ca-central-1"
+        - "eu-central-1"
+        - "us-iso-west-1"
+        - "us-west-1"
+        - "us-west-2"
+        - "af-south-1"
+        - "eu-north-1"
+        - "eu-west-3"
+        - "eu-west-2"
+        - "eu-west-1"
+        - "ap-northeast-3"
+        - "ap-northeast-2"
+        - "ap-northeast-1"
+        - "me-south-1"
+        - "sa-east-1"
+        - "ap-east-1"
+        - "cn-north-1"
+        - "us-gov-west-1"
+        - "ap-southeast-1"
+        - "ap-southeast-2"
+        - "us-iso-east-1"
+        - "ap-southeast-3"
+        - "us-east-1"
+        - "us-east-2"
+        - "cn-northwest-1"
+        - "us-isob-east-1"
+        - "aws-global"
+        - "aws-cn-global"
+        - "aws-us-gov-global"
+        - "aws-iso-global"
+        - "aws-iso-b-global"
+        title: "AWS Region"
+        type: "string"
       autoCreateBucket:
-        title: Autocreate Bucket
-        description: Specifies to automatically create the S3 bucket.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the S3 client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
+        description: "Specifies to automatically create the S3 bucket."
+        title: "Autocreate Bucket"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      useDefaultCredentialsProvider:
         default: false
+        description: "If true, the S3 client loads credentials through a default credentials\
+          \ provider. If false, it uses the basic authentication method (access key\
+          \ and secret key)."
+        title: "Default Credentials Provider"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        type: string
+        description: "The overriding endpoint URI. To use this option, you must also\
+          \ select the `overrideEndpoint` option."
+        title: "Overwrite Endpoint URI"
+        type: "string"
       overrideEndpoint:
-        title: Endpoint Overwrite
-        description: Select this option to override the endpoint URI. To use this option, you must also provide a URI for the `uriEndpointOverride` option.
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
+        description: "Select this option to override the endpoint URI. To use this\
+          \ option, you must also provide a URI for the `uriEndpointOverride` option."
+        title: "Endpoint Overwrite"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       keyName:
-        title: Key Name
-        description: The key name for saving an element in the bucket.
-        type: string
+        description: "The key name for saving an element in the bucket."
+        title: "Key Name"
+        type: "string"
+    required:
+    - "bucketNameOrArn"
+    - "region"
+    title: "AWS S3 Sink"
+    type: "object"
   dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "camel:kamelet"
+  - "camel:core"
+  - "camel:aws2-s3"
+  - "camel:kamelet"
   template:
     from:
       uri: "kamelet:source"
@@ -112,17 +196,17 @@ spec:
           - simple: "${header[file]}"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${header[file]}"
           - simple: "${header[ce-file]}"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${header[ce-file]}"
           - simple: "'{{?keyName}}' == ''"
             steps:
             - set-header:
-                name: CamelAwsS3Key
+                name: "CamelAwsS3Key"
                 simple: "${exchangeId}"
       - to:
           uri: "aws2-s3:{{bucketNameOrArn}}"
diff --git a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-source.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/aws-s3-source.kamelet.yaml
index 6ab2bca4..78f85fbb 100644
--- a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-source.kamelet.yaml
+++ b/library/camel-kamelets/src/main/resources/kamelets/aws-s3-source.kamelet.yaml
@@ -1,7 +1,7 @@
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
+---
+apiVersion: "camel.apache.org/v1alpha1"
+kind: "Kamelet"
 metadata:
-  name: aws-s3-source
   annotations:
     camel.apache.org/kamelet.support.level: "Stable"
     camel.apache.org/catalog.version: "main-SNAPSHOT"
@@ -10,121 +10,229 @@ metadata:
     camel.apache.org/kamelet.group: "AWS S3"
   labels:
     camel.apache.org/kamelet.type: "source"
+  name: "aws-s3-source"
+  Headers:
+    CamelAwsS3Metadata: "A map of metadata to be stored or stored with the object\
+      \ in S3. More details about metadata https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.htmlhere."
+    CamelAwsS3ContentEncoding: "The optional Content-Encoding HTTP header specifying\
+      \ what content encodings have been applied to the object and what decoding mechanisms\
+      \ must be applied in order to obtain the media-type referenced by the Content-Type\
+      \ field."
+    CamelAwsS3ETag: "(producer) The ETag value for the newly uploaded object. (consumer)\
+      \ The hex encoded 128-bit MD5 digest of the associated object according to RFC\
+      \ 1864. This data is used as an integrity check to verify that the data received\
+      \ by the caller is the same data that was sent by Amazon S3."
+    CamelAwsS3Operation: "The operation to perform. Permitted values are copyObject,\
+      \ deleteObject, listBuckets, deleteBucket, listObjects"
+    CamelAwsS3DowloadLinkExpirationTime: "The expiration time of the download link\
+      \ in milliseconds"
+    CamelAwsS3DownloadLinkSignedPayload: "The request payload that is needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3DestinationKey: "The Destination key which will be used for the current\
+      \ operation"
+    CamelAwsS3BucketDestinationName: "The bucket Destination Name which will be used\
+      \ for the current operation"
+    CamelMessageTimestamp: "The timestamp of the message"
+    CamelAwsS3ContentDisposition: "The optional Content-Disposition HTTP header, which\
+      \ specifies presentational information such as the recommended filename for\
+      \ the object to be saved as."
+    CamelAwsS3ContentType: "The Content-Type HTTP header, which indicates the type\
+      \ of content stored in the associated object. The value of this header is a\
+      \ standard MIME type."
+    CamelAwsS3LastModified: "The value of the Last-Modified header, indicating the\
+      \ date and time at which Amazon S3 last recorded a modification to the associated\
+      \ object."
+    CamelAwsS3ExpirationTime: "If the object expiration is configured (see PUT Bucket\
+      \ lifecycle), the response includes this header."
+    CamelAwsS3ContentControl: "The optional Cache-Control HTTP header which allows\
+      \ the user to specify caching behavior along the HTTP request/reply chain."
+    CamelAwsS3ServerSideEncryption: "Sets the server-side encryption algorithm when\
+      \ encrypting the object using AWS-managed keys. For example use AES256."
+    CamelAwsS3DownloadLinkHttpRequestHeaders: "The headers that are needed by the\
+      \ service (not needed when BrowserCompatible is true)"
+    CamelAwsS3VersionId: "(producer) The optional version ID of the newly uploaded\
+      \ object. (consumer) The version ID of the associated Amazon S3 object if available.\
+      \ Version IDs are only assigned to objects when an object is uploaded to an\
+      \ Amazon S3 bucket that has object versioning enabled."
+    CamelAwsS3ReplicationStatus: "Amazon S3 can return this if your request involves\
+      \ a bucket that is either a source or destination in a replication rule."
+    CamelAwsS3Acl: "A well constructed Amazon S3 Access Control List object."
+    CamelAwsS3RangeStart: "The position of the first byte to get"
+    CamelAwsS3CannedAcl: "The canned acl that will be applied to the object. see software.amazon.awssdk.services.s3.model.ObjectCannedACL\
+      \ for allowed values."
+    CamelAwsS3DownloadLinkBrowserCompatible: "Whether the download link is browser\
+      \ compatible"
+    CamelAwsS3BucketName: "The bucket Name which this object will be stored or which\
+      \ will be used for the current operation or in which this object is contained."
+    CamelAwsS3ContentMD5: "The base64 encoded 128-bit MD5 digest of the associated\
+      \ object (content - not including headers) according to RFC 1864. This data\
+      \ is used as a message integrity check to verify that the data received by Amazon\
+      \ S3 is the same data that the caller sent."
+    CamelAwsS3Key: "The key under which this object is stored or will be stored or\
+      \ which will be used for the current operation"
+    CamelAwsS3ContentLength: "The Content-Length HTTP header indicating the size of\
+      \ the associated object in bytes."
+    CamelAwsS3StorageClass: "The storage class of this object."
+    CamelAwsS3RangeEnd: "The position of the last byte to get"
 spec:
   definition:
-    title: "AWS S3 Source"
-    description: |-
-      Receive data from an Amazon S3 Bucket.
-
-      The basic authentication method for the S3 service is to specify an access key and a secret key. These parameters are optional because the Kamelet provides a default credentials provider.
-      
-      If you use the default credentials provider, the S3 client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      Two headers will be duplicated with different names for clarity at sink level, CamelAwsS3Key will be duplicated into aws.s3.key and CamelAwsS3BucketName will be duplicated in aws.s3.bucket.name
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
+    description: "Receive data from an Amazon S3 Bucket.\n\nThe basic authentication\
+      \ method for the S3 service is to specify an access key and a secret key. These\
+      \ parameters are optional because the Kamelet provides a default credentials\
+      \ provider.\n\nIf you use the default credentials provider, the S3 client loads\
+      \ the credentials through this provider and doesn't use the basic authentication\
+      \ method.\n\nTwo headers will be duplicated with different names for clarity\
+      \ at sink level, CamelAwsS3Key will be duplicated into aws.s3.key and CamelAwsS3BucketName\
+      \ will be duplicated in aws.s3.bucket.name"
     properties:
       bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        type: string
+        description: "The S3 Bucket name or Amazon Resource Name (ARN)."
+        title: "Bucket Name"
+        type: "string"
       deleteAfterRead:
-        title: Auto-delete Objects
-        description: Specifies to delete objects after consuming them.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: true
+        description: "Specifies to delete objects after consuming them."
+        title: "Auto-delete Objects"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
+        description: "The access key obtained from AWS."
+        format: "password"
+        title: "Access Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       secretKey:
-        title: Secret Key
-        description: The secret key obtained from AWS.
-        type: string
-        format: password
+        description: "The secret key obtained from AWS."
+        format: "password"
+        title: "Secret Key"
+        type: "string"
         x-descriptors:
-        - urn:alm:descriptor:com.tectonic.ui:password
-        - urn:camel:group:credentials
+        - "urn:alm:descriptor:com.tectonic.ui:password"
+        - "urn:camel:group:credentials"
       region:
-        title: AWS Region
-        description: The AWS region to access.
-        type: string
-        enum: ["ap-south-1", "eu-south-1", "us-gov-east-1", "me-central-1", "ca-central-1", "eu-central-1", "us-iso-west-1", "us-west-1", "us-west-2", "af-south-1", "eu-north-1", "eu-west-3", "eu-west-2", "eu-west-1", "ap-northeast-3", "ap-northeast-2", "ap-northeast-1", "me-south-1", "sa-east-1", "ap-east-1", "cn-north-1", "us-gov-west-1", "ap-southeast-1", "ap-southeast-2", "us-iso-east-1", "ap-southeast-3", "us-east-1", "us-east-2", "cn-northwest-1", "us-isob-east-1", "aws-global", "a [...]
+        description: "The AWS region to access."
+        enum:
+        - "ap-south-1"
+        - "eu-south-1"
+        - "us-gov-east-1"
+        - "me-central-1"
+        - "ca-central-1"
+        - "eu-central-1"
+        - "us-iso-west-1"
+        - "us-west-1"
+        - "us-west-2"
+        - "af-south-1"
+        - "eu-north-1"
+        - "eu-west-3"
+        - "eu-west-2"
+        - "eu-west-1"
+        - "ap-northeast-3"
+        - "ap-northeast-2"
+        - "ap-northeast-1"
+        - "me-south-1"
+        - "sa-east-1"
+        - "ap-east-1"
+        - "cn-north-1"
+        - "us-gov-west-1"
+        - "ap-southeast-1"
+        - "ap-southeast-2"
+        - "us-iso-east-1"
+        - "ap-southeast-3"
+        - "us-east-1"
+        - "us-east-2"
+        - "cn-northwest-1"
+        - "us-isob-east-1"
+        - "aws-global"
+        - "aws-cn-global"
+        - "aws-us-gov-global"
+        - "aws-iso-global"
+        - "aws-iso-b-global"
+        title: "AWS Region"
+        type: "string"
       autoCreateBucket:
-        title: Autocreate Bucket
-        description: Specifies to automatically create the S3 bucket.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      includeBody:
-        title: Include Body
-        description: If true, the exchange is consumed and put into the body and closed. If false, the S3Object stream is put raw into the body and the headers are set with the S3 object metadata.
-        type: boolean
+        description: "Specifies to automatically create the S3 bucket."
+        title: "Autocreate Bucket"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      includeBody:
         default: true
+        description: "If true, the exchange is consumed and put into the body and\
+          \ closed. If false, the S3Object stream is put raw into the body and the\
+          \ headers are set with the S3 object metadata."
+        title: "Include Body"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       prefix:
-        title: Prefix
-        description: The AWS S3 bucket prefix to consider while searching.
-        type: string
-        example: 'folder/'
+        description: "The AWS S3 bucket prefix to consider while searching."
+        example: "folder/"
+        title: "Prefix"
+        type: "string"
       ignoreBody:
-        title: Ignore Body
-        description: If true, the S3 Object body is ignored. Setting this to true overrides any behavior defined by the `includeBody` option. If false, the S3 object is put in the body.
-        type: boolean
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the S3 client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
+        description: "If true, the S3 Object body is ignored. Setting this to true\
+          \ overrides any behavior defined by the `includeBody` option. If false,\
+          \ the S3 object is put in the body."
+        title: "Ignore Body"
+        type: "boolean"
         x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
+      useDefaultCredentialsProvider:
         default: false
+        description: "If true, the S3 client loads credentials through a default credentials\
+          \ provider. If false, it uses the basic authentication method (access key\
+          \ and secret key)."
+        title: "Default Credentials Provider"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        type: string
+        description: "The overriding endpoint URI. To use this option, you must also\
+          \ select the `overrideEndpoint` option."
+        title: "Overwrite Endpoint URI"
+        type: "string"
       overrideEndpoint:
-        title: Endpoint Overwrite
-        description: Select this option to override the endpoint URI. To use this option, you must also provide a URI for the `uriEndpointOverride` option.
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
         default: false
+        description: "Select this option to override the endpoint URI. To use this\
+          \ option, you must also provide a URI for the `uriEndpointOverride` option."
+        title: "Endpoint Overwrite"
+        type: "boolean"
+        x-descriptors:
+        - "urn:alm:descriptor:com.tectonic.ui:checkbox"
       delay:
-        title: Delay
-        description: The number of milliseconds before the next poll of the selected bucket.
-        type: integer
         default: 500
+        description: "The number of milliseconds before the next poll of the selected\
+          \ bucket."
+        title: "Delay"
+        type: "integer"
+    required:
+    - "bucketNameOrArn"
+    - "region"
+    title: "AWS S3 Source"
+    type: "object"
   dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT"
-    - "camel:kamelet"
+  - "camel:core"
+  - "camel:aws2-s3"
+  - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT"
+  - "camel:kamelet"
   template:
     beans:
-      - name: renameHeaders
-        type: "#class:org.apache.camel.kamelets.utils.headers.DuplicateNamingHeaders"
-        property:
-          - key: prefix
-            value: 'CamelAwsS3'
-          - key: renamingPrefix
-            value: 'aws.s3.'
-          - key: mode
-            value: 'filtering'
-          - key: selectedHeaders
-            value: 'CamelAwsS3Key,CamelAwsS3BucketName'
+    - name: "renameHeaders"
+      type: "#class:org.apache.camel.kamelets.utils.headers.DuplicateNamingHeaders"
+      property:
+      - key: "prefix"
+        value: "CamelAwsS3"
+      - key: "renamingPrefix"
+        value: "aws.s3."
+      - key: "mode"
+        value: "filtering"
+      - key: "selectedHeaders"
+        value: "CamelAwsS3Key,CamelAwsS3BucketName"
     from:
       uri: "aws2-s3:{{bucketNameOrArn}}"
       parameters:
diff --git a/library/kamelets-maven-plugin/src/main/java/org/apache/camel/kamelets/maven/plugin/EnrichKameletsMojo.java b/library/kamelets-maven-plugin/src/main/java/org/apache/camel/kamelets/maven/plugin/EnrichKameletsMojo.java
new file mode 100644
index 00000000..eec0749f
--- /dev/null
+++ b/library/kamelets-maven-plugin/src/main/java/org/apache/camel/kamelets/maven/plugin/EnrichKameletsMojo.java
@@ -0,0 +1,106 @@
+/*
+ * 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.kamelets.maven.plugin;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import io.fabric8.camelk.v1alpha1.Kamelet;
+import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.kamelets.catalog.KameletsCatalog;
+import org.apache.camel.tooling.model.ComponentModel;
+import org.apache.maven.plugin.AbstractMojo;
+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.project.MavenProject;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * Copy the properties from a source POM to a different destination POM for syncing purposes.
+ */
+@Mojo(name = "enrich", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true)
+public class EnrichKameletsMojo extends AbstractMojo {
+
+    /**
+     * The base directory
+     */
+    @Parameter(defaultValue = "${project.basedir}")
+    protected File baseDir;
+
+    /**
+     * The Maven project.
+     */
+    @Parameter(defaultValue = "${project}", readonly = true, required = true)
+    protected MavenProject project;
+
+    /**
+     * Whether to fail if validation failed or not. By default true.
+     */
+    @Parameter(property = "kamelets.failOnError", defaultValue = "true")
+    private boolean failOnError = true;
+
+    private static final ObjectMapper MAPPER = new ObjectMapper(new YAMLFactory()).configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        KameletsCatalog catalog = new KameletsCatalog();
+        DefaultCamelCatalog cc = new DefaultCamelCatalog();
+        File folder = new File("kamelets/");
+        File[] listOfFiles = folder.listFiles();
+
+        for (File file : listOfFiles) {
+            if (file.isFile()) {
+                try {
+                    Kamelet local = MAPPER.readValue(file, Kamelet.class);
+                    if (!(local.getMetadata().getLabels().get("camel.apache.org/kamelet.type").equalsIgnoreCase("action"))) {
+                        String kameletName = local.getMetadata().getName();
+                        int lastIndex = kameletName.lastIndexOf("-");
+                        String schemeName = local.getMetadata().getName().substring(0, lastIndex);
+                        Map<String, Object> selectedHeaders = new HashMap<>();
+                        if (schemeName.equalsIgnoreCase("aws-s3")) {
+                            List<ComponentModel.EndpointHeaderModel> headers = cc.componentModel("aws2-s3").getEndpointHeaders();
+                            for (ComponentModel.EndpointHeaderModel e : headers
+                            ) {
+                                selectedHeaders.put(e.getName(), e.getDescription());
+                            }
+                            local.getMetadata().getAdditionalProperties().put("Headers", selectedHeaders);
+                            MAPPER.writeValue(file, local);
+                        }
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+
+            }
+        }
+    }
+    }