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 2023/03/02 18:35:37 UTC

[camel-kamelets] branch main updated: chore: Remove experimental data type Kamelets

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

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


The following commit(s) were added to refs/heads/main by this push:
     new 4f1dd7b8 chore: Remove experimental data type Kamelets
4f1dd7b8 is described below

commit 4f1dd7b8d11b3f965ace8342174f09f678a3e68f
Author: Christoph Deppisch <cd...@redhat.com>
AuthorDate: Thu Mar 2 19:18:04 2023 +0100

    chore: Remove experimental data type Kamelets
    
    Remove AWS S3 and AWS DDB experimental Kamelets in favor of using the data-type-action Kamelet
---
 docs/modules/ROOT/nav.adoc                         |   2 -
 kamelets/aws-ddb-experimental-sink.kamelet.yaml    | 149 ---------------
 kamelets/aws-ddb-sink.kamelet.yaml                 |  21 ++-
 kamelets/aws-s3-experimental-source.kamelet.yaml   | 168 -----------------
 .../kamelets/catalog/KameletsCatalogTest.java      |  40 ++--
 .../transform/aws/ddb/JsonToDdbModelConverter.java | 201 ---------------------
 .../aws/ddb/JsonToDdbModelConverterTest.java       | 184 -------------------
 .../aws-ddb-experimental-sink.kamelet.yaml         | 149 ---------------
 .../resources/kamelets/aws-ddb-sink.kamelet.yaml   |  21 ++-
 .../aws-s3-experimental-source.kamelet.yaml        | 168 -----------------
 .../aws-ddb-sink-exp/amazonDDBClient.groovy        |  53 ------
 .../aws-ddb-sink-exp/aws-ddb-sink-binding.yaml     |  50 -----
 .../aws-ddb-sink-deleteItem.feature                |  61 -------
 .../aws-ddb-sink-exp/aws-ddb-sink-putItem.feature  |  60 ------
 .../aws-ddb-sink-updateItem.feature                |  64 -------
 test/experimental/aws-ddb-sink-exp/putItem.groovy  |  30 ---
 .../aws-ddb-sink-exp/verifyItems.groovy            |  30 ---
 .../experimental/aws-ddb-sink-exp/yaks-config.yaml |  65 -------
 test/experimental/aws-s3-exp/amazonS3Client.groovy |  36 ----
 .../aws-s3-exp/aws-s3-cloudevents.feature          |  50 -----
 .../experimental/aws-s3-exp/aws-s3-knative.feature |  49 -----
 .../experimental/aws-s3-exp/aws-s3-to-knative.yaml |  47 -----
 test/experimental/aws-s3-exp/yaks-config.yaml      |  67 -------
 23 files changed, 48 insertions(+), 1717 deletions(-)

diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc
index f09da690..3d1249e9 100644
--- a/docs/modules/ROOT/nav.adoc
+++ b/docs/modules/ROOT/nav.adoc
@@ -3,7 +3,6 @@
 * xref:avro-serialize-action.adoc[]
 * xref:aws-cloudtrail-source.adoc[]
 * xref:aws-cloudwatch-sink.adoc[]
-* xref:aws-ddb-experimental-sink.adoc[]
 * xref:aws-ddb-sink.adoc[]
 * xref:aws-ddb-streams-source.adoc[]
 * xref:aws-ec2-sink.adoc[]
@@ -15,7 +14,6 @@
 * xref:aws-redshift-sink.adoc[]
 * xref:aws-redshift-source.adoc[]
 * xref:aws-s3-cdc-source.adoc[]
-* xref:aws-s3-experimental-source.adoc[]
 * xref:aws-s3-sink.adoc[]
 * xref:aws-s3-source.adoc[]
 * xref:aws-s3-streaming-upload-sink.adoc[]
diff --git a/kamelets/aws-ddb-experimental-sink.kamelet.yaml b/kamelets/aws-ddb-experimental-sink.kamelet.yaml
deleted file mode 100644
index d2739afa..00000000
--- a/kamelets/aws-ddb-experimental-sink.kamelet.yaml
+++ /dev/null
@@ -1,149 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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
-metadata:
-  name: aws-ddb-experimental-sink
-  annotations:
-    camel.apache.org/kamelet.support.level: "Experimental"
-    camel.apache.org/catalog.version: "4.0.0-SNAPSHOT"
-    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMkQ3MkI4IiBkPSJNNzQuMTc0IDMxLjgwN2w3LjQzNyA1LjM2N3YtNy42MDJsLTcuNDgtOC43NjV2MTAuOTU3bC4wNDMuMDE1eiIvPjxwYXRoIGZpbGw9IiM1Mjk0Q0YiIGQ9Ik01OS44MzggODUuNjY2bDE0LjI5My03LjE0NlYyMC43OTFsLTE0LjMwMy03LjEyNHoiLz48cGF0aCBmaWxsPSIjMjA1Qjk4IiBkPSJNMzkuNDk2IDg1LjY2NkwyNS4yMDMgNzguNTJWMjAuNzkxbDE0LjMwMy03LjEyNHoiLz48cGF0aCBmaWxsPSIjMkQ3Mk [...]
-    camel.apache.org/provider: "Apache Software Foundation"
-    camel.apache.org/kamelet.group: "AWS DynamoDB Streams"
-    camel.apache.org/kamelet.namespace: "AWS"
-  labels:
-    camel.apache.org/kamelet.type: "sink"
-spec:
-  definition:
-    title: "AWS DynamoDB Experimental Sink"
-    description: |-
-      Send data to Amazon DynamoDB. The sent data inserts, updates, or deletes an item on the specified AWS DynamoDB table.
-
-      The basic authentication method for the AWS DynamoDB 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 DynamoDB client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes.
-      
-      This Kamelet supports experimental input format to specify the data type that that is given to this sink. The Kamelet will do best effort to convert the provided input type to the required input for the sink.
-    required:
-      - table
-      - region
-    type: object
-    properties:
-      table:
-        title: Table
-        description: The name of the DynamoDB table.
-        type: string
-      accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
-        x-descriptors:
-        - 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
-        x-descriptors:
-        - 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 [...]
-      operation:
-        title: Operation
-        description: "The operation to perform. The options are PutItem, UpdateItem, or DeleteItem."
-        type: string
-        default: PutItem
-        example: PutItem
-      writeCapacity:
-        title: Write Capacity
-        description: The provisioned throughput to reserve for writing resources to your table.
-        type: integer
-        default: 1
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the DynamoDB client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: false
-      uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        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
-      inputFormat:
-        title: Input Type
-        description: Specify the input type for this Kamelet. The Kamelet will automatically apply conversion logic in order to transform message content to this data type.
-        type: string
-        default: json
-        example: json
-  types:
-    in:
-      mediaType: application/json
-  dependencies:
-  - mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.0.0-SNAPSHOT
-  - "camel:core"
-  - "camel:jackson"
-  - "camel:aws2-ddb"
-  - "camel:kamelet"
-  template:
-    beans:
-    - name: dataTypeRegistry
-      type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
-    - name: inputTypeProcessor
-      type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
-      property:
-        - key: scheme
-          value: 'aws2-ddb'
-        - key: format
-          value: '{{inputFormat}}'
-        - key: registry
-          value: '#bean:{{dataTypeRegistry}}'
-    from:
-      uri: "kamelet:source"
-      steps:
-      - set-property:
-          name: operation
-          constant: "{{operation}}"
-      - process:
-          ref: "{{inputTypeProcessor}}"
-      - to:
-          uri: "aws2-ddb:{{table}}"
-          parameters:
-            secretKey: "{{?secretKey}}"
-            accessKey: "{{?accessKey}}"
-            region: "{{region}}"
-            operation: "{{operation}}"
-            writeCapacity: "{{?writeCapacity}}"
-            useDefaultCredentialsProvider: "{{useDefaultCredentialsProvider}}"
-            uriEndpointOverride: "{{?uriEndpointOverride}}"
-            overrideEndpoint: "{{overrideEndpoint}}"
diff --git a/kamelets/aws-ddb-sink.kamelet.yaml b/kamelets/aws-ddb-sink.kamelet.yaml
index bc7a2933..07a7c3cb 100644
--- a/kamelets/aws-ddb-sink.kamelet.yaml
+++ b/kamelets/aws-ddb-sink.kamelet.yaml
@@ -38,7 +38,7 @@ spec:
 
       If you use the default credentials provider, the DynamoDB client loads the credentials through this provider and doesn't use the basic authentication method.
 
-      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes. 
+      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes.
     required:
       - table
       - region
@@ -108,17 +108,26 @@ spec:
   - "camel:aws2-ddb"
   - "camel:kamelet"
   template:
+    beans:
+      - name: dataTypeRegistry
+        type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
+      - name: dataTypeProcessor
+        type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
+        property:
+          - key: scheme
+            value: 'aws2-ddb'
+          - key: format
+            value: 'json'
+          - key: registry
+            value: '#bean:{{dataTypeRegistry}}'
     from:
       uri: "kamelet:source"
       steps:
       - set-property:
           name: operation
           constant: "{{operation}}"
-      - unmarshal:
-          json:
-            library: Jackson
-            unmarshalType: com.fasterxml.jackson.databind.JsonNode
-      - bean: "org.apache.camel.kamelets.utils.transform.aws.ddb.JsonToDdbModelConverter"
+      - process:
+          ref: "{{dataTypeProcessor}}"
       - to:
           uri: "aws2-ddb:{{table}}"
           parameters:
diff --git a/kamelets/aws-s3-experimental-source.kamelet.yaml b/kamelets/aws-s3-experimental-source.kamelet.yaml
deleted file mode 100644
index af435540..00000000
--- a/kamelets/aws-s3-experimental-source.kamelet.yaml
+++ /dev/null
@@ -1,168 +0,0 @@
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
-metadata:
-  name: aws-s3-experimental-source
-  annotations:
-    camel.apache.org/kamelet.support.level: "Experimental"
-    camel.apache.org/catalog.version: "4.0.0-SNAPSHOT"
-    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAyNDguMiAzMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZT4uc3QyOHtmaWxsOiM4YzMxMjN9LnN0Mjl7ZmlsbDojZTA1MjQzfTwvc3R5bGU+PHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0yMCA1Mi4xTDAgNjJ2MTc1LjVsMjAgOS45LjEtLjFWNTIuMmwtLjEtLjEiLz48cGF0aCBjbGFzcz0ic3QyOSIgZD0iTTEyNyAyMjJMMjAgMjQ3LjVWNTIuMUwxMjcgNzd2MTQ1Ii8+PHBhdGggY2xhc3M9InN0MjgiIG [...]
-    camel.apache.org/provider: "Apache Software Foundation"
-    camel.apache.org/kamelet.group: "AWS S3"
-    camel.apache.org/kamelet.namespace: "AWS"
-  labels:
-    camel.apache.org/kamelet.type: "source"
-spec:
-  definition:
-    title: "AWS S3 Experimental 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.
-      
-      This Kamelet supports experimental output format to specify the data type produced by this source. Users of the Kamelet are able to choose from different output types.
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
-    properties:
-      bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        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
-      accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
-        x-descriptors:
-        - 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
-        x-descriptors:
-        - 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 [...]
-      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
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: true
-      prefix:
-        title: Prefix
-        description: The AWS S3 bucket prefix to consider while searching.
-        type: string
-        example: 'folder/'
-      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
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: false
-      uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        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
-      delay:
-        title: Delay
-        description: The number of milliseconds before the next poll of the selected bucket.
-        type: integer
-        default: 500
-      outputFormat:
-        title: Output Type
-        description: Choose the output type for this Kamelet. The Kamelet supports different output types and performs automatic message conversion according to this data type.
-        type: string
-        default: binary
-        example: binary
-  dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.0.0-SNAPSHOT"
-    - "camel:kamelet"
-  template:
-    beans:
-      - name: dataTypeRegistry
-        type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
-      - name: outputTypeProcessor
-        type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
-        property:
-          - key: scheme
-            value: 'aws2-s3'
-          - key: format
-            value: '{{outputFormat}}'
-          - key: registry
-            value: '#bean:{{dataTypeRegistry}}'
-      - 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:
-        autoCreateBucket: "{{autoCreateBucket}}"
-        secretKey: "{{?secretKey}}"
-        accessKey: "{{?accessKey}}"
-        region: "{{region}}"
-        includeBody: "{{includeBody}}"
-        ignoreBody: "{{ignoreBody}}"
-        deleteAfterRead: "{{deleteAfterRead}}"
-        prefix: "{{?prefix}}"
-        useDefaultCredentialsProvider: "{{useDefaultCredentialsProvider}}"
-        uriEndpointOverride: "{{?uriEndpointOverride}}"
-        overrideEndpoint: "{{overrideEndpoint}}"
-        delay: "{{delay}}"
-      steps:
-      - process:
-          ref: "{{renameHeaders}}"
-      - process:
-          ref: "{{outputTypeProcessor}}"
-      - to: "kamelet:sink"
diff --git a/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java b/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
index 74d06922..e38d8e9d 100644
--- a/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
+++ b/library/camel-kamelets-catalog/src/test/java/org/apache/camel/kamelets/catalog/KameletsCatalogTest.java
@@ -16,21 +16,18 @@
  */
 package org.apache.camel.kamelets.catalog;
 
-import io.fabric8.camelk.v1alpha1.Kamelet;
+import java.util.List;
+import java.util.Map;
+
 import io.fabric8.camelk.v1alpha1.JSONSchemaProps;
+import io.fabric8.camelk.v1alpha1.Kamelet;
 import io.github.classgraph.ClassGraph;
 import org.apache.camel.kamelets.catalog.model.KameletTypeEnum;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.List;
-import java.util.Map;
+import static org.junit.jupiter.api.Assertions.*;
 
 public class KameletsCatalogTest {
     static KameletsCatalog catalog;
@@ -43,20 +40,20 @@ public class KameletsCatalogTest {
     @Test
     void testGetKameletsName() throws Exception {
         List<String> names = catalog.getKameletsName();
-        assertTrue(!names.isEmpty());
+        assertFalse(names.isEmpty());
     }
 
     @Test
     void testGetKamelets() throws Exception {
         Map<String, Kamelet> kamelets = catalog.getKamelets();
-        assertTrue(!kamelets.isEmpty());
+        assertFalse(kamelets.isEmpty());
     }
-    
+
     @Test
     void testGetKameletsDefinition() throws Exception {
         JSONSchemaProps props = catalog.getKameletDefinition("aws-sqs-source");
         assertEquals(14, props.getProperties().keySet().size());
-        assertTrue(props.getProperties().keySet().contains("queueNameOrArn"));
+        assertTrue(props.getProperties().containsKey("queueNameOrArn"));
     }
 
     @Test
@@ -75,7 +72,7 @@ public class KameletsCatalogTest {
     @Test
     void testGetKameletsByProvider() throws Exception {
         List<Kamelet> c = catalog.getKameletByProvider("Apache Software Foundation");
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
         c = catalog.getKameletByProvider("Eclipse");
         assertTrue(c.isEmpty());
     }
@@ -83,19 +80,19 @@ public class KameletsCatalogTest {
     @Test
     void testGetKameletsByType() throws Exception {
         List<Kamelet> c = catalog.getKameletsByType(KameletTypeEnum.SOURCE.type());
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
         c = catalog.getKameletsByType(KameletTypeEnum.SINK.type());
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
         c = catalog.getKameletsByType(KameletTypeEnum.ACTION.type());
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
     }
 
     @Test
     void testGetKameletsByGroup() throws Exception {
         List<Kamelet> c = catalog.getKameletsByGroups("AWS S3");
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
         c = catalog.getKameletsByGroups("AWS SQS");
-        assertTrue(!c.isEmpty());
+        assertFalse(c.isEmpty());
         c = catalog.getKameletsByGroups("Not-existing-group");
         assertTrue(c.isEmpty());
     }
@@ -103,8 +100,8 @@ public class KameletsCatalogTest {
     @Test
     void testGetKameletsByNamespace() throws Exception {
         List<Kamelet> c = catalog.getKameletsByNamespace("AWS");
-        assertTrue(!c.isEmpty());
-        assertTrue(c.size() == 27);
+        assertFalse(c.isEmpty());
+        assertEquals(25, c.size());
         c = catalog.getKameletsByGroups("Not-existing-group");
         assertTrue(c.isEmpty());
     }
@@ -123,7 +120,7 @@ public class KameletsCatalogTest {
         Map<String, Object> template = catalog.getKameletTemplate("aws-sqs-source");
         assertNotNull(template);
     }
-    
+
     @Test
     void testAllKameletFilesLoaded() throws Exception {
         int numberOfKameletFiles = new ClassGraph().acceptPaths("/" + KameletsCatalog.KAMELETS_DIR + "/").scan().getAllResources().size();
@@ -263,7 +260,6 @@ public class KameletsCatalogTest {
         assertEquals(expected, headers.size());
     }
 
-
     @Test
     void testGetKameletScheme() throws Exception {
         assertEquals("aws2-s3", catalog.getKameletScheme("aws-s3"));
diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverter.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverter.java
deleted file mode 100644
index 2a203ed0..00000000
--- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverter.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * 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.utils.transform.aws.ddb;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeProperty;
-import org.apache.camel.InvalidPayloadException;
-import org.apache.camel.component.aws2.ddb.Ddb2Constants;
-import org.apache.camel.component.aws2.ddb.Ddb2Operations;
-import software.amazon.awssdk.services.dynamodb.model.AttributeAction;
-import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
-import software.amazon.awssdk.services.dynamodb.model.AttributeValueUpdate;
-import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
-
-/**
- * Maps Json body to DynamoDB attribute value map and sets the attribute map as Camel DynamoDB header entries.
- *
- * Json property names map to attribute keys and Json property values map to attribute values.
- *
- * During mapping the Json property types resolve to the respective attribute types ({@code String, StringSet, Boolean, Number, NumberSet, Map, Null}).
- * Primitive typed arrays in Json get mapped to {@code StringSet} or {@code NumberSet} attribute values.
- *
- * For PutItem operation the Json body defines all item attributes.
- *
- * For DeleteItem operation the Json body defines only the primary key attributes that identify the item to delete.
- *
- * For UpdateItem operation the Json body defines both key attributes to identify the item to be updated and all item attributes tht get updated on the item.
- *
- * The given Json body can use "key" and "item" as top level properties.
- * Both define a Json object that will be mapped to respective attribute value maps:
- * <pre>{@code
- * {
- *   "key": {},
- *   "item": {}
- * }
- * }
- * </pre>
- * The converter will extract the objects and set respective attribute value maps as header entries.
- * This is a comfortable way to define different key and item attribute value maps e.g. on UpdateItem operation.
- *
- * In case key and item attribute value maps are identical you can omit the special top level properties completely.
- * The converter will map the whole Json body as is then and use it as source for the attribute value map.
- */
-public class JsonToDdbModelConverter {
-
-    public String process(@ExchangeProperty("operation") String operation, Exchange exchange) throws InvalidPayloadException {
-        if (exchange.getMessage().getHeaders().containsKey(Ddb2Constants.ITEM) ||
-                exchange.getMessage().getHeaders().containsKey(Ddb2Constants.KEY)) {
-            return "";
-        }
-
-        ObjectMapper mapper = new ObjectMapper();
-
-        JsonNode jsonBody = exchange.getMessage().getMandatoryBody(JsonNode.class);
-
-        JsonNode key = jsonBody.get("key");
-        JsonNode item = jsonBody.get("item");
-
-        Map<String, Object> keyProps;
-        if (key != null) {
-            keyProps = mapper.convertValue(key, new TypeReference<Map<String, Object>>(){});
-        } else {
-            keyProps = mapper.convertValue(jsonBody, new TypeReference<Map<String, Object>>(){});
-        }
-
-        Map<String, Object> itemProps;
-        if (item != null) {
-            itemProps = mapper.convertValue(item, new TypeReference<Map<String, Object>>(){});
-        } else {
-            itemProps = keyProps;
-        }
-
-        final Map<String, AttributeValue> keyMap = getAttributeValueMap(keyProps);
-
-        switch (Ddb2Operations.valueOf(operation)) {
-            case PutItem:
-                exchange.getMessage().setHeader(Ddb2Constants.OPERATION, Ddb2Operations.PutItem);
-                exchange.getMessage().setHeader(Ddb2Constants.ITEM, getAttributeValueMap(itemProps));
-                setHeaderIfNotPresent(Ddb2Constants.RETURN_VALUES, ReturnValue.ALL_OLD.toString(), exchange);
-                break;
-            case UpdateItem:
-                exchange.getMessage().setHeader(Ddb2Constants.OPERATION, Ddb2Operations.UpdateItem);
-                exchange.getMessage().setHeader(Ddb2Constants.KEY, keyMap);
-                exchange.getMessage().setHeader(Ddb2Constants.UPDATE_VALUES, getAttributeValueUpdateMap(itemProps));
-                setHeaderIfNotPresent(Ddb2Constants.RETURN_VALUES, ReturnValue.ALL_NEW.toString(), exchange);
-                break;
-            case DeleteItem:
-                exchange.getMessage().setHeader(Ddb2Constants.OPERATION, Ddb2Operations.DeleteItem);
-                exchange.getMessage().setHeader(Ddb2Constants.KEY, keyMap);
-                setHeaderIfNotPresent(Ddb2Constants.RETURN_VALUES, ReturnValue.ALL_OLD.toString(), exchange);
-                break;
-            default:
-                throw new UnsupportedOperationException(String.format("Unsupported operation '%s'", operation));
-        }
-
-        return "";
-    }
-
-    private void setHeaderIfNotPresent(String headerName, Object value, Exchange exchange) {
-        exchange.getMessage().setHeader(headerName, value);
-    }
-
-    private Map<String, AttributeValue> getAttributeValueMap(Map<String, Object> body) {
-        final Map<String, AttributeValue> attributeValueMap = new LinkedHashMap<>();
-
-        for (Map.Entry<String, Object> attribute : body.entrySet()) {
-            attributeValueMap.put(attribute.getKey(), getAttributeValue(attribute.getValue()));
-        }
-
-        return attributeValueMap;
-    }
-
-    private Map<String, AttributeValueUpdate> getAttributeValueUpdateMap(Map<String, Object> body) {
-        final Map<String, AttributeValueUpdate> attributeValueMap = new LinkedHashMap<>();
-
-        for (Map.Entry<String, Object> attribute : body.entrySet()) {
-            attributeValueMap.put(attribute.getKey(), getAttributeValueUpdate(attribute.getValue()));
-        }
-
-        return attributeValueMap;
-    }
-
-    private static AttributeValue getAttributeValue(Object value) {
-        if (value == null) {
-            return AttributeValue.builder().nul(true).build();
-        }
-
-        if (value instanceof String) {
-            return AttributeValue.builder().s(value.toString()).build();
-        }
-
-        if (value instanceof Integer) {
-            return AttributeValue.builder().n(value.toString()).build();
-        }
-
-        if (value instanceof Boolean) {
-            return AttributeValue.builder().bool((Boolean) value).build();
-        }
-
-        if (value instanceof String[]) {
-            return AttributeValue.builder().ss((String[]) value).build();
-        }
-
-        if (value instanceof int[]) {
-            return AttributeValue.builder().ns(Stream.of((int[]) value).map(Object::toString).collect(Collectors.toList())).build();
-        }
-
-        if (value instanceof List) {
-            List<?> values = ((List<?>) value);
-
-            if (values.isEmpty()) {
-                return AttributeValue.builder().ss().build();
-            } else if (values.get(0) instanceof Integer) {
-                return AttributeValue.builder().ns(values.stream().map(Object::toString).collect(Collectors.toList())).build();
-            } else {
-                return AttributeValue.builder().ss(values.stream().map(Object::toString).collect(Collectors.toList())).build();
-            }
-        }
-
-        if (value instanceof Map) {
-            Map<String, AttributeValue> nestedAttributes = new LinkedHashMap<>();
-
-            for (Map.Entry<?, ?> nested : ((Map<?, ?>) value).entrySet()) {
-                nestedAttributes.put(nested.getKey().toString(), getAttributeValue(nested.getValue()));
-            }
-
-            return AttributeValue.builder().m(nestedAttributes).build();
-        }
-
-        return AttributeValue.builder().s(value.toString()).build();
-    }
-
-    private static AttributeValueUpdate getAttributeValueUpdate(Object value) {
-        return AttributeValueUpdate.builder()
-                .action(AttributeAction.PUT)
-                .value(getAttributeValue(value)).build();
-    }
-}
\ No newline at end of file
diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverterTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverterTest.java
deleted file mode 100644
index e88dce4e..00000000
--- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/transform/aws/ddb/JsonToDdbModelConverterTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * 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.utils.transform.aws.ddb;
-
-import java.util.Map;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.camel.Exchange;
-import org.apache.camel.component.aws2.ddb.Ddb2Constants;
-import org.apache.camel.component.aws2.ddb.Ddb2Operations;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.support.DefaultExchange;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import software.amazon.awssdk.services.dynamodb.model.AttributeAction;
-import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
-import software.amazon.awssdk.services.dynamodb.model.AttributeValueUpdate;
-import software.amazon.awssdk.services.dynamodb.model.ReturnValue;
-
-class JsonToDdbModelConverterTest {
-
-    private DefaultCamelContext camelContext;
-
-    private final ObjectMapper mapper = new ObjectMapper();
-
-    private final JsonToDdbModelConverter processor = new JsonToDdbModelConverter();
-
-    private final String keyJson = "{" +
-            "\"name\": \"Rajesh Koothrappali\"" +
-            "}";
-
-    private final String itemJson = "{" +
-            "\"name\": \"Rajesh Koothrappali\"," +
-            "\"age\": 29," +
-            "\"super-heroes\": [\"batman\", \"spiderman\", \"wonderwoman\"]," +
-            "\"issues\": [5, 3, 9, 1]," +
-            "\"girlfriend\": null," +
-            "\"doctorate\": true" +
-            "}";
-
-    @BeforeEach
-    void setup() {
-        this.camelContext = new DefaultCamelContext();
-    }
-
-    @Test
-    @SuppressWarnings("unchecked")
-    void shouldMapPutItemHeaders() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree(itemJson));
-
-        processor.process(Ddb2Operations.PutItem.name(), exchange);
-
-        Assertions.assertTrue(exchange.getMessage().hasHeaders());
-        Assertions.assertEquals(Ddb2Operations.PutItem, exchange.getMessage().getHeader(Ddb2Constants.OPERATION));
-        Assertions.assertEquals(ReturnValue.ALL_OLD.toString(), exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
-
-        assertAttributeValueMap(exchange.getMessage().getHeader(Ddb2Constants.ITEM, Map.class));
-    }
-
-    @Test
-    @SuppressWarnings("unchecked")
-    void shouldMapUpdateItemHeaders() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree("{\"key\": " + keyJson + ", \"item\": " + itemJson + "}"));
-
-        processor.process(Ddb2Operations.UpdateItem.name(), exchange);
-
-        Assertions.assertTrue(exchange.getMessage().hasHeaders());
-        Assertions.assertEquals(Ddb2Operations.UpdateItem, exchange.getMessage().getHeader(Ddb2Constants.OPERATION));
-        Assertions.assertEquals(ReturnValue.ALL_NEW.toString(), exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
-
-        Map<String, AttributeValue> attributeValueMap = exchange.getMessage().getHeader(Ddb2Constants.KEY, Map.class);
-        Assertions.assertEquals(1L, attributeValueMap.size());
-        Assertions.assertEquals(AttributeValue.builder().s("Rajesh Koothrappali").build(), attributeValueMap.get("name"));
-
-        assertAttributeValueUpdateMap(exchange.getMessage().getHeader(Ddb2Constants.UPDATE_VALUES, Map.class));
-    }
-
-    @Test
-    @SuppressWarnings("unchecked")
-    void shouldMapDeleteItemHeaders() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree("{\"key\": " + keyJson + "}"));
-
-        processor.process(Ddb2Operations.DeleteItem.name(), exchange);
-
-        Assertions.assertTrue(exchange.getMessage().hasHeaders());
-        Assertions.assertEquals(Ddb2Operations.DeleteItem, exchange.getMessage().getHeader(Ddb2Constants.OPERATION));
-        Assertions.assertEquals(ReturnValue.ALL_OLD.toString(), exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
-
-        Map<String, AttributeValue> attributeValueMap = exchange.getMessage().getHeader(Ddb2Constants.KEY, Map.class);
-        Assertions.assertEquals(1L, attributeValueMap.size());
-        Assertions.assertEquals(AttributeValue.builder().s("Rajesh Koothrappali").build(), attributeValueMap.get("name"));
-    }
-
-    @Test
-    @SuppressWarnings("unchecked")
-    void shouldMapNestedObjects() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree("{\"user\":" + itemJson + "}"));
-
-        processor.process(Ddb2Operations.PutItem.name(), exchange);
-
-        Assertions.assertTrue(exchange.getMessage().hasHeaders());
-        Assertions.assertEquals(Ddb2Operations.PutItem, exchange.getMessage().getHeader(Ddb2Constants.OPERATION));
-        Assertions.assertEquals(ReturnValue.ALL_OLD.toString(), exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
-
-        Map<String, AttributeValue> attributeValueMap = exchange.getMessage().getHeader(Ddb2Constants.ITEM, Map.class);
-        Assertions.assertEquals(1L, attributeValueMap.size());
-
-        Assertions.assertEquals("AttributeValue(M={name=AttributeValue(S=Rajesh Koothrappali), " +
-                "age=AttributeValue(N=29), " +
-                "super-heroes=AttributeValue(SS=[batman, spiderman, wonderwoman]), " +
-                "issues=AttributeValue(NS=[5, 3, 9, 1]), " +
-                "girlfriend=AttributeValue(NUL=true), " +
-                "doctorate=AttributeValue(BOOL=true)})", attributeValueMap.get("user").toString());
-    }
-
-    @Test
-    @SuppressWarnings("unchecked")
-    void shouldMapEmptyJson() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree("{}"));
-
-        processor.process(Ddb2Operations.PutItem.name(), exchange);
-
-        Assertions.assertTrue(exchange.getMessage().hasHeaders());
-        Assertions.assertEquals(Ddb2Operations.PutItem, exchange.getMessage().getHeader(Ddb2Constants.OPERATION));
-        Assertions.assertEquals(ReturnValue.ALL_OLD.toString(), exchange.getMessage().getHeader(Ddb2Constants.RETURN_VALUES));
-
-        Map<String, AttributeValue> attributeValueMap = exchange.getMessage().getHeader(Ddb2Constants.ITEM, Map.class);
-        Assertions.assertEquals(0L, attributeValueMap.size());
-    }
-
-    @Test()
-    void shouldFailForUnsupportedOperation() throws Exception {
-        Exchange exchange = new DefaultExchange(camelContext);
-
-        exchange.getMessage().setBody(mapper.readTree("{}"));
-
-        Assertions.assertThrows(UnsupportedOperationException.class, () -> processor.process(Ddb2Operations.BatchGetItems.name(), exchange));
-    }
-
-    private void assertAttributeValueMap(Map<String, AttributeValue> attributeValueMap) {
-        Assertions.assertEquals(6L, attributeValueMap.size());
-        Assertions.assertEquals(AttributeValue.builder().s("Rajesh Koothrappali").build(), attributeValueMap.get("name"));
-        Assertions.assertEquals(AttributeValue.builder().n("29").build(), attributeValueMap.get("age"));
-        Assertions.assertEquals(AttributeValue.builder().ss("batman", "spiderman", "wonderwoman").build(), attributeValueMap.get("super-heroes"));
-        Assertions.assertEquals(AttributeValue.builder().ns("5", "3", "9", "1").build(), attributeValueMap.get("issues"));
-        Assertions.assertEquals(AttributeValue.builder().nul(true).build(), attributeValueMap.get("girlfriend"));
-        Assertions.assertEquals(AttributeValue.builder().bool(true).build(), attributeValueMap.get("doctorate"));
-    }
-
-    private void assertAttributeValueUpdateMap(Map<String, AttributeValueUpdate> attributeValueMap) {
-        Assertions.assertEquals(6L, attributeValueMap.size());
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().s("Rajesh Koothrappali").build()).action(AttributeAction.PUT).build(), attributeValueMap.get("name"));
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().n("29").build()).action(AttributeAction.PUT).build(), attributeValueMap.get("age"));
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().ss("batman", "spiderman", "wonderwoman").build()).action(AttributeAction.PUT).build(), attributeValueMap.get("super-heroes"));
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().ns("5", "3", "9", "1").build()).action(AttributeAction.PUT).build(), attributeValueMap.get("issues"));
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().nul(true).build()).action(AttributeAction.PUT).build(), attributeValueMap.get("girlfriend"));
-        Assertions.assertEquals(AttributeValueUpdate.builder().value(AttributeValue.builder().bool(true).build()).action(AttributeAction.PUT).build(), attributeValueMap.get("doctorate"));
-    }
-}
\ No newline at end of file
diff --git a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-experimental-sink.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-experimental-sink.kamelet.yaml
deleted file mode 100644
index d2739afa..00000000
--- a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-experimental-sink.kamelet.yaml
+++ /dev/null
@@ -1,149 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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
-metadata:
-  name: aws-ddb-experimental-sink
-  annotations:
-    camel.apache.org/kamelet.support.level: "Experimental"
-    camel.apache.org/catalog.version: "4.0.0-SNAPSHOT"
-    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMCIgd2lkdGg9IjEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjMkQ3MkI4IiBkPSJNNzQuMTc0IDMxLjgwN2w3LjQzNyA1LjM2N3YtNy42MDJsLTcuNDgtOC43NjV2MTAuOTU3bC4wNDMuMDE1eiIvPjxwYXRoIGZpbGw9IiM1Mjk0Q0YiIGQ9Ik01OS44MzggODUuNjY2bDE0LjI5My03LjE0NlYyMC43OTFsLTE0LjMwMy03LjEyNHoiLz48cGF0aCBmaWxsPSIjMjA1Qjk4IiBkPSJNMzkuNDk2IDg1LjY2NkwyNS4yMDMgNzguNTJWMjAuNzkxbDE0LjMwMy03LjEyNHoiLz48cGF0aCBmaWxsPSIjMkQ3Mk [...]
-    camel.apache.org/provider: "Apache Software Foundation"
-    camel.apache.org/kamelet.group: "AWS DynamoDB Streams"
-    camel.apache.org/kamelet.namespace: "AWS"
-  labels:
-    camel.apache.org/kamelet.type: "sink"
-spec:
-  definition:
-    title: "AWS DynamoDB Experimental Sink"
-    description: |-
-      Send data to Amazon DynamoDB. The sent data inserts, updates, or deletes an item on the specified AWS DynamoDB table.
-
-      The basic authentication method for the AWS DynamoDB 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 DynamoDB client loads the credentials through this provider and doesn't use the basic authentication method.
-
-      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes.
-      
-      This Kamelet supports experimental input format to specify the data type that that is given to this sink. The Kamelet will do best effort to convert the provided input type to the required input for the sink.
-    required:
-      - table
-      - region
-    type: object
-    properties:
-      table:
-        title: Table
-        description: The name of the DynamoDB table.
-        type: string
-      accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
-        x-descriptors:
-        - 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
-        x-descriptors:
-        - 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 [...]
-      operation:
-        title: Operation
-        description: "The operation to perform. The options are PutItem, UpdateItem, or DeleteItem."
-        type: string
-        default: PutItem
-        example: PutItem
-      writeCapacity:
-        title: Write Capacity
-        description: The provisioned throughput to reserve for writing resources to your table.
-        type: integer
-        default: 1
-      useDefaultCredentialsProvider:
-        title: Default Credentials Provider
-        description: If true, the DynamoDB client loads credentials through a default credentials provider. If false, it uses the basic authentication method (access key and secret key).
-        type: boolean
-        x-descriptors:
-          - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: false
-      uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        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
-      inputFormat:
-        title: Input Type
-        description: Specify the input type for this Kamelet. The Kamelet will automatically apply conversion logic in order to transform message content to this data type.
-        type: string
-        default: json
-        example: json
-  types:
-    in:
-      mediaType: application/json
-  dependencies:
-  - mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.0.0-SNAPSHOT
-  - "camel:core"
-  - "camel:jackson"
-  - "camel:aws2-ddb"
-  - "camel:kamelet"
-  template:
-    beans:
-    - name: dataTypeRegistry
-      type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
-    - name: inputTypeProcessor
-      type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
-      property:
-        - key: scheme
-          value: 'aws2-ddb'
-        - key: format
-          value: '{{inputFormat}}'
-        - key: registry
-          value: '#bean:{{dataTypeRegistry}}'
-    from:
-      uri: "kamelet:source"
-      steps:
-      - set-property:
-          name: operation
-          constant: "{{operation}}"
-      - process:
-          ref: "{{inputTypeProcessor}}"
-      - to:
-          uri: "aws2-ddb:{{table}}"
-          parameters:
-            secretKey: "{{?secretKey}}"
-            accessKey: "{{?accessKey}}"
-            region: "{{region}}"
-            operation: "{{operation}}"
-            writeCapacity: "{{?writeCapacity}}"
-            useDefaultCredentialsProvider: "{{useDefaultCredentialsProvider}}"
-            uriEndpointOverride: "{{?uriEndpointOverride}}"
-            overrideEndpoint: "{{overrideEndpoint}}"
diff --git a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-sink.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-sink.kamelet.yaml
index bc7a2933..07a7c3cb 100644
--- a/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-sink.kamelet.yaml
+++ b/library/camel-kamelets/src/main/resources/kamelets/aws-ddb-sink.kamelet.yaml
@@ -38,7 +38,7 @@ spec:
 
       If you use the default credentials provider, the DynamoDB client loads the credentials through this provider and doesn't use the basic authentication method.
 
-      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes. 
+      This Kamelet expects a JSON-formatted body and it must include the primary key values that define the DynamoDB item. The mapping between the JSON fields and table attribute values is done by key. For example, for  '{"username":"oscerd", "city":"Rome"}' input, the Kamelet inserts or update an item in the specified AWS DynamoDB table and sets the values for the 'username' and 'city' attributes.
     required:
       - table
       - region
@@ -108,17 +108,26 @@ spec:
   - "camel:aws2-ddb"
   - "camel:kamelet"
   template:
+    beans:
+      - name: dataTypeRegistry
+        type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
+      - name: dataTypeProcessor
+        type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
+        property:
+          - key: scheme
+            value: 'aws2-ddb'
+          - key: format
+            value: 'json'
+          - key: registry
+            value: '#bean:{{dataTypeRegistry}}'
     from:
       uri: "kamelet:source"
       steps:
       - set-property:
           name: operation
           constant: "{{operation}}"
-      - unmarshal:
-          json:
-            library: Jackson
-            unmarshalType: com.fasterxml.jackson.databind.JsonNode
-      - bean: "org.apache.camel.kamelets.utils.transform.aws.ddb.JsonToDdbModelConverter"
+      - process:
+          ref: "{{dataTypeProcessor}}"
       - to:
           uri: "aws2-ddb:{{table}}"
           parameters:
diff --git a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-experimental-source.kamelet.yaml b/library/camel-kamelets/src/main/resources/kamelets/aws-s3-experimental-source.kamelet.yaml
deleted file mode 100644
index af435540..00000000
--- a/library/camel-kamelets/src/main/resources/kamelets/aws-s3-experimental-source.kamelet.yaml
+++ /dev/null
@@ -1,168 +0,0 @@
-apiVersion: camel.apache.org/v1alpha1
-kind: Kamelet
-metadata:
-  name: aws-s3-experimental-source
-  annotations:
-    camel.apache.org/kamelet.support.level: "Experimental"
-    camel.apache.org/catalog.version: "4.0.0-SNAPSHOT"
-    camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjAiIHk9IjAiIHZpZXdCb3g9IjAgMCAyNDguMiAzMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxzdHlsZT4uc3QyOHtmaWxsOiM4YzMxMjN9LnN0Mjl7ZmlsbDojZTA1MjQzfTwvc3R5bGU+PHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0yMCA1Mi4xTDAgNjJ2MTc1LjVsMjAgOS45LjEtLjFWNTIuMmwtLjEtLjEiLz48cGF0aCBjbGFzcz0ic3QyOSIgZD0iTTEyNyAyMjJMMjAgMjQ3LjVWNTIuMUwxMjcgNzd2MTQ1Ii8+PHBhdGggY2xhc3M9InN0MjgiIG [...]
-    camel.apache.org/provider: "Apache Software Foundation"
-    camel.apache.org/kamelet.group: "AWS S3"
-    camel.apache.org/kamelet.namespace: "AWS"
-  labels:
-    camel.apache.org/kamelet.type: "source"
-spec:
-  definition:
-    title: "AWS S3 Experimental 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.
-      
-      This Kamelet supports experimental output format to specify the data type produced by this source. Users of the Kamelet are able to choose from different output types.
-    required:
-      - bucketNameOrArn
-      - region
-    type: object
-    properties:
-      bucketNameOrArn:
-        title: Bucket Name
-        description: The S3 Bucket name or Amazon Resource Name (ARN).
-        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
-      accessKey:
-        title: Access Key
-        description: The access key obtained from AWS.
-        type: string
-        format: password
-        x-descriptors:
-        - 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
-        x-descriptors:
-        - 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 [...]
-      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
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: true
-      prefix:
-        title: Prefix
-        description: The AWS S3 bucket prefix to consider while searching.
-        type: string
-        example: 'folder/'
-      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
-        x-descriptors:
-        - 'urn:alm:descriptor:com.tectonic.ui:checkbox'
-        default: false
-      uriEndpointOverride:
-        title: Overwrite Endpoint URI
-        description: The overriding endpoint URI. To use this option, you must also select the `overrideEndpoint` option.
-        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
-      delay:
-        title: Delay
-        description: The number of milliseconds before the next poll of the selected bucket.
-        type: integer
-        default: 500
-      outputFormat:
-        title: Output Type
-        description: Choose the output type for this Kamelet. The Kamelet supports different output types and performs automatic message conversion according to this data type.
-        type: string
-        default: binary
-        example: binary
-  dependencies:
-    - "camel:core"
-    - "camel:aws2-s3"
-    - "mvn:org.apache.camel.kamelets:camel-kamelets-utils:4.0.0-SNAPSHOT"
-    - "camel:kamelet"
-  template:
-    beans:
-      - name: dataTypeRegistry
-        type: "#class:org.apache.camel.kamelets.utils.format.DefaultDataTypeRegistry"
-      - name: outputTypeProcessor
-        type: "#class:org.apache.camel.kamelets.utils.format.DataTypeProcessor"
-        property:
-          - key: scheme
-            value: 'aws2-s3'
-          - key: format
-            value: '{{outputFormat}}'
-          - key: registry
-            value: '#bean:{{dataTypeRegistry}}'
-      - 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:
-        autoCreateBucket: "{{autoCreateBucket}}"
-        secretKey: "{{?secretKey}}"
-        accessKey: "{{?accessKey}}"
-        region: "{{region}}"
-        includeBody: "{{includeBody}}"
-        ignoreBody: "{{ignoreBody}}"
-        deleteAfterRead: "{{deleteAfterRead}}"
-        prefix: "{{?prefix}}"
-        useDefaultCredentialsProvider: "{{useDefaultCredentialsProvider}}"
-        uriEndpointOverride: "{{?uriEndpointOverride}}"
-        overrideEndpoint: "{{overrideEndpoint}}"
-        delay: "{{delay}}"
-      steps:
-      - process:
-          ref: "{{renameHeaders}}"
-      - process:
-          ref: "{{outputTypeProcessor}}"
-      - to: "kamelet:sink"
diff --git a/test/experimental/aws-ddb-sink-exp/amazonDDBClient.groovy b/test/experimental/aws-ddb-sink-exp/amazonDDBClient.groovy
deleted file mode 100644
index 2d332366..00000000
--- a/test/experimental/aws-ddb-sink-exp/amazonDDBClient.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.
- */
-
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
-import software.amazon.awssdk.regions.Region
-import software.amazon.awssdk.services.dynamodb.DynamoDbClient
-import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition
-import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement
-import software.amazon.awssdk.services.dynamodb.model.KeyType
-import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput
-import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType
-
-DynamoDbClient amazonDDBClient = DynamoDbClient
-        .builder()
-        .endpointOverride(URI.create("${YAKS_TESTCONTAINERS_LOCALSTACK_DYNAMODB_LOCAL_URL}"))
-        .credentialsProvider(StaticCredentialsProvider.create(
-                AwsBasicCredentials.create(
-                        "${YAKS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}",
-                        "${YAKS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}")
-        ))
-        .region(Region.of("${YAKS_TESTCONTAINERS_LOCALSTACK_REGION}"))
-        .build()
-
-amazonDDBClient.createTable(b -> {
-        b.tableName("${aws.ddb.tableName}")
-        b.keySchema(
-                KeySchemaElement.builder().attributeName("id").keyType(KeyType.HASH).build(),
-        )
-        b.attributeDefinitions(
-                AttributeDefinition.builder().attributeName("id").attributeType(ScalarAttributeType.N).build(),
-        )
-        b.provisionedThroughput(
-                ProvisionedThroughput.builder()
-                        .readCapacityUnits(1L)
-                        .writeCapacityUnits(1L).build())
-})
-
-return amazonDDBClient
diff --git a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-binding.yaml b/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-binding.yaml
deleted file mode 100644
index e8588422..00000000
--- a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-binding.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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: KameletBinding
-metadata:
-  name: aws-ddb-sink-binding
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1alpha1
-      name: timer-source
-    properties:
-      period: ${timer.source.period}
-      message: '${aws.ddb.json.data}'
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1alpha1
-        name: log-action
-        properties:
-          showHeaders: true
-  sink:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1alpha1
-      name: aws-ddb-experimental-sink
-    properties:
-      table: ${aws.ddb.tableName}
-      operation: ${aws.ddb.operation}
-      overrideEndpoint: true
-      uriEndpointOverride: ${YAKS_TESTCONTAINERS_LOCALSTACK_DYNAMODB_LOCAL_URL}
-      accessKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}
-      secretKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}
-      region: ${YAKS_TESTCONTAINERS_LOCALSTACK_REGION}
diff --git a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-deleteItem.feature b/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-deleteItem.feature
deleted file mode 100644
index fc9f641a..00000000
--- a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-deleteItem.feature
+++ /dev/null
@@ -1,61 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-@experimental
-Feature: AWS DDB Sink - DeleteItem
-
-  Background:
-    Given variables
-      | timer.source.period  | 10000 |
-      | aws.ddb.operation    | DeleteItem |
-      | aws.ddb.tableName    | movies |
-      | aws.ddb.item.id      | 1 |
-      | aws.ddb.item.year    | 1985 |
-      | aws.ddb.item.title   | Back to the future |
-      | aws.ddb.json.data    | {"id": ${aws.ddb.item.id}} |
-
-  Scenario: Create infrastructure
-    # Start LocalStack container
-    Given Enable service DYNAMODB
-    Given start LocalStack container
-    # Create AWS-DDB client
-    Given New global Camel context
-    Given load to Camel registry amazonDDBClient.groovy
-
-  Scenario: Create item on AWS-DDB
-    Given run script putItem.groovy
-    Given variables
-      | maxRetryAttempts  | 20 |
-      | aws.ddb.items     | [[year:AttributeValue(N=${aws.ddb.item.year}), id:AttributeValue(N=${aws.ddb.item.id}), title:AttributeValue(S=${aws.ddb.item.title})]] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Verify AWS-DDB Kamelet sink binding
-    # Create binding
-    When load KameletBinding aws-ddb-sink-binding.yaml
-    And KameletBinding aws-ddb-sink-binding is available
-    And Camel K integration aws-ddb-sink-binding is running
-    And Camel K integration aws-ddb-sink-binding should print Started aws-ddb-sink-binding
-    # Verify Kamelet sink
-    Given variables
-      | maxRetryAttempts  | 20 |
-      | aws.ddb.items     | [] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Remove resources
-    # Remove Camel K resources
-    Given delete KameletBinding aws-ddb-sink-binding
-    # Stop LocalStack container
-    Given stop LocalStack container
diff --git a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-putItem.feature b/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-putItem.feature
deleted file mode 100644
index 49460659..00000000
--- a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-putItem.feature
+++ /dev/null
@@ -1,60 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-@experimental
-Feature: AWS DDB Sink - PutItem
-
-  Background:
-    Given variables
-      | timer.source.period  | 10000 |
-      | aws.ddb.operation    | PutItem |
-      | aws.ddb.tableName    | movies |
-      | aws.ddb.item.id      | 1 |
-      | aws.ddb.item.year    | 1977 |
-      | aws.ddb.item.title   | Star Wars IV |
-      | aws.ddb.json.data    | { "id":${aws.ddb.item.id}, "year":${aws.ddb.item.year}, "title":"${aws.ddb.item.title}" } |
-
-  Scenario: Create infrastructure
-    # Start LocalStack container
-    Given Enable service DYNAMODB
-    Given start LocalStack container
-    # Create AWS-DDB client
-    Given New global Camel context
-    Given load to Camel registry amazonDDBClient.groovy
-
-  Scenario: Verify empty items on AWS-DDB
-    Given variables
-      | maxRetryAttempts  | 20 |
-      | aws.ddb.items | [] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Verify AWS-DDB Kamelet sink binding
-    # Create binding
-    When load KameletBinding aws-ddb-sink-binding.yaml
-    And KameletBinding aws-ddb-sink-binding is available
-    And Camel K integration aws-ddb-sink-binding is running
-    And Camel K integration aws-ddb-sink-binding should print Started aws-ddb-sink-binding
-    # Verify Kamelet sink
-    Given variables
-      | maxRetryAttempts  | 20 |
-      | aws.ddb.items     | [[year:AttributeValue(N=${aws.ddb.item.year}), id:AttributeValue(N=${aws.ddb.item.id}), title:AttributeValue(S=${aws.ddb.item.title})]] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Remove resources
-    # Remove Camel K binding
-    Given delete KameletBinding aws-ddb-sink-binding
-    # Stop LocalStack container
-    Given stop LocalStack container
diff --git a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-updateItem.feature b/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-updateItem.feature
deleted file mode 100644
index be5a4c7e..00000000
--- a/test/experimental/aws-ddb-sink-exp/aws-ddb-sink-updateItem.feature
+++ /dev/null
@@ -1,64 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-@experimental
-Feature: AWS DDB Sink - UpdateItem
-
-  Background:
-    Given variables
-      | timer.source.period    | 10000 |
-      | aws.ddb.operation      | UpdateItem |
-      | aws.ddb.tableName      | movies |
-      | aws.ddb.item.id        | 1 |
-      | aws.ddb.item.year      | 1933 |
-      | aws.ddb.item.title     | King Kong |
-      | aws.ddb.item.title.new | King Kong - Historical |
-      | aws.ddb.item.directors | ["Merian C. Cooper", "Ernest B. Schoedsack"] |
-      | aws.ddb.json.data      | { "key": {"id": ${aws.ddb.item.id}}, "item": {"title": "${aws.ddb.item.title.new}", "year": ${aws.ddb.item.year}, "directors": ${aws.ddb.item.directors}} } |
-
-  Scenario: Create infrastructure
-    # Start LocalStack container
-    Given Enable service DYNAMODB
-    Given start LocalStack container
-    # Create AWS-DDB client
-    Given New global Camel context
-    Given load to Camel registry amazonDDBClient.groovy
-
-  Scenario: Create item on AWS-DDB
-    Given run script putItem.groovy
-    Given variables
-      | maxRetryAttempts  | 20 |
-      | aws.ddb.items | [[year:AttributeValue(N=${aws.ddb.item.year}), id:AttributeValue(N=${aws.ddb.item.id}), title:AttributeValue(S=${aws.ddb.item.title})]] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Verify AWS-DDB Kamelet sink binding
-    # Create binding
-    When load KameletBinding aws-ddb-sink-binding.yaml
-    And KameletBinding aws-ddb-sink-binding is available
-    And Camel K integration aws-ddb-sink-binding is running
-    And Camel K integration aws-ddb-sink-binding should print Started aws-ddb-sink-binding
-    # Verify Kamelet sink
-    Given variables
-      | maxRetryAttempts  | 200 |
-      | aws.ddb.item.directors | [Ernest B. Schoedsack, Merian C. Cooper] |
-      | aws.ddb.items | [[year:AttributeValue(N=${aws.ddb.item.year}), directors:AttributeValue(SS=${aws.ddb.item.directors}), id:AttributeValue(N=${aws.ddb.item.id}), title:AttributeValue(S=${aws.ddb.item.title.new})]] |
-    Then apply actions verifyItems.groovy
-
-  Scenario: Remove resources
-    # Remove Camel K resources
-    Given delete KameletBinding aws-ddb-sink-binding
-    # Stop LocalStack container
-    Given stop LocalStack container
diff --git a/test/experimental/aws-ddb-sink-exp/putItem.groovy b/test/experimental/aws-ddb-sink-exp/putItem.groovy
deleted file mode 100644
index fd482f90..00000000
--- a/test/experimental/aws-ddb-sink-exp/putItem.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-import software.amazon.awssdk.services.dynamodb.model.AttributeValue
-import software.amazon.awssdk.services.dynamodb.model.ReturnValue
-
-Map<String, AttributeValue> item = new HashMap<>()
-item.put("id", AttributeValue.builder().n("${aws.ddb.item.id}").build())
-item.put("year", AttributeValue.builder().n("${aws.ddb.item.year}").build())
-item.put("title", AttributeValue.builder().s("${aws.ddb.item.title}").build())
-
-amazonDDBClient.putItem(b -> {
-    b.tableName("${aws.ddb.tableName}")
-    b.item(item)
-    b.returnValues(ReturnValue.ALL_OLD)
-})
diff --git a/test/experimental/aws-ddb-sink-exp/verifyItems.groovy b/test/experimental/aws-ddb-sink-exp/verifyItems.groovy
deleted file mode 100644
index b89dad5a..00000000
--- a/test/experimental/aws-ddb-sink-exp/verifyItems.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.
- */
-
-$(repeatOnError()
-    .until('i > ${maxRetryAttempts}')
-    .actions(new com.consol.citrus.TestAction() {
-        @Override
-        void execute(com.consol.citrus.context.TestContext context) {
-            try {
-                assert context.getVariable('aws.ddb.items').equals(amazonDDBClient.scan(b -> b.tableName(context.getVariable('aws.ddb.tableName')))?.items()?.toListString())
-            } catch (AssertionError e) {
-                throw new com.consol.citrus.exceptions.CitrusRuntimeException("AWS DDB item verification failed", e)
-            }
-        }
-    })
-)
diff --git a/test/experimental/aws-ddb-sink-exp/yaks-config.yaml b/test/experimental/aws-ddb-sink-exp/yaks-config.yaml
deleted file mode 100644
index c3fe0232..00000000
--- a/test/experimental/aws-ddb-sink-exp/yaks-config.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-
-config:
-  namespace:
-    temporary: false
-  runtime:
-    testcontainers:
-      enabled: true
-    env:
-      - name: YAKS_CAMEL_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_CAMELK_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_KAMELETS_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_JBANG_CAMEL_DUMP_INTEGRATION_OUTPUT
-        value: true
-      - name: YAKS_TESTCONTAINERS_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: CITRUS_TYPE_CONVERTER
-        value: camel
-    resources:
-      - putItem.groovy
-      - verifyItems.groovy
-      - amazonDDBClient.groovy
-      - aws-ddb-sink-binding.yaml
-    cucumber:
-      tags:
-        - "not @ignored"
-    settings:
-      loggers:
-        - name: INTEGRATION_STATUS
-          level: INFO
-        - name: INTEGRATION_LOGS
-          level: INFO
-      dependencies:
-        - groupId: org.apache.camel
-          artifactId: camel-aws2-ddb
-          version: "@camel.version@"
-        - groupId: software.amazon.awssdk
-          artifactId: dynamodb
-          version: "@aws-java-sdk2.version@"
-        - groupId: org.apache.camel
-          artifactId: camel-jackson
-          version: "@camel.version@"
-  dump:
-    enabled: true
-    failedOnly: true
-    includes:
-      - app=camel-k
diff --git a/test/experimental/aws-s3-exp/amazonS3Client.groovy b/test/experimental/aws-s3-exp/amazonS3Client.groovy
deleted file mode 100644
index e0d21074..00000000
--- a/test/experimental/aws-s3-exp/amazonS3Client.groovy
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.
- */
-
-import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
-import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
-import software.amazon.awssdk.regions.Region
-import software.amazon.awssdk.services.s3.S3Client
-
-S3Client s3 = S3Client
-        .builder()
-        .endpointOverride(URI.create("${YAKS_TESTCONTAINERS_LOCALSTACK_S3_LOCAL_URL}"))
-        .credentialsProvider(StaticCredentialsProvider.create(
-                AwsBasicCredentials.create(
-                        "${YAKS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}",
-                        "${YAKS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}")
-        ))
-        .region(Region.of("${YAKS_TESTCONTAINERS_LOCALSTACK_REGION}"))
-        .build()
-
-s3.createBucket(b -> b.bucket("${aws.s3.bucketNameOrArn}"))
-
-return s3
diff --git a/test/experimental/aws-s3-exp/aws-s3-cloudevents.feature b/test/experimental/aws-s3-exp/aws-s3-cloudevents.feature
deleted file mode 100644
index 6885c58d..00000000
--- a/test/experimental/aws-s3-exp/aws-s3-cloudevents.feature
+++ /dev/null
@@ -1,50 +0,0 @@
-@knative
-@experimental
-Feature: AWS S3 Kamelet - cloud events data type
-
-  Background:
-    Given Knative event consumer timeout is 20000 ms
-    Given variables
-      | aws.s3.output | cloudevents |
-      | aws.s3.bucketNameOrArn | mybucket |
-      | aws.s3.message | Hello from S3 Kamelet |
-      | aws.s3.key | hello.txt |
-
-  Scenario: Create infrastructure
-    # Start LocalStack container
-    Given Enable service S3
-    Given start LocalStack container
-    # Create AWS-S3 client
-    Given New global Camel context
-    Given load to Camel registry amazonS3Client.groovy
-    # Create Knative broker
-    Given create Knative broker default
-    And Knative broker default is running
-
-  Scenario: Verify AWS-S3 Kamelet to Knative binding
-    # Create binding
-    When load KameletBinding aws-s3-to-knative.yaml
-    And KameletBinding aws-s3-to-knative-binding is available
-    And Camel K integration aws-s3-to-knative-binding is running
-    Then Camel K integration aws-s3-to-knative-binding should print Started aws-s3-to-knative-binding
-    # Verify Kamelet source
-    Given create Knative event consumer service event-consumer-service
-    Given create Knative trigger event-service-trigger on service event-consumer-service with filter on attributes
-      | type   | org.apache.camel.event.aws.s3.getObject |
-    Given Camel exchange message header CamelAwsS3Key="${aws.s3.key}"
-    Given send Camel exchange to("aws2-s3://${aws.s3.bucketNameOrArn}?amazonS3Client=#amazonS3Client") with body: ${aws.s3.message}
-    Then expect Knative event data: ${aws.s3.message}
-    And verify Knative event
-      | type            | org.apache.camel.event.aws.s3.getObject |
-      | source          | aws.s3.bucket.${aws.s3.bucketNameOrArn} |
-      | subject         | ${aws.s3.key} |
-      | id              | @ignore@ |
-
-  Scenario: Remove resources
-    # Remove Camel K resources
-    Given delete KameletBinding aws-s3-to-knative-binding
-    Given delete Kubernetes service event-consumer-service
-    # Remove Knative resources
-    Given delete Knative broker default
-    # Stop LocalStack container
-    Given stop LocalStack container
diff --git a/test/experimental/aws-s3-exp/aws-s3-knative.feature b/test/experimental/aws-s3-exp/aws-s3-knative.feature
deleted file mode 100644
index 10ad5264..00000000
--- a/test/experimental/aws-s3-exp/aws-s3-knative.feature
+++ /dev/null
@@ -1,49 +0,0 @@
-@knative
-@experimental
-Feature: AWS S3 Kamelet - Knative binding
-
-  Background:
-    Given Knative event consumer timeout is 20000 ms
-    Given variables
-      | aws.s3.output | string |
-      | aws.s3.bucketNameOrArn | mybucket |
-      | aws.s3.message | Hello from S3 Kamelet |
-      | aws.s3.key | hello.txt |
-
-  Scenario: Create infrastructure
-    # Start LocalStack container
-    Given Enable service S3
-    Given start LocalStack container
-    # Create AWS-S3 client
-    Given New global Camel context
-    Given load to Camel registry amazonS3Client.groovy
-    # Create Knative broker
-    Given create Knative broker default
-    And Knative broker default is running
-
-  Scenario: Verify AWS-S3 Kamelet to Knative binding
-    # Create binding
-    When load KameletBinding aws-s3-to-knative.yaml
-    And KameletBinding aws-s3-to-knative-binding is available
-    And Camel K integration aws-s3-to-knative-binding is running
-    Then Camel K integration aws-s3-to-knative-binding should print Started aws-s3-to-knative-binding
-    # Verify Kamelet source
-    Given create Knative event consumer service event-consumer-service
-    Given create Knative trigger event-service-trigger on service event-consumer-service with filter on attributes
-      | type   | org.apache.camel.event |
-    Given Camel exchange message header CamelAwsS3Key="${aws.s3.key}"
-    Given send Camel exchange to("aws2-s3://${aws.s3.bucketNameOrArn}?amazonS3Client=#amazonS3Client") with body: ${aws.s3.message}
-    Then expect Knative event data: ${aws.s3.message}
-    And verify Knative event
-      | type            | org.apache.camel.event |
-      | source          | @ignore@ |
-      | id              | @ignore@ |
-
-  Scenario: Remove resources
-    # Remove Camel K resources
-    Given delete KameletBinding aws-s3-to-knative-binding
-    Given delete Kubernetes service event-consumer-service
-    # Remove Knative resources
-    Given delete Knative broker default
-    # Stop LocalStack container
-    Given stop LocalStack container
diff --git a/test/experimental/aws-s3-exp/aws-s3-to-knative.yaml b/test/experimental/aws-s3-exp/aws-s3-to-knative.yaml
deleted file mode 100644
index 117c3332..00000000
--- a/test/experimental/aws-s3-exp/aws-s3-to-knative.yaml
+++ /dev/null
@@ -1,47 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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: KameletBinding
-metadata:
-  name: aws-s3-to-knative-binding
-spec:
-  source:
-    ref:
-      kind: Kamelet
-      apiVersion: camel.apache.org/v1alpha1
-      name: aws-s3-experimental-source
-    properties:
-      bucketNameOrArn: ${aws.s3.bucketNameOrArn}
-      overrideEndpoint: true
-      outputFormat: ${aws.s3.output}
-      uriEndpointOverride: ${YAKS_TESTCONTAINERS_LOCALSTACK_S3_URL}
-      accessKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}
-      secretKey: ${YAKS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}
-      region: ${YAKS_TESTCONTAINERS_LOCALSTACK_REGION}
-  steps:
-    - ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1alpha1
-        name: log-sink
-      properties:
-        showHeaders: true
-  sink:
-    ref:
-      kind: Broker
-      apiVersion: eventing.knative.dev/v1
-      name: default
diff --git a/test/experimental/aws-s3-exp/yaks-config.yaml b/test/experimental/aws-s3-exp/yaks-config.yaml
deleted file mode 100644
index ce37838a..00000000
--- a/test/experimental/aws-s3-exp/yaks-config.yaml
+++ /dev/null
@@ -1,67 +0,0 @@
-# ---------------------------------------------------------------------------
-# 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.
-# ---------------------------------------------------------------------------
-
-config:
-  namespace:
-    temporary: false
-  runtime:
-    testcontainers:
-      enabled: true
-    env:
-      - name: YAKS_CAMEL_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_CAMELK_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_KAMELETS_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_KUBERNETES_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_KNATIVE_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: YAKS_JBANG_CAMEL_DUMP_INTEGRATION_OUTPUT
-        value: true
-      - name: YAKS_TESTCONTAINERS_AUTO_REMOVE_RESOURCES
-        value: false
-      - name: CITRUS_TYPE_CONVERTER
-        value: camel
-    resources:
-      - amazonS3Client.groovy
-      - aws-s3-to-knative.yaml
-    cucumber:
-      tags:
-        - "not @ignored and not @knative"
-    settings:
-      loggers:
-        - name: INTEGRATION_STATUS
-          level: INFO
-        - name: INTEGRATION_LOGS
-          level: INFO
-      dependencies:
-        - groupId: org.apache.camel
-          artifactId: camel-aws2-s3
-          version: "@camel.version@"
-        - groupId: software.amazon.awssdk
-          artifactId: s3
-          version: "@aws-java-sdk2.version@"
-        - groupId: org.apache.camel
-          artifactId: camel-jackson
-          version: "@camel.version@"
-  dump:
-    enabled: true
-    failedOnly: true
-    includes:
-      - app=camel-k