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 2026/02/04 10:38:30 UTC

(camel) branch main updated (cdb5e23bb942 -> 75a46090f324)

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

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


    from cdb5e23bb942 CAMEL-22954: camel-core - Add nested option to simple (#21243)
     new 86c1b61d7f9f CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side
     new 616c7eaed4e1 Azure SDK BOM: Downgrade to 1.3.3 until the Azurite container will support the latest version
     new 14ad7b7c0de4 CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side
     new 75a46090f324 CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../catalog/components/azure-storage-blob.json     | 140 ++++++------
 .../storage/blob/BlobComponentConfigurer.java      |  36 +++
 .../azure/storage/blob/BlobEndpointConfigurer.java |  36 +++
 .../azure/storage/blob/BlobEndpointUriFactory.java |   8 +-
 .../azure/storage/blob/azure-storage-blob.json     | 140 ++++++------
 .../main/docs/azure-storage-blob-component.adoc    | 135 +++++++++++
 .../azure/storage/blob/BlobConfiguration.java      |  88 ++++++++
 .../component/azure/storage/blob/BlobConsumer.java | 130 ++++++++++-
 .../azure/storage/blob/BlobComponentTest.java      |  67 ++++++
 .../azure/storage/blob/BlobConsumerTest.java       | 104 +++++++++
 .../blob/integration/BlobConsumerDeleteMoveIT.java | 248 +++++++++++++++++++++
 .../AzureStorageBlobComponentBuilderFactory.java   | 121 ++++++++++
 .../endpoint/dsl/BlobEndpointBuilderFactory.java   | 167 ++++++++++++++
 parent/pom.xml                                     |   2 +-
 14 files changed, 1291 insertions(+), 131 deletions(-)
 create mode 100644 components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobConsumerTest.java
 create mode 100644 components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerDeleteMoveIT.java


(camel) 03/04: CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side

Posted by ac...@apache.org.
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.git

commit 14ad7b7c0de478170310f64115ae75d51172a48f
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 4 10:58:19 2026 +0100

    CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 .../blob/integration/BlobConsumerDeleteMoveIT.java | 248 +++++++++++++++++++++
 1 file changed, 248 insertions(+)

diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerDeleteMoveIT.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerDeleteMoveIT.java
new file mode 100644
index 000000000000..ff8b6de8dbf2
--- /dev/null
+++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerDeleteMoveIT.java
@@ -0,0 +1,248 @@
+/*
+ * 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.component.azure.storage.blob.integration;
+
+import java.util.concurrent.TimeUnit;
+
+import com.azure.storage.blob.BlobContainerClient;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.azure.storage.blob.BlobConstants;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.awaitility.Awaitility;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Integration tests for deleteAfterRead and moveAfterRead consumer options.
+ */
+class BlobConsumerDeleteMoveIT extends Base {
+
+    @EndpointInject("direct:createBlob")
+    private ProducerTemplate templateStart;
+
+    private String deleteContainerName;
+    private String moveSourceContainerName;
+    private String moveDestContainerName;
+    private String noDeleteContainerName;
+    private String prefixMoveSourceContainerName;
+    private String prefixMoveDestContainerName;
+
+    private BlobContainerClient deleteContainerClient;
+    private BlobContainerClient moveSourceContainerClient;
+    private BlobContainerClient moveDestContainerClient;
+    private BlobContainerClient noDeleteContainerClient;
+    private BlobContainerClient prefixMoveSourceContainerClient;
+    private BlobContainerClient prefixMoveDestContainerClient;
+
+    @BeforeAll
+    public void setup() {
+        deleteContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        moveSourceContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        moveDestContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        noDeleteContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        prefixMoveSourceContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+        prefixMoveDestContainerName = RandomStringUtils.randomAlphabetic(5).toLowerCase();
+
+        deleteContainerClient = serviceClient.getBlobContainerClient(deleteContainerName);
+        moveSourceContainerClient = serviceClient.getBlobContainerClient(moveSourceContainerName);
+        moveDestContainerClient = serviceClient.getBlobContainerClient(moveDestContainerName);
+        noDeleteContainerClient = serviceClient.getBlobContainerClient(noDeleteContainerName);
+        prefixMoveSourceContainerClient = serviceClient.getBlobContainerClient(prefixMoveSourceContainerName);
+        prefixMoveDestContainerClient = serviceClient.getBlobContainerClient(prefixMoveDestContainerName);
+
+        // Create all containers
+        deleteContainerClient.create();
+        moveSourceContainerClient.create();
+        moveDestContainerClient.create();
+        noDeleteContainerClient.create();
+        prefixMoveSourceContainerClient.create();
+        prefixMoveDestContainerClient.create();
+    }
+
+    @Test
+    void testDeleteAfterRead() throws Exception {
+        final String blobName = "delete-test-blob";
+        final MockEndpoint mockEndpoint = getMockEndpoint("mock:deleteResult");
+        mockEndpoint.expectedMessageCount(1);
+
+        // Create a blob
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Test content for delete");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, deleteContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, blobName);
+        });
+
+        // Verify blob exists before consumption
+        assertTrue(deleteContainerClient.getBlobClient(blobName).exists(),
+                "Blob should exist before consumption");
+
+        mockEndpoint.assertIsSatisfied();
+
+        // Wait for delete operation to complete
+        Awaitility.await()
+                .atMost(10, TimeUnit.SECONDS)
+                .pollInterval(500, TimeUnit.MILLISECONDS)
+                .untilAsserted(() -> assertFalse(deleteContainerClient.getBlobClient(blobName).exists(),
+                        "Blob should be deleted after consumption"));
+    }
+
+    @Test
+    void testNoDeleteAfterRead() throws Exception {
+        final String blobName = "no-delete-test-blob";
+        final MockEndpoint mockEndpoint = getMockEndpoint("mock:noDeleteResult");
+        mockEndpoint.expectedMessageCount(1);
+
+        // Create a blob
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Test content no delete");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, noDeleteContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, blobName);
+        });
+
+        // Verify blob exists before consumption
+        assertTrue(noDeleteContainerClient.getBlobClient(blobName).exists(),
+                "Blob should exist before consumption");
+
+        mockEndpoint.assertIsSatisfied();
+
+        // Wait a bit to ensure no delete happens
+        Thread.sleep(2000);
+
+        // Verify blob still exists (default deleteAfterRead=false)
+        assertTrue(noDeleteContainerClient.getBlobClient(blobName).exists(),
+                "Blob should still exist after consumption when deleteAfterRead=false");
+    }
+
+    @Test
+    void testMoveAfterRead() throws Exception {
+        final String blobName = "move-test-blob";
+        final MockEndpoint mockEndpoint = getMockEndpoint("mock:moveResult");
+        mockEndpoint.expectedMessageCount(1);
+
+        // Create a blob in source container
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Test content for move");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, moveSourceContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, blobName);
+        });
+
+        // Verify blob exists in source before consumption
+        assertTrue(moveSourceContainerClient.getBlobClient(blobName).exists(),
+                "Blob should exist in source before consumption");
+        assertFalse(moveDestContainerClient.getBlobClient(blobName).exists(),
+                "Blob should not exist in destination before consumption");
+
+        mockEndpoint.assertIsSatisfied();
+
+        // Wait for move operation to complete
+        Awaitility.await()
+                .atMost(10, TimeUnit.SECONDS)
+                .pollInterval(500, TimeUnit.MILLISECONDS)
+                .untilAsserted(() -> {
+                    assertFalse(moveSourceContainerClient.getBlobClient(blobName).exists(),
+                            "Blob should be deleted from source after move");
+                    assertTrue(moveDestContainerClient.getBlobClient(blobName).exists(),
+                            "Blob should exist in destination after move");
+                });
+    }
+
+    @Test
+    void testMoveAfterReadWithPrefixAndSuffix() throws Exception {
+        final String sourceBlobName = "incoming/test-blob";
+        final String expectedDestBlobName = "processed/test-blob.done";
+        final MockEndpoint mockEndpoint = getMockEndpoint("mock:prefixMoveResult");
+        mockEndpoint.expectedMessageCount(1);
+
+        // Create a blob in source container with prefix
+        templateStart.send("direct:createBlob", exchange -> {
+            exchange.getIn().setBody("Test content for prefix move");
+            exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, prefixMoveSourceContainerName);
+            exchange.getIn().setHeader(BlobConstants.BLOB_NAME, sourceBlobName);
+        });
+
+        // Verify blob exists in source before consumption
+        assertTrue(prefixMoveSourceContainerClient.getBlobClient(sourceBlobName).exists(),
+                "Blob should exist in source before consumption");
+
+        mockEndpoint.assertIsSatisfied();
+
+        // Wait for move operation to complete
+        Awaitility.await()
+                .atMost(10, TimeUnit.SECONDS)
+                .pollInterval(500, TimeUnit.MILLISECONDS)
+                .untilAsserted(() -> {
+                    assertFalse(prefixMoveSourceContainerClient.getBlobClient(sourceBlobName).exists(),
+                            "Blob should be deleted from source after move");
+                    assertTrue(prefixMoveDestContainerClient.getBlobClient(expectedDestBlobName).exists(),
+                            "Blob should exist in destination with new name after move");
+                });
+    }
+
+    @AfterAll
+    public void deleteContainers() {
+        deleteContainerClient.deleteIfExists();
+        moveSourceContainerClient.deleteIfExists();
+        moveDestContainerClient.deleteIfExists();
+        noDeleteContainerClient.deleteIfExists();
+        prefixMoveSourceContainerClient.deleteIfExists();
+        prefixMoveDestContainerClient.deleteIfExists();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:createBlob")
+                        .to("azure-storage-blob://cameldev?operation=uploadBlockBlob");
+
+                // Route with deleteAfterRead=true
+                from("azure-storage-blob://cameldev/" + deleteContainerName
+                     + "?blobServiceClient=#serviceClient&deleteAfterRead=true")
+                        .to("mock:deleteResult");
+
+                // Route with default deleteAfterRead=false (no delete)
+                from("azure-storage-blob://cameldev/" + noDeleteContainerName
+                     + "?blobServiceClient=#serviceClient")
+                        .to("mock:noDeleteResult");
+
+                // Route with moveAfterRead=true
+                from("azure-storage-blob://cameldev/" + moveSourceContainerName
+                     + "?blobServiceClient=#serviceClient&moveAfterRead=true&destinationContainer=" + moveDestContainerName)
+                        .to("mock:moveResult");
+
+                // Route with moveAfterRead=true and prefix/suffix options
+                from("azure-storage-blob://cameldev/" + prefixMoveSourceContainerName
+                     + "?blobServiceClient=#serviceClient"
+                     + "&moveAfterRead=true"
+                     + "&destinationContainer=" + prefixMoveDestContainerName
+                     + "&prefix=incoming/"
+                     + "&removePrefixOnMove=true"
+                     + "&destinationBlobPrefix=processed/"
+                     + "&destinationBlobSuffix=.done")
+                        .to("mock:prefixMoveResult");
+            }
+        };
+    }
+}


(camel) 04/04: CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side

Posted by ac...@apache.org.
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.git

commit 75a46090f324aa092a5bcab8b0810a157f5423d0
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 4 11:08:33 2026 +0100

    CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 .../main/docs/azure-storage-blob-component.adoc    | 135 +++++++++++++++++++++
 1 file changed, 135 insertions(+)

diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc b/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
index 9f1b17285159..f5a8dbdd9cad 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/docs/azure-storage-blob-component.adoc
@@ -196,6 +196,141 @@ from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&acc
 to("mock:results");
 --------------------------------------------------------------------------------
 
+==== Delete After Read
+
+The consumer supports automatic deletion of blobs after they have been successfully processed. This is useful when you want to ensure that blobs are only processed once.
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+// Delete blob after successful processing
+from("azure-storage-blob://camelazure/container1?deleteAfterRead=true&accessKey=RAW(yourAccessKey)")
+    .log("Processing blob: ${header.CamelAzureStorageBlobBlobName}")
+    .to("direct:processBlob");
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    id: azure-blob-delete-after-read
+    from:
+      uri: azure-storage-blob://camelazure/container1
+      parameters:
+        deleteAfterRead: true
+        credentialType: SHARED_ACCOUNT_KEY
+        accessKey: "RAW({{azure.accessKey}})"
+      steps:
+        - log: "Processing blob: ${header.CamelAzureStorageBlobBlobName}"
+        - to: direct:processBlob
+----
+====
+
+IMPORTANT: The delete operation is only performed if the Exchange is successfully committed. If processing fails or a rollback occurs, the blob will not be deleted and can be reprocessed on the next poll.
+
+NOTE: When `deleteAfterRead` is set to `false` (the default), the same blobs will be retrieved repeatedly in subsequent polls. In this case, you should use the Idempotent Consumer EIP to filter out duplicates based on the `CamelAzureStorageBlobBlobName` header.
+
+==== Move After Read
+
+The consumer can move blobs to a different container after successful processing. This is useful for archiving processed blobs or implementing a processing pipeline across containers.
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+// Move blob to archive container after processing
+from("azure-storage-blob://camelazure/incoming?moveAfterRead=true&destinationContainer=archive&accessKey=RAW(yourAccessKey)")
+    .log("Processing blob: ${header.CamelAzureStorageBlobBlobName}")
+    .to("direct:processBlob");
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    id: azure-blob-move-after-read
+    from:
+      uri: azure-storage-blob://camelazure/incoming
+      parameters:
+        moveAfterRead: true
+        destinationContainer: archive
+        credentialType: SHARED_ACCOUNT_KEY
+        accessKey: "RAW({{azure.accessKey}})"
+      steps:
+        - log: "Processing blob: ${header.CamelAzureStorageBlobBlobName}"
+        - to: direct:processBlob
+----
+====
+
+You can also customize the destination blob name by adding a prefix and/or suffix:
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+// Move blob with prefix and suffix transformation
+// Source: incoming/data.csv -> Destination: processed/data.csv.done
+from("azure-storage-blob://camelazure/source"
+    + "?moveAfterRead=true"
+    + "&destinationContainer=archive"
+    + "&prefix=incoming/"
+    + "&removePrefixOnMove=true"
+    + "&destinationBlobPrefix=processed/"
+    + "&destinationBlobSuffix=.done"
+    + "&accessKey=RAW(yourAccessKey)")
+    .log("Processing: ${header.CamelAzureStorageBlobBlobName}")
+    .to("direct:processBlob");
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    id: azure-blob-move-with-transform
+    from:
+      uri: azure-storage-blob://camelazure/source
+      parameters:
+        moveAfterRead: true
+        destinationContainer: archive
+        prefix: "incoming/"
+        removePrefixOnMove: true
+        destinationBlobPrefix: "processed/"
+        destinationBlobSuffix: ".done"
+        credentialType: SHARED_ACCOUNT_KEY
+        accessKey: "RAW({{azure.accessKey}})"
+      steps:
+        - log: "Processing: ${header.CamelAzureStorageBlobBlobName}"
+        - to: direct:processBlob
+----
+====
+
+The move operation works as follows:
+
+1. The blob is copied to the destination container with the new name
+2. The original blob is deleted from the source container
+3. Both operations only occur after the Exchange is successfully committed
+
+The following options control the move behavior:
+
+[width="100%",cols="25%,75%",options="header",]
+|===
+|Option |Description
+|`moveAfterRead` |Enable moving blobs after successful processing
+|`destinationContainer` |Target container for moved blobs (required when `moveAfterRead=true`)
+|`destinationBlobPrefix` |Prefix to add to the blob name in the destination
+|`destinationBlobSuffix` |Suffix to add to the blob name in the destination
+|`removePrefixOnMove` |Remove the source prefix from the blob name before adding destination prefix
+|===
 
 === Producer Operations Examples
 - `listBlobContainers`:


(camel) 01/04: CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side

Posted by ac...@apache.org.
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.git

commit 86c1b61d7f9f239e2140f9f57201e78977536af0
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 4 10:18:50 2026 +0100

    CAMEL-16826 - Camel-Azure-Storage-Blob: Add deleteAfterRead option for consumer side
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 .../catalog/components/azure-storage-blob.json     | 140 +++++++++--------
 .../storage/blob/BlobComponentConfigurer.java      |  36 +++++
 .../azure/storage/blob/BlobEndpointConfigurer.java |  36 +++++
 .../azure/storage/blob/BlobEndpointUriFactory.java |   8 +-
 .../azure/storage/blob/azure-storage-blob.json     | 140 +++++++++--------
 .../azure/storage/blob/BlobConfiguration.java      |  88 +++++++++++
 .../component/azure/storage/blob/BlobConsumer.java | 130 +++++++++++++++-
 .../azure/storage/blob/BlobComponentTest.java      |  67 +++++++++
 .../azure/storage/blob/BlobConsumerTest.java       | 104 +++++++++++++
 .../AzureStorageBlobComponentBuilderFactory.java   | 121 +++++++++++++++
 .../endpoint/dsl/BlobEndpointBuilderFactory.java   | 167 +++++++++++++++++++++
 11 files changed, 907 insertions(+), 130 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-storage-blob.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-storage-blob.json
index 47a742ff80b3..5bfbfd304372 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-storage-blob.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/azure-storage-blob.json
@@ -43,30 +43,36 @@
     "serviceClient": { "index": 16, "kind": "property", "displayName": "Service Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.azure.storage.blob.BlobServiceClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Client to a storage account. This client does not hold [...]
     "timeout": { "index": 17, "kind": "property", "displayName": "Timeout", "group": "common", "label": "common", "required": false, "type": "duration", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "An optional timeout value beyond which a RuntimeException will be raised." },
     "bridgeErrorHandler": { "index": 18, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the lik [...]
-    "blobSequenceNumber": { "index": 19, "kind": "property", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests. T [...]
-    "blockListType": { "index": 20, "kind": "property", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "des [...]
-    "blockSize": { "index": 21, "kind": "property", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default i [...]
-    "changeFeedContext": { "index": 22, "kind": "property", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional con [...]
-    "changeFeedEndTime": { "index": 23, "kind": "property", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results to [...]
-    "changeFeedStartTime": { "index": 24, "kind": "property", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the result [...]
-    "closeStreamAfterWrite": { "index": 25, "kind": "property", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is true" },
-    "commitBlockListLater": { "index": 26, "kind": "property", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committed [...]
-    "createAppendBlob": { "index": 27, "kind": "property", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committin [...]
-    "createPageBlob": { "index": 28, "kind": "property", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page blob." },
-    "downloadLinkExpiration": { "index": 29, "kind": "property", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
-    "lazyStartProducer": { "index": 30, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
-    "maxConcurrency": { "index": 31, "kind": "property", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChunk [...]
-    "maxSingleUploadSize": { "index": 32, "kind": "property", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobChu [...]
-    "operation": { "index": 33, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getB [...]
-    "pageBlobSize": { "index": 34, "kind": "property", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blob [...]
-    "autowiredEnabled": { "index": 35, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
-    "healthCheckConsumerEnabled": { "index": 36, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
-    "healthCheckProducerEnabled": { "index": 37, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
-    "accessKey": { "index": 38, "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob serv [...]
-    "azureClientId": { "index": 39, "kind": "property", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
-    "azureClientSecret": { "index": 40, "kind": "property", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
-    "azureTenantId": { "index": 41, "kind": "property", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
-    "sourceBlobAccessKey": { "index": 42, "kind": "property", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an acc [...]
+    "deleteAfterRead": { "index": 19, "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Delete blobs from Azure after they have been retrieved. The delete is  [...]
+    "destinationBlobPrefix": { "index": 20, "kind": "property", "displayName": "Destination Blob Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob prefix to use when a blob must be moved, and  [...]
+    "destinationBlobSuffix": { "index": 21, "kind": "property", "displayName": "Destination Blob Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob suffix to use when a blob must be moved, and  [...]
+    "destinationContainer": { "index": 22, "kind": "property", "displayName": "Destination Container", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination container where a blob must be moved when moveAfterRe [...]
+    "moveAfterRead": { "index": 23, "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Move blobs from the container to a different container after they have bee [...]
+    "removePrefixOnMove": { "index": 24, "kind": "property", "displayName": "Remove Prefix On Move", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Remove the contents of the prefix configuration string from the [...]
+    "blobSequenceNumber": { "index": 25, "kind": "property", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests. T [...]
+    "blockListType": { "index": 26, "kind": "property", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "des [...]
+    "blockSize": { "index": 27, "kind": "property", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default i [...]
+    "changeFeedContext": { "index": 28, "kind": "property", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional con [...]
+    "changeFeedEndTime": { "index": 29, "kind": "property", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results to [...]
+    "changeFeedStartTime": { "index": 30, "kind": "property", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the result [...]
+    "closeStreamAfterWrite": { "index": 31, "kind": "property", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is true" },
+    "commitBlockListLater": { "index": 32, "kind": "property", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committed [...]
+    "createAppendBlob": { "index": 33, "kind": "property", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committin [...]
+    "createPageBlob": { "index": 34, "kind": "property", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page blob." },
+    "downloadLinkExpiration": { "index": 35, "kind": "property", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
+    "lazyStartProducer": { "index": 36, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
+    "maxConcurrency": { "index": 37, "kind": "property", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChunk [...]
+    "maxSingleUploadSize": { "index": 38, "kind": "property", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobChu [...]
+    "operation": { "index": 39, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getB [...]
+    "pageBlobSize": { "index": 40, "kind": "property", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blob [...]
+    "autowiredEnabled": { "index": 41, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
+    "healthCheckConsumerEnabled": { "index": 42, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
+    "healthCheckProducerEnabled": { "index": 43, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
+    "accessKey": { "index": 44, "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob serv [...]
+    "azureClientId": { "index": 45, "kind": "property", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
+    "azureClientSecret": { "index": 46, "kind": "property", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
+    "azureTenantId": { "index": 47, "kind": "property", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
+    "sourceBlobAccessKey": { "index": 48, "kind": "property", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an acc [...]
   },
   "headers": {
     "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getBlobBloc [...]
@@ -160,45 +166,51 @@
     "sasToken": { "index": 17, "kind": "parameter", "displayName": "Sas Token", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "In case of usage of Shared Access Signature we'll need to set a SAS Token" },
     "serviceClient": { "index": 18, "kind": "parameter", "displayName": "Service Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.azure.storage.blob.BlobServiceClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Client to a storage account. This client does not hol [...]
     "timeout": { "index": 19, "kind": "parameter", "displayName": "Timeout", "group": "common", "label": "common", "required": false, "type": "duration", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "An optional timeout value beyond which a RuntimeException will be raised." },
-    "sendEmptyMessageWhenIdle": { "index": 20, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
-    "bridgeErrorHandler": { "index": 21, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...]
-    "exceptionHandler": { "index": 22, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...]
-    "exchangePattern": { "index": 23, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
-    "pollStrategy": { "index": 24, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...]
-    "blobSequenceNumber": { "index": 25, "kind": "parameter", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests.  [...]
-    "blockListType": { "index": 26, "kind": "parameter", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "de [...]
-    "blockSize": { "index": 27, "kind": "parameter", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default  [...]
-    "changeFeedContext": { "index": 28, "kind": "parameter", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional co [...]
-    "changeFeedEndTime": { "index": 29, "kind": "parameter", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results t [...]
-    "changeFeedStartTime": { "index": 30, "kind": "parameter", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the resul [...]
-    "closeStreamAfterWrite": { "index": 31, "kind": "parameter", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is  [...]
-    "commitBlockListLater": { "index": 32, "kind": "parameter", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committe [...]
-    "createAppendBlob": { "index": 33, "kind": "parameter", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committi [...]
-    "createPageBlob": { "index": 34, "kind": "parameter", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page b [...]
-    "downloadLinkExpiration": { "index": 35, "kind": "parameter", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
-    "maxConcurrency": { "index": 36, "kind": "parameter", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChun [...]
-    "maxSingleUploadSize": { "index": 37, "kind": "parameter", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobCh [...]
-    "operation": { "index": 38, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "get [...]
-    "pageBlobSize": { "index": 39, "kind": "parameter", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blo [...]
-    "lazyStartProducer": { "index": 40, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
-    "backoffErrorThreshold": { "index": 41, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 42, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 43, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...]
-    "delay": { "index": 44, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
-    "greedy": { "index": 45, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
-    "initialDelay": { "index": 46, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 47, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
-    "runLoggingLevel": { "index": 48, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the log [...]
-    "scheduledExecutorService": { "index": 49, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
-    "scheduler": { "index": 50, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 51, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This i [...]
-    "startScheduler": { "index": 52, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 53, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
-    "useFixedDelay": { "index": 54, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." },
-    "accessKey": { "index": 55, "kind": "parameter", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob ser [...]
-    "azureClientId": { "index": 56, "kind": "parameter", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
-    "azureClientSecret": { "index": 57, "kind": "parameter", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
-    "azureTenantId": { "index": 58, "kind": "parameter", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
-    "sourceBlobAccessKey": { "index": 59, "kind": "parameter", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an ac [...]
+    "deleteAfterRead": { "index": 20, "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Delete blobs from Azure after they have been retrieved. The delete is [...]
+    "destinationBlobPrefix": { "index": 21, "kind": "parameter", "displayName": "Destination Blob Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob prefix to use when a blob must be moved, and [...]
+    "destinationBlobSuffix": { "index": 22, "kind": "parameter", "displayName": "Destination Blob Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob suffix to use when a blob must be moved, and [...]
+    "destinationContainer": { "index": 23, "kind": "parameter", "displayName": "Destination Container", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination container where a blob must be moved when moveAfterR [...]
+    "moveAfterRead": { "index": 24, "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Move blobs from the container to a different container after they have be [...]
+    "removePrefixOnMove": { "index": 25, "kind": "parameter", "displayName": "Remove Prefix On Move", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Remove the contents of the prefix configuration string from th [...]
+    "sendEmptyMessageWhenIdle": { "index": 26, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
+    "bridgeErrorHandler": { "index": 27, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...]
+    "exceptionHandler": { "index": 28, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...]
+    "exchangePattern": { "index": 29, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
+    "pollStrategy": { "index": 30, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...]
+    "blobSequenceNumber": { "index": 31, "kind": "parameter", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests.  [...]
+    "blockListType": { "index": 32, "kind": "parameter", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "de [...]
+    "blockSize": { "index": 33, "kind": "parameter", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default  [...]
+    "changeFeedContext": { "index": 34, "kind": "parameter", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional co [...]
+    "changeFeedEndTime": { "index": 35, "kind": "parameter", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results t [...]
+    "changeFeedStartTime": { "index": 36, "kind": "parameter", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the resul [...]
+    "closeStreamAfterWrite": { "index": 37, "kind": "parameter", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is  [...]
+    "commitBlockListLater": { "index": 38, "kind": "parameter", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committe [...]
+    "createAppendBlob": { "index": 39, "kind": "parameter", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committi [...]
+    "createPageBlob": { "index": 40, "kind": "parameter", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page b [...]
+    "downloadLinkExpiration": { "index": 41, "kind": "parameter", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
+    "maxConcurrency": { "index": 42, "kind": "parameter", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChun [...]
+    "maxSingleUploadSize": { "index": 43, "kind": "parameter", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobCh [...]
+    "operation": { "index": 44, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "get [...]
+    "pageBlobSize": { "index": 45, "kind": "parameter", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blo [...]
+    "lazyStartProducer": { "index": 46, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
+    "backoffErrorThreshold": { "index": 47, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 48, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 49, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...]
+    "delay": { "index": 50, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
+    "greedy": { "index": 51, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
+    "initialDelay": { "index": 52, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 53, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
+    "runLoggingLevel": { "index": 54, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the log [...]
+    "scheduledExecutorService": { "index": 55, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
+    "scheduler": { "index": 56, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 57, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This i [...]
+    "startScheduler": { "index": 58, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 59, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
+    "useFixedDelay": { "index": 60, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." },
+    "accessKey": { "index": 61, "kind": "parameter", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob ser [...]
+    "azureClientId": { "index": 62, "kind": "parameter", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
+    "azureClientSecret": { "index": 63, "kind": "parameter", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
+    "azureTenantId": { "index": 64, "kind": "parameter", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
+    "sourceBlobAccessKey": { "index": 65, "kind": "parameter", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an ac [...]
   }
 }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobComponentConfigurer.java b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobComponentConfigurer.java
index dfb391141317..9882067417c2 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobComponentConfigurer.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobComponentConfigurer.java
@@ -76,6 +76,14 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "credentials": getOrCreateConfiguration(target).setCredentials(property(camelContext, com.azure.storage.common.StorageSharedKeyCredential.class, value)); return true;
         case "datacount":
         case "dataCount": getOrCreateConfiguration(target).setDataCount(property(camelContext, java.lang.Long.class, value)); return true;
+        case "deleteafterread":
+        case "deleteAfterRead": getOrCreateConfiguration(target).setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": getOrCreateConfiguration(target).setDestinationBlobPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": getOrCreateConfiguration(target).setDestinationBlobSuffix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationcontainer":
+        case "destinationContainer": getOrCreateConfiguration(target).setDestinationContainer(property(camelContext, java.lang.String.class, value)); return true;
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": getOrCreateConfiguration(target).setDownloadLinkExpiration(property(camelContext, java.lang.Long.class, value)); return true;
         case "filedir":
@@ -98,11 +106,15 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "maxRetryRequests": getOrCreateConfiguration(target).setMaxRetryRequests(property(camelContext, int.class, value)); return true;
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": getOrCreateConfiguration(target).setMaxSingleUploadSize(property(camelContext, java.lang.Long.class, value)); return true;
+        case "moveafterread":
+        case "moveAfterRead": getOrCreateConfiguration(target).setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
         case "operation": getOrCreateConfiguration(target).setOperation(property(camelContext, org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition.class, value)); return true;
         case "pageblobsize":
         case "pageBlobSize": getOrCreateConfiguration(target).setPageBlobSize(property(camelContext, java.lang.Long.class, value)); return true;
         case "prefix": getOrCreateConfiguration(target).setPrefix(property(camelContext, java.lang.String.class, value)); return true;
         case "regex": getOrCreateConfiguration(target).setRegex(property(camelContext, java.lang.String.class, value)); return true;
+        case "removeprefixonmove":
+        case "removePrefixOnMove": getOrCreateConfiguration(target).setRemovePrefixOnMove(property(camelContext, boolean.class, value)); return true;
         case "sastoken":
         case "sasToken": getOrCreateConfiguration(target).setSasToken(property(camelContext, java.lang.String.class, value)); return true;
         case "serviceclient":
@@ -168,6 +180,14 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "credentials": return com.azure.storage.common.StorageSharedKeyCredential.class;
         case "datacount":
         case "dataCount": return java.lang.Long.class;
+        case "deleteafterread":
+        case "deleteAfterRead": return boolean.class;
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": return java.lang.String.class;
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": return java.lang.String.class;
+        case "destinationcontainer":
+        case "destinationContainer": return java.lang.String.class;
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": return java.lang.Long.class;
         case "filedir":
@@ -190,11 +210,15 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "maxRetryRequests": return int.class;
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": return java.lang.Long.class;
+        case "moveafterread":
+        case "moveAfterRead": return boolean.class;
         case "operation": return org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition.class;
         case "pageblobsize":
         case "pageBlobSize": return java.lang.Long.class;
         case "prefix": return java.lang.String.class;
         case "regex": return java.lang.String.class;
+        case "removeprefixonmove":
+        case "removePrefixOnMove": return boolean.class;
         case "sastoken":
         case "sasToken": return java.lang.String.class;
         case "serviceclient":
@@ -256,6 +280,14 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "credentials": return getOrCreateConfiguration(target).getCredentials();
         case "datacount":
         case "dataCount": return getOrCreateConfiguration(target).getDataCount();
+        case "deleteafterread":
+        case "deleteAfterRead": return getOrCreateConfiguration(target).isDeleteAfterRead();
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": return getOrCreateConfiguration(target).getDestinationBlobPrefix();
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": return getOrCreateConfiguration(target).getDestinationBlobSuffix();
+        case "destinationcontainer":
+        case "destinationContainer": return getOrCreateConfiguration(target).getDestinationContainer();
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": return getOrCreateConfiguration(target).getDownloadLinkExpiration();
         case "filedir":
@@ -278,11 +310,15 @@ public class BlobComponentConfigurer extends PropertyConfigurerSupport implement
         case "maxRetryRequests": return getOrCreateConfiguration(target).getMaxRetryRequests();
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": return getOrCreateConfiguration(target).getMaxSingleUploadSize();
+        case "moveafterread":
+        case "moveAfterRead": return getOrCreateConfiguration(target).isMoveAfterRead();
         case "operation": return getOrCreateConfiguration(target).getOperation();
         case "pageblobsize":
         case "pageBlobSize": return getOrCreateConfiguration(target).getPageBlobSize();
         case "prefix": return getOrCreateConfiguration(target).getPrefix();
         case "regex": return getOrCreateConfiguration(target).getRegex();
+        case "removeprefixonmove":
+        case "removePrefixOnMove": return getOrCreateConfiguration(target).isRemovePrefixOnMove();
         case "sastoken":
         case "sasToken": return getOrCreateConfiguration(target).getSasToken();
         case "serviceclient":
diff --git a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointConfigurer.java b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointConfigurer.java
index 336ec58b1825..4917208cc758 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointConfigurer.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointConfigurer.java
@@ -75,6 +75,14 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "datacount":
         case "dataCount": target.getConfiguration().setDataCount(property(camelContext, java.lang.Long.class, value)); return true;
         case "delay": target.setDelay(property(camelContext, long.class, value)); return true;
+        case "deleteafterread":
+        case "deleteAfterRead": target.getConfiguration().setDeleteAfterRead(property(camelContext, boolean.class, value)); return true;
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": target.getConfiguration().setDestinationBlobPrefix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": target.getConfiguration().setDestinationBlobSuffix(property(camelContext, java.lang.String.class, value)); return true;
+        case "destinationcontainer":
+        case "destinationContainer": target.getConfiguration().setDestinationContainer(property(camelContext, java.lang.String.class, value)); return true;
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": target.getConfiguration().setDownloadLinkExpiration(property(camelContext, java.lang.Long.class, value)); return true;
         case "exceptionhandler":
@@ -100,6 +108,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "maxRetryRequests": target.getConfiguration().setMaxRetryRequests(property(camelContext, int.class, value)); return true;
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": target.getConfiguration().setMaxSingleUploadSize(property(camelContext, java.lang.Long.class, value)); return true;
+        case "moveafterread":
+        case "moveAfterRead": target.getConfiguration().setMoveAfterRead(property(camelContext, boolean.class, value)); return true;
         case "operation": target.getConfiguration().setOperation(property(camelContext, org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition.class, value)); return true;
         case "pageblobsize":
         case "pageBlobSize": target.getConfiguration().setPageBlobSize(property(camelContext, java.lang.Long.class, value)); return true;
@@ -107,6 +117,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "pollStrategy": target.setPollStrategy(property(camelContext, org.apache.camel.spi.PollingConsumerPollStrategy.class, value)); return true;
         case "prefix": target.getConfiguration().setPrefix(property(camelContext, java.lang.String.class, value)); return true;
         case "regex": target.getConfiguration().setRegex(property(camelContext, java.lang.String.class, value)); return true;
+        case "removeprefixonmove":
+        case "removePrefixOnMove": target.getConfiguration().setRemovePrefixOnMove(property(camelContext, boolean.class, value)); return true;
         case "repeatcount":
         case "repeatCount": target.setRepeatCount(property(camelContext, long.class, value)); return true;
         case "runlogginglevel":
@@ -195,6 +207,14 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "datacount":
         case "dataCount": return java.lang.Long.class;
         case "delay": return long.class;
+        case "deleteafterread":
+        case "deleteAfterRead": return boolean.class;
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": return java.lang.String.class;
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": return java.lang.String.class;
+        case "destinationcontainer":
+        case "destinationContainer": return java.lang.String.class;
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": return java.lang.Long.class;
         case "exceptionhandler":
@@ -220,6 +240,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "maxRetryRequests": return int.class;
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": return java.lang.Long.class;
+        case "moveafterread":
+        case "moveAfterRead": return boolean.class;
         case "operation": return org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition.class;
         case "pageblobsize":
         case "pageBlobSize": return java.lang.Long.class;
@@ -227,6 +249,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "pollStrategy": return org.apache.camel.spi.PollingConsumerPollStrategy.class;
         case "prefix": return java.lang.String.class;
         case "regex": return java.lang.String.class;
+        case "removeprefixonmove":
+        case "removePrefixOnMove": return boolean.class;
         case "repeatcount":
         case "repeatCount": return long.class;
         case "runlogginglevel":
@@ -311,6 +335,14 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "datacount":
         case "dataCount": return target.getConfiguration().getDataCount();
         case "delay": return target.getDelay();
+        case "deleteafterread":
+        case "deleteAfterRead": return target.getConfiguration().isDeleteAfterRead();
+        case "destinationblobprefix":
+        case "destinationBlobPrefix": return target.getConfiguration().getDestinationBlobPrefix();
+        case "destinationblobsuffix":
+        case "destinationBlobSuffix": return target.getConfiguration().getDestinationBlobSuffix();
+        case "destinationcontainer":
+        case "destinationContainer": return target.getConfiguration().getDestinationContainer();
         case "downloadlinkexpiration":
         case "downloadLinkExpiration": return target.getConfiguration().getDownloadLinkExpiration();
         case "exceptionhandler":
@@ -336,6 +368,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "maxRetryRequests": return target.getConfiguration().getMaxRetryRequests();
         case "maxsingleuploadsize":
         case "maxSingleUploadSize": return target.getConfiguration().getMaxSingleUploadSize();
+        case "moveafterread":
+        case "moveAfterRead": return target.getConfiguration().isMoveAfterRead();
         case "operation": return target.getConfiguration().getOperation();
         case "pageblobsize":
         case "pageBlobSize": return target.getConfiguration().getPageBlobSize();
@@ -343,6 +377,8 @@ public class BlobEndpointConfigurer extends PropertyConfigurerSupport implements
         case "pollStrategy": return target.getPollStrategy();
         case "prefix": return target.getConfiguration().getPrefix();
         case "regex": return target.getConfiguration().getRegex();
+        case "removeprefixonmove":
+        case "removePrefixOnMove": return target.getConfiguration().isRemovePrefixOnMove();
         case "repeatcount":
         case "repeatCount": return target.getRepeatCount();
         case "runlogginglevel":
diff --git a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointUriFactory.java b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointUriFactory.java
index 66c139fabe5f..b0129435474d 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointUriFactory.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/generated/java/org/apache/camel/component/azure/storage/blob/BlobEndpointUriFactory.java
@@ -23,7 +23,7 @@ public class BlobEndpointUriFactory extends org.apache.camel.support.component.E
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Map<String, String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(60);
+        Set<String> props = new HashSet<>(66);
         props.add("accessKey");
         props.add("accountName");
         props.add("azureClientId");
@@ -53,6 +53,10 @@ public class BlobEndpointUriFactory extends org.apache.camel.support.component.E
         props.add("credentials");
         props.add("dataCount");
         props.add("delay");
+        props.add("deleteAfterRead");
+        props.add("destinationBlobPrefix");
+        props.add("destinationBlobSuffix");
+        props.add("destinationContainer");
         props.add("downloadLinkExpiration");
         props.add("exceptionHandler");
         props.add("exchangePattern");
@@ -66,11 +70,13 @@ public class BlobEndpointUriFactory extends org.apache.camel.support.component.E
         props.add("maxResultsPerPage");
         props.add("maxRetryRequests");
         props.add("maxSingleUploadSize");
+        props.add("moveAfterRead");
         props.add("operation");
         props.add("pageBlobSize");
         props.add("pollStrategy");
         props.add("prefix");
         props.add("regex");
+        props.add("removePrefixOnMove");
         props.add("repeatCount");
         props.add("runLoggingLevel");
         props.add("sasToken");
diff --git a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
index 47a742ff80b3..5bfbfd304372 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
+++ b/components/camel-azure/camel-azure-storage-blob/src/generated/resources/META-INF/org/apache/camel/component/azure/storage/blob/azure-storage-blob.json
@@ -43,30 +43,36 @@
     "serviceClient": { "index": 16, "kind": "property", "displayName": "Service Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.azure.storage.blob.BlobServiceClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Client to a storage account. This client does not hold [...]
     "timeout": { "index": 17, "kind": "property", "displayName": "Timeout", "group": "common", "label": "common", "required": false, "type": "duration", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "An optional timeout value beyond which a RuntimeException will be raised." },
     "bridgeErrorHandler": { "index": 18, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the lik [...]
-    "blobSequenceNumber": { "index": 19, "kind": "property", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests. T [...]
-    "blockListType": { "index": 20, "kind": "property", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "des [...]
-    "blockSize": { "index": 21, "kind": "property", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default i [...]
-    "changeFeedContext": { "index": 22, "kind": "property", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional con [...]
-    "changeFeedEndTime": { "index": 23, "kind": "property", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results to [...]
-    "changeFeedStartTime": { "index": 24, "kind": "property", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the result [...]
-    "closeStreamAfterWrite": { "index": 25, "kind": "property", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is true" },
-    "commitBlockListLater": { "index": 26, "kind": "property", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committed [...]
-    "createAppendBlob": { "index": 27, "kind": "property", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committin [...]
-    "createPageBlob": { "index": 28, "kind": "property", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page blob." },
-    "downloadLinkExpiration": { "index": 29, "kind": "property", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
-    "lazyStartProducer": { "index": 30, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
-    "maxConcurrency": { "index": 31, "kind": "property", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChunk [...]
-    "maxSingleUploadSize": { "index": 32, "kind": "property", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobChu [...]
-    "operation": { "index": 33, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getB [...]
-    "pageBlobSize": { "index": 34, "kind": "property", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blob [...]
-    "autowiredEnabled": { "index": 35, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
-    "healthCheckConsumerEnabled": { "index": 36, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
-    "healthCheckProducerEnabled": { "index": 37, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
-    "accessKey": { "index": 38, "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob serv [...]
-    "azureClientId": { "index": 39, "kind": "property", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
-    "azureClientSecret": { "index": 40, "kind": "property", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
-    "azureTenantId": { "index": 41, "kind": "property", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
-    "sourceBlobAccessKey": { "index": 42, "kind": "property", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an acc [...]
+    "deleteAfterRead": { "index": 19, "kind": "property", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Delete blobs from Azure after they have been retrieved. The delete is  [...]
+    "destinationBlobPrefix": { "index": 20, "kind": "property", "displayName": "Destination Blob Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob prefix to use when a blob must be moved, and  [...]
+    "destinationBlobSuffix": { "index": 21, "kind": "property", "displayName": "Destination Blob Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob suffix to use when a blob must be moved, and  [...]
+    "destinationContainer": { "index": 22, "kind": "property", "displayName": "Destination Container", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination container where a blob must be moved when moveAfterRe [...]
+    "moveAfterRead": { "index": 23, "kind": "property", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Move blobs from the container to a different container after they have bee [...]
+    "removePrefixOnMove": { "index": 24, "kind": "property", "displayName": "Remove Prefix On Move", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Remove the contents of the prefix configuration string from the [...]
+    "blobSequenceNumber": { "index": 25, "kind": "property", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests. T [...]
+    "blockListType": { "index": 26, "kind": "property", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "des [...]
+    "blockSize": { "index": 27, "kind": "property", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default i [...]
+    "changeFeedContext": { "index": 28, "kind": "property", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional con [...]
+    "changeFeedEndTime": { "index": 29, "kind": "property", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results to [...]
+    "changeFeedStartTime": { "index": 30, "kind": "property", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the result [...]
+    "closeStreamAfterWrite": { "index": 31, "kind": "property", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is true" },
+    "commitBlockListLater": { "index": 32, "kind": "property", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committed [...]
+    "createAppendBlob": { "index": 33, "kind": "property", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committin [...]
+    "createPageBlob": { "index": 34, "kind": "property", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page blob." },
+    "downloadLinkExpiration": { "index": 35, "kind": "property", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
+    "lazyStartProducer": { "index": 36, "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fai [...]
+    "maxConcurrency": { "index": 37, "kind": "property", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChunk [...]
+    "maxSingleUploadSize": { "index": 38, "kind": "property", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobChu [...]
+    "operation": { "index": 39, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getB [...]
+    "pageBlobSize": { "index": 40, "kind": "property", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blob [...]
+    "autowiredEnabled": { "index": 41, "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching  [...]
+    "healthCheckConsumerEnabled": { "index": 42, "kind": "property", "displayName": "Health Check Consumer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all consumer based health checks from this component" },
+    "healthCheckProducerEnabled": { "index": 43, "kind": "property", "displayName": "Health Check Producer Enabled", "group": "health", "label": "health", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on produce [...]
+    "accessKey": { "index": 44, "kind": "property", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob serv [...]
+    "azureClientId": { "index": 45, "kind": "property", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
+    "azureClientSecret": { "index": 46, "kind": "property", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
+    "azureTenantId": { "index": 47, "kind": "property", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
+    "sourceBlobAccessKey": { "index": 48, "kind": "property", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an acc [...]
   },
   "headers": {
     "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "getBlobBloc [...]
@@ -160,45 +166,51 @@
     "sasToken": { "index": 17, "kind": "parameter", "displayName": "Sas Token", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "In case of usage of Shared Access Signature we'll need to set a SAS Token" },
     "serviceClient": { "index": 18, "kind": "parameter", "displayName": "Service Client", "group": "common", "label": "", "required": false, "type": "object", "javaType": "com.azure.storage.blob.BlobServiceClient", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Client to a storage account. This client does not hol [...]
     "timeout": { "index": 19, "kind": "parameter", "displayName": "Timeout", "group": "common", "label": "common", "required": false, "type": "duration", "javaType": "java.time.Duration", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "An optional timeout value beyond which a RuntimeException will be raised." },
-    "sendEmptyMessageWhenIdle": { "index": 20, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
-    "bridgeErrorHandler": { "index": 21, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...]
-    "exceptionHandler": { "index": 22, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...]
-    "exchangePattern": { "index": 23, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
-    "pollStrategy": { "index": 24, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...]
-    "blobSequenceNumber": { "index": 25, "kind": "parameter", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests.  [...]
-    "blockListType": { "index": 26, "kind": "parameter", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "de [...]
-    "blockSize": { "index": 27, "kind": "parameter", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default  [...]
-    "changeFeedContext": { "index": 28, "kind": "parameter", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional co [...]
-    "changeFeedEndTime": { "index": 29, "kind": "parameter", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results t [...]
-    "changeFeedStartTime": { "index": 30, "kind": "parameter", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the resul [...]
-    "closeStreamAfterWrite": { "index": 31, "kind": "parameter", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is  [...]
-    "commitBlockListLater": { "index": 32, "kind": "parameter", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committe [...]
-    "createAppendBlob": { "index": 33, "kind": "parameter", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committi [...]
-    "createPageBlob": { "index": 34, "kind": "parameter", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page b [...]
-    "downloadLinkExpiration": { "index": 35, "kind": "parameter", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
-    "maxConcurrency": { "index": 36, "kind": "parameter", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChun [...]
-    "maxSingleUploadSize": { "index": 37, "kind": "parameter", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobCh [...]
-    "operation": { "index": 38, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "get [...]
-    "pageBlobSize": { "index": 39, "kind": "parameter", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blo [...]
-    "lazyStartProducer": { "index": 40, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
-    "backoffErrorThreshold": { "index": 41, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 42, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 43, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...]
-    "delay": { "index": 44, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
-    "greedy": { "index": 45, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
-    "initialDelay": { "index": 46, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 47, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
-    "runLoggingLevel": { "index": 48, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the log [...]
-    "scheduledExecutorService": { "index": 49, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
-    "scheduler": { "index": 50, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 51, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This i [...]
-    "startScheduler": { "index": 52, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 53, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
-    "useFixedDelay": { "index": 54, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." },
-    "accessKey": { "index": 55, "kind": "parameter", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob ser [...]
-    "azureClientId": { "index": 56, "kind": "parameter", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
-    "azureClientSecret": { "index": 57, "kind": "parameter", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
-    "azureTenantId": { "index": 58, "kind": "parameter", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
-    "sourceBlobAccessKey": { "index": 59, "kind": "parameter", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an ac [...]
+    "deleteAfterRead": { "index": 20, "kind": "parameter", "displayName": "Delete After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Delete blobs from Azure after they have been retrieved. The delete is [...]
+    "destinationBlobPrefix": { "index": 21, "kind": "parameter", "displayName": "Destination Blob Prefix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob prefix to use when a blob must be moved, and [...]
+    "destinationBlobSuffix": { "index": 22, "kind": "parameter", "displayName": "Destination Blob Suffix", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination blob suffix to use when a blob must be moved, and [...]
+    "destinationContainer": { "index": 23, "kind": "parameter", "displayName": "Destination Container", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Define the destination container where a blob must be moved when moveAfterR [...]
+    "moveAfterRead": { "index": 24, "kind": "parameter", "displayName": "Move After Read", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Move blobs from the container to a different container after they have be [...]
+    "removePrefixOnMove": { "index": 25, "kind": "parameter", "displayName": "Remove Prefix On Move", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Remove the contents of the prefix configuration string from th [...]
+    "sendEmptyMessageWhenIdle": { "index": 26, "kind": "parameter", "displayName": "Send Empty Message When Idle", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead." },
+    "bridgeErrorHandler": { "index": 27, "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming [...]
+    "exceptionHandler": { "index": 28, "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By de [...]
+    "exchangePattern": { "index": 29, "kind": "parameter", "displayName": "Exchange Pattern", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], "deprecated": false, "autowired": false, "secret": false, "description": "Sets the exchange pattern when the consumer creates an exchange." },
+    "pollStrategy": { "index": 30, "kind": "parameter", "displayName": "Poll Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the po [...]
+    "blobSequenceNumber": { "index": 31, "kind": "parameter", "displayName": "Blob Sequence Number", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "A user-controlled value that you can use to track requests.  [...]
+    "blockListType": { "index": 32, "kind": "parameter", "displayName": "Block List Type", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "com.azure.storage.blob.models.BlockListType", "enum": [ "committed", "uncommitted", "all" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "COMMITTED", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "de [...]
+    "blockSize": { "index": 33, "kind": "parameter", "displayName": "Block Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The block size in bytes to use for chunked uploads with uploadBlockBlobChunked operation. Default  [...]
+    "changeFeedContext": { "index": 34, "kind": "parameter", "displayName": "Change Feed Context", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "com.azure.core.util.Context", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this gives additional co [...]
+    "changeFeedEndTime": { "index": 35, "kind": "parameter", "displayName": "Change Feed End Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the results t [...]
+    "changeFeedStartTime": { "index": 36, "kind": "parameter", "displayName": "Change Feed Start Time", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "java.time.OffsetDateTime", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When using getChangeFeed producer operation, this filters the resul [...]
+    "closeStreamAfterWrite": { "index": 37, "kind": "parameter", "displayName": "Close Stream After Write", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Close the stream after write or keep it open, default is  [...]
+    "commitBlockListLater": { "index": 38, "kind": "parameter", "displayName": "Commit Block List Later", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the staged blocks will not be committe [...]
+    "createAppendBlob": { "index": 39, "kind": "parameter", "displayName": "Create Append Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the append blocks will be created when committi [...]
+    "createPageBlob": { "index": 40, "kind": "parameter", "displayName": "Create Page Blob", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "When is set to true, the page blob will be created when uploading page b [...]
+    "downloadLinkExpiration": { "index": 41, "kind": "parameter", "displayName": "Download Link Expiration", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Override the default expiration (millis) of URL download link." },
+    "maxConcurrency": { "index": 42, "kind": "parameter", "displayName": "Max Concurrency", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum number of parallel requests to use during upload with uploadBlockBlobChun [...]
+    "maxSingleUploadSize": { "index": 43, "kind": "parameter", "displayName": "Max Single Upload Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "The maximum size in bytes for a single upload request with uploadBlockBlobCh [...]
+    "operation": { "index": 44, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlockList", "get [...]
+    "pageBlobSize": { "index": 45, "kind": "parameter", "displayName": "Page Blob Size", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 512, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Specifies the maximum size for the page blob, up to 8 TB. The page blo [...]
+    "lazyStartProducer": { "index": 46, "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a produ [...]
+    "backoffErrorThreshold": { "index": 47, "kind": "parameter", "displayName": "Backoff Error Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 48, "kind": "parameter", "displayName": "Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "The number of subsequent idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 49, "kind": "parameter", "displayName": "Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "description": "To let the scheduled polling consumer backoff if there has been a number of subsequent idles\/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is h [...]
+    "delay": { "index": 50, "kind": "parameter", "displayName": "Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 500, "description": "Milliseconds before the next poll." },
+    "greedy": { "index": 51, "kind": "parameter", "displayName": "Greedy", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages." },
+    "initialDelay": { "index": 52, "kind": "parameter", "displayName": "Initial Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1000, "description": "Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 53, "kind": "parameter", "displayName": "Repeat Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 0, "description": "Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever." },
+    "runLoggingLevel": { "index": 54, "kind": "parameter", "displayName": "Run Logging Level", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "TRACE", "description": "The consumer logs a start\/complete log line when it polls. This option allows you to configure the log [...]
+    "scheduledExecutorService": { "index": 55, "kind": "parameter", "displayName": "Scheduled Executor Service", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Allows for configuring a custom\/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool." },
+    "scheduler": { "index": 56, "kind": "parameter", "displayName": "Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "none", "description": "To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 57, "kind": "parameter", "displayName": "Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", "multiValue": true, "deprecated": false, "autowired": false, "secret": false, "description": "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This i [...]
+    "startScheduler": { "index": 58, "kind": "parameter", "displayName": "Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 59, "kind": "parameter", "displayName": "Time Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "enum", "javaType": "java.util.concurrent.TimeUnit", "enum": [ "NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and delay options." },
+    "useFixedDelay": { "index": 60, "kind": "parameter", "displayName": "Use Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details." },
+    "accessKey": { "index": 61, "kind": "parameter", "displayName": "Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Access key for the associated azure account name to be used for authentication with azure blob ser [...]
+    "azureClientId": { "index": 62, "kind": "parameter", "displayName": "Azure Client Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client ID for authentication with Azure Identity" },
+    "azureClientSecret": { "index": 63, "kind": "parameter", "displayName": "Azure Client Secret", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Client Secret for authentication with Azure Identity" },
+    "azureTenantId": { "index": 64, "kind": "parameter", "displayName": "Azure Tenant Id", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Azure Tenant ID for authentication with Azure Identity" },
+    "sourceBlobAccessKey": { "index": 65, "kind": "parameter", "displayName": "Source Blob Access Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly, we need to have an ac [...]
   }
 }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfiguration.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfiguration.java
index ebdd9f529844..f5bc41119835 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfiguration.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfiguration.java
@@ -119,6 +119,18 @@ public class BlobConfiguration implements Cloneable {
     private String azureClientSecret;
     @UriParam(label = "security")
     private String azureTenantId;
+    @UriParam(label = "consumer", defaultValue = "false")
+    private boolean deleteAfterRead;
+    @UriParam(label = "consumer")
+    private boolean moveAfterRead;
+    @UriParam(label = "consumer")
+    private String destinationContainer;
+    @UriParam(label = "consumer")
+    private String destinationBlobPrefix;
+    @UriParam(label = "consumer")
+    private String destinationBlobSuffix;
+    @UriParam(label = "consumer", defaultValue = "false")
+    private boolean removePrefixOnMove;
 
     /**
      * Azure account name to be used for authentication with azure blob services
@@ -585,6 +597,82 @@ public class BlobConfiguration implements Cloneable {
         this.azureTenantId = azureTenantId;
     }
 
+    /**
+     * Delete blobs from Azure after they have been retrieved. The delete is only performed if the Exchange is
+     * committed. If a rollback occurs, the blob is not deleted.
+     * <p/>
+     * If this option is false, then the same blobs will be retrieved over and over again in the polls. Therefore, you
+     * need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the
+     * {@link BlobConstants#BLOB_NAME} header, or only the blob name.
+     */
+    public boolean isDeleteAfterRead() {
+        return deleteAfterRead;
+    }
+
+    public void setDeleteAfterRead(boolean deleteAfterRead) {
+        this.deleteAfterRead = deleteAfterRead;
+    }
+
+    /**
+     * Move blobs from the container to a different container after they have been retrieved. To accomplish the
+     * operation, the destinationContainer option must be set. The copy blob operation is only performed if the Exchange
+     * is committed. If a rollback occurs, the blob is not moved.
+     */
+    public boolean isMoveAfterRead() {
+        return moveAfterRead;
+    }
+
+    public void setMoveAfterRead(boolean moveAfterRead) {
+        this.moveAfterRead = moveAfterRead;
+    }
+
+    /**
+     * Define the destination container where a blob must be moved when moveAfterRead is set to true.
+     */
+    public String getDestinationContainer() {
+        return destinationContainer;
+    }
+
+    public void setDestinationContainer(String destinationContainer) {
+        this.destinationContainer = destinationContainer;
+    }
+
+    /**
+     * Define the destination blob prefix to use when a blob must be moved, and moveAfterRead is set to true.
+     */
+    public String getDestinationBlobPrefix() {
+        return destinationBlobPrefix;
+    }
+
+    public void setDestinationBlobPrefix(String destinationBlobPrefix) {
+        this.destinationBlobPrefix = destinationBlobPrefix;
+    }
+
+    /**
+     * Define the destination blob suffix to use when a blob must be moved, and moveAfterRead is set to true.
+     */
+    public String getDestinationBlobSuffix() {
+        return destinationBlobSuffix;
+    }
+
+    public void setDestinationBlobSuffix(String destinationBlobSuffix) {
+        this.destinationBlobSuffix = destinationBlobSuffix;
+    }
+
+    /**
+     * Remove the contents of the prefix configuration string from the new blob name before moving. For example, if
+     * prefix is set to 'notify/' and the destinationBlobPrefix is set to 'archive/', a blob with a name of
+     * 'notify/example.txt' will be moved to 'archive/example.txt', rather than the default behavior where the new name
+     * is 'archive/notify/example.txt'. Only applicable when moveAfterRead is true.
+     */
+    public boolean isRemovePrefixOnMove() {
+        return removePrefixOnMove;
+    }
+
+    public void setRemovePrefixOnMove(boolean removePrefixOnMove) {
+        this.removePrefixOnMove = removePrefixOnMove;
+    }
+
     // *************************************************
     //
     // *************************************************
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
index b52c9e0855fe..ee89c698b0d2 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConsumer.java
@@ -21,6 +21,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Queue;
 
+import com.azure.storage.blob.BlobClient;
 import com.azure.storage.blob.BlobContainerClient;
 import com.azure.storage.blob.models.BlobItem;
 import com.azure.storage.blob.models.BlobStorageException;
@@ -48,6 +49,19 @@ public class BlobConsumer extends ScheduledBatchPollingConsumer {
         super(endpoint, processor);
     }
 
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+
+        if (getEndpoint().getConfiguration().isMoveAfterRead()) {
+            String destContainer = getEndpoint().getConfiguration().getDestinationContainer();
+            if (ObjectHelper.isEmpty(destContainer)) {
+                throw new IllegalArgumentException(
+                        "destinationContainer must be set when moveAfterRead is enabled");
+            }
+        }
+    }
+
     @Override
     protected int poll() throws Exception {
         final String containerName = getEndpoint().getConfiguration().getContainerName();
@@ -143,7 +157,7 @@ public class BlobConsumer extends ScheduledBatchPollingConsumer {
             exchange.getExchangeExtension().addOnCompletion(new Synchronization() {
                 @Override
                 public void onComplete(Exchange exchange) {
-                    LOG.trace("Completed from processing all exchanges...");
+                    processCommit(exchange);
                 }
 
                 @Override
@@ -171,4 +185,118 @@ public class BlobConsumer extends ScheduledBatchPollingConsumer {
                     "Error during processing exchange. Will attempt to process the message on next poll.", exchange, cause);
         }
     }
+
+    /**
+     * Strategy to move/delete the blob after being processed.
+     *
+     * @param exchange the exchange
+     */
+    protected void processCommit(Exchange exchange) {
+        try {
+            final String containerName = getEndpoint().getConfiguration().getContainerName();
+            final String blobName = exchange.getIn().getHeader(BlobConstants.BLOB_NAME, String.class);
+
+            if (blobName == null) {
+                LOG.warn("Cannot perform move/delete after read because blob name is not available in exchange headers");
+                return;
+            }
+
+            if (getEndpoint().getConfiguration().isMoveAfterRead()) {
+                final String destinationContainer = getEndpoint().getConfiguration().getDestinationContainer();
+                LOG.trace("Moving blob {} from container {} to container {}...", blobName, containerName, destinationContainer);
+
+                // Build destination blob name with optional prefix/suffix
+                final String destinationBlobName = buildDestinationBlobName(blobName);
+
+                // Copy to destination
+                copyBlobToDestination(containerName, blobName, destinationContainer, destinationBlobName);
+
+                // Delete source blob after successful copy (move = copy + delete)
+                deleteBlob(containerName, blobName);
+
+                LOG.trace("Moved blob {} from container {} to blob {} in container {}",
+                        blobName, containerName, destinationBlobName, destinationContainer);
+            } else if (getEndpoint().getConfiguration().isDeleteAfterRead()) {
+                // Only delete if not moving (move already handles deletion)
+                LOG.trace("Deleting blob {} from container {}...", blobName, containerName);
+
+                deleteBlob(containerName, blobName);
+
+                LOG.trace("Deleted blob {} from container {}", blobName, containerName);
+            }
+        } catch (BlobStorageException e) {
+            getExceptionHandler().handleException(
+                    "Error occurred during moving or deleting blob. This exception is ignored.", exchange, e);
+        }
+    }
+
+    /**
+     * Builds the destination blob name with optional prefix/suffix and prefix removal.
+     *
+     * @param  blobName the source blob name
+     * @return          the destination blob name
+     */
+    private String buildDestinationBlobName(String blobName) {
+        StringBuilder builder = new StringBuilder();
+
+        String blobNameToUse = blobName;
+
+        // Remove prefix if configured
+        if (getEndpoint().getConfiguration().isRemovePrefixOnMove()) {
+            String prefix = getEndpoint().getConfiguration().getPrefix();
+            if (prefix != null && blobNameToUse.startsWith(prefix)) {
+                blobNameToUse = blobNameToUse.substring(prefix.length());
+            }
+        }
+
+        // Add destination prefix
+        if (ObjectHelper.isNotEmpty(getEndpoint().getConfiguration().getDestinationBlobPrefix())) {
+            builder.append(getEndpoint().getConfiguration().getDestinationBlobPrefix());
+        }
+
+        builder.append(blobNameToUse);
+
+        // Add destination suffix
+        if (ObjectHelper.isNotEmpty(getEndpoint().getConfiguration().getDestinationBlobSuffix())) {
+            builder.append(getEndpoint().getConfiguration().getDestinationBlobSuffix());
+        }
+
+        return builder.toString();
+    }
+
+    /**
+     * Copies a blob from source container to destination container within the same storage account.
+     *
+     * @param sourceContainer      the source container name
+     * @param sourceBlobName       the source blob name
+     * @param destinationContainer the destination container name
+     * @param destinationBlobName  the destination blob name
+     */
+    private void copyBlobToDestination(
+            String sourceContainer, String sourceBlobName,
+            String destinationContainer, String destinationBlobName) {
+        BlobContainerClient sourceContainerClient
+                = getEndpoint().getBlobServiceClient().getBlobContainerClient(sourceContainer);
+        BlobClient sourceBlobClient = sourceContainerClient.getBlobClient(sourceBlobName);
+
+        BlobContainerClient destContainerClient
+                = getEndpoint().getBlobServiceClient().getBlobContainerClient(destinationContainer);
+        BlobClient destBlobClient = destContainerClient.getBlobClient(destinationBlobName);
+
+        // Copy from source URL (works within same storage account)
+        destBlobClient.copyFromUrl(sourceBlobClient.getBlobUrl());
+    }
+
+    /**
+     * Deletes a blob from the specified container.
+     *
+     * @param containerName the container name
+     * @param blobName      the blob name
+     */
+    private void deleteBlob(String containerName, String blobName) {
+        BlobContainerClient containerClient
+                = getEndpoint().getBlobServiceClient().getBlobContainerClient(containerName);
+        BlobClient blobClient = containerClient.getBlobClient(blobName);
+        blobClient.delete();
+    }
 }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobComponentTest.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobComponentTest.java
index 9bfa1aa4d055..029bb5f33073 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobComponentTest.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobComponentTest.java
@@ -220,6 +220,73 @@ class BlobComponentTest extends CamelTestSupport {
         assertEquals(CredentialType.AZURE_IDENTITY, endpoint.getConfiguration().getCredentialType());
     }
 
+    @Test
+    void testCreateEndpointWithDeleteAfterRead() {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL&deleteAfterRead=true");
+
+        assertEquals("camelazure", endpoint.getConfiguration().getAccountName());
+        assertEquals("container", endpoint.getConfiguration().getContainerName());
+        assertEquals("blob", endpoint.getConfiguration().getBlobName());
+        assertTrue(endpoint.getConfiguration().isDeleteAfterRead());
+        assertFalse(endpoint.getConfiguration().isMoveAfterRead());
+    }
+
+    @Test
+    void testCreateEndpointWithMoveAfterRead() {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL"
+                             + "&moveAfterRead=true&destinationContainer=archive");
+
+        assertEquals("camelazure", endpoint.getConfiguration().getAccountName());
+        assertEquals("container", endpoint.getConfiguration().getContainerName());
+        assertEquals("blob", endpoint.getConfiguration().getBlobName());
+        assertFalse(endpoint.getConfiguration().isDeleteAfterRead());
+        assertTrue(endpoint.getConfiguration().isMoveAfterRead());
+        assertEquals("archive", endpoint.getConfiguration().getDestinationContainer());
+    }
+
+    @Test
+    void testCreateEndpointWithMoveAfterReadFullConfig() {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL"
+                             + "&moveAfterRead=true&destinationContainer=archive"
+                             + "&destinationBlobPrefix=processed/&destinationBlobSuffix=.done"
+                             + "&removePrefixOnMove=true&prefix=incoming/");
+
+        assertTrue(endpoint.getConfiguration().isMoveAfterRead());
+        assertEquals("archive", endpoint.getConfiguration().getDestinationContainer());
+        assertEquals("processed/", endpoint.getConfiguration().getDestinationBlobPrefix());
+        assertEquals(".done", endpoint.getConfiguration().getDestinationBlobSuffix());
+        assertTrue(endpoint.getConfiguration().isRemovePrefixOnMove());
+        assertEquals("incoming/", endpoint.getConfiguration().getPrefix());
+    }
+
+    @Test
+    void testDeleteAfterReadDefaultIsFalse() {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL");
+
+        assertFalse(endpoint.getConfiguration().isDeleteAfterRead());
+        assertFalse(endpoint.getConfiguration().isMoveAfterRead());
+        assertNull(endpoint.getConfiguration().getDestinationContainer());
+        assertNull(endpoint.getConfiguration().getDestinationBlobPrefix());
+        assertNull(endpoint.getConfiguration().getDestinationBlobSuffix());
+        assertFalse(endpoint.getConfiguration().isRemovePrefixOnMove());
+    }
+
     private StorageSharedKeyCredential storageSharedKeyCredential() {
         return new StorageSharedKeyCredential("fakeuser", "fakekey");
     }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobConsumerTest.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobConsumerTest.java
new file mode 100644
index 000000000000..e045d3b7d2bf
--- /dev/null
+++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/BlobConsumerTest.java
@@ -0,0 +1,104 @@
+/*
+ * 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.component.azure.storage.blob;
+
+import com.azure.storage.common.StorageSharedKeyCredential;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+class BlobConsumerTest extends CamelTestSupport {
+
+    @Test
+    void testMoveAfterReadWithoutDestinationContainerShouldFail() throws Exception {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL"
+                             + "&moveAfterRead=true");
+
+        BlobConsumer consumer = (BlobConsumer) endpoint.createConsumer(exchange -> {
+        });
+
+        // Should throw IllegalArgumentException because destinationContainer is not set
+        assertThrows(IllegalArgumentException.class, consumer::start);
+    }
+
+    @Test
+    void testMoveAfterReadWithDestinationContainerShouldNotFail() throws Exception {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL"
+                             + "&moveAfterRead=true&destinationContainer=archive");
+
+        BlobConsumer consumer = (BlobConsumer) endpoint.createConsumer(exchange -> {
+        });
+
+        // Should not throw - the consumer should start successfully
+        // We can't fully test the move functionality without a real Azure connection,
+        // but at least validation should pass
+        try {
+            consumer.start();
+        } catch (Exception e) {
+            // Expected to fail later when trying to connect to Azure, but not on validation
+            if (e instanceof IllegalArgumentException) {
+                throw e;
+            }
+        } finally {
+            try {
+                consumer.stop();
+            } catch (Exception ignored) {
+            }
+        }
+    }
+
+    @Test
+    void testDeleteAfterReadConfigured() throws Exception {
+        context.getRegistry().bind("creds", storageSharedKeyCredential());
+
+        final BlobEndpoint endpoint = (BlobEndpoint) context
+                .getEndpoint(
+                        "azure-storage-blob://camelazure/container?blobName=blob&credentials=#creds&credentialType=SHARED_KEY_CREDENTIAL"
+                             + "&deleteAfterRead=true");
+
+        BlobConsumer consumer = (BlobConsumer) endpoint.createConsumer(exchange -> {
+        });
+
+        // Should start without validation errors - deleteAfterRead doesn't require extra config
+        try {
+            consumer.start();
+        } catch (Exception e) {
+            // Expected to fail later when trying to connect to Azure, but not on validation
+            if (e instanceof IllegalArgumentException) {
+                throw e;
+            }
+        } finally {
+            try {
+                consumer.stop();
+            } catch (Exception ignored) {
+            }
+        }
+    }
+
+    private StorageSharedKeyCredential storageSharedKeyCredential() {
+        return new StorageSharedKeyCredential("fakeuser", "fakekey");
+    }
+}
diff --git a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AzureStorageBlobComponentBuilderFactory.java b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AzureStorageBlobComponentBuilderFactory.java
index 96ff3bca9d31..0583f64781eb 100644
--- a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AzureStorageBlobComponentBuilderFactory.java
+++ b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/AzureStorageBlobComponentBuilderFactory.java
@@ -391,6 +391,121 @@ public interface AzureStorageBlobComponentBuilderFactory {
             return this;
         }
     
+        
+        /**
+         * Delete blobs from Azure after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not deleted. If this option is false, then the same blobs
+         * will be retrieved over and over again in the polls. Therefore, you
+         * need to use the Idempotent Consumer EIP in the route to filter out
+         * duplicates. You can filter using the BlobConstants#BLOB_NAME header,
+         * or only the blob name.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder deleteAfterRead(boolean deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+    
+        /**
+         * Define the destination blob prefix to use when a blob must be moved,
+         * and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBlobPrefix the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder destinationBlobPrefix(java.lang.String destinationBlobPrefix) {
+            doSetProperty("destinationBlobPrefix", destinationBlobPrefix);
+            return this;
+        }
+    
+        /**
+         * Define the destination blob suffix to use when a blob must be moved,
+         * and moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBlobSuffix the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder destinationBlobSuffix(java.lang.String destinationBlobSuffix) {
+            doSetProperty("destinationBlobSuffix", destinationBlobSuffix);
+            return this;
+        }
+    
+        /**
+         * Define the destination container where a blob must be moved when
+         * moveAfterRead is set to true.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationContainer the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder destinationContainer(java.lang.String destinationContainer) {
+            doSetProperty("destinationContainer", destinationContainer);
+            return this;
+        }
+    
+        
+        /**
+         * Move blobs from the container to a different container after they
+         * have been retrieved. To accomplish the operation, the
+         * destinationContainer option must be set. The copy blob operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not moved.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder moveAfterRead(boolean moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+    
+        
+        /**
+         * Remove the contents of the prefix configuration string from the new
+         * blob name before moving. For example, if prefix is set to 'notify/'
+         * and the destinationBlobPrefix is set to 'archive/', a blob with a
+         * name of 'notify/example.txt' will be moved to 'archive/example.txt',
+         * rather than the default behavior where the new name is
+         * 'archive/notify/example.txt'. Only applicable when moveAfterRead is
+         * true.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param removePrefixOnMove the value to set
+         * @return the dsl builder
+         */
+        default AzureStorageBlobComponentBuilder removePrefixOnMove(boolean removePrefixOnMove) {
+            doSetProperty("removePrefixOnMove", removePrefixOnMove);
+            return this;
+        }
+    
         /**
          * A user-controlled value that you can use to track requests. The value
          * of the sequence number must be between 0 and 263 - 1.The default
@@ -862,6 +977,12 @@ public interface AzureStorageBlobComponentBuilderFactory {
             case "serviceClient": getOrCreateConfiguration((BlobComponent) component).setServiceClient((com.azure.storage.blob.BlobServiceClient) value); return true;
             case "timeout": getOrCreateConfiguration((BlobComponent) component).setTimeout((java.time.Duration) value); return true;
             case "bridgeErrorHandler": ((BlobComponent) component).setBridgeErrorHandler((boolean) value); return true;
+            case "deleteAfterRead": getOrCreateConfiguration((BlobComponent) component).setDeleteAfterRead((boolean) value); return true;
+            case "destinationBlobPrefix": getOrCreateConfiguration((BlobComponent) component).setDestinationBlobPrefix((java.lang.String) value); return true;
+            case "destinationBlobSuffix": getOrCreateConfiguration((BlobComponent) component).setDestinationBlobSuffix((java.lang.String) value); return true;
+            case "destinationContainer": getOrCreateConfiguration((BlobComponent) component).setDestinationContainer((java.lang.String) value); return true;
+            case "moveAfterRead": getOrCreateConfiguration((BlobComponent) component).setMoveAfterRead((boolean) value); return true;
+            case "removePrefixOnMove": getOrCreateConfiguration((BlobComponent) component).setRemovePrefixOnMove((boolean) value); return true;
             case "blobSequenceNumber": getOrCreateConfiguration((BlobComponent) component).setBlobSequenceNumber((java.lang.Long) value); return true;
             case "blockListType": getOrCreateConfiguration((BlobComponent) component).setBlockListType((com.azure.storage.blob.models.BlockListType) value); return true;
             case "blockSize": getOrCreateConfiguration((BlobComponent) component).setBlockSize((java.lang.Long) value); return true;
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BlobEndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BlobEndpointBuilderFactory.java
index 67714d59fd0a..a3c7f1e6136e 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BlobEndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/BlobEndpointBuilderFactory.java
@@ -571,6 +571,173 @@ public interface BlobEndpointBuilderFactory {
             doSetProperty("timeout", timeout);
             return this;
         }
+        /**
+         * Delete blobs from Azure after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not deleted. If this option is false, then the same blobs
+         * will be retrieved over and over again in the polls. Therefore, you
+         * need to use the Idempotent Consumer EIP in the route to filter out
+         * duplicates. You can filter using the BlobConstants#BLOB_NAME header,
+         * or only the blob name.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder deleteAfterRead(boolean deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * Delete blobs from Azure after they have been retrieved. The delete is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not deleted. If this option is false, then the same blobs
+         * will be retrieved over and over again in the polls. Therefore, you
+         * need to use the Idempotent Consumer EIP in the route to filter out
+         * duplicates. You can filter using the BlobConstants#BLOB_NAME header,
+         * or only the blob name.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param deleteAfterRead the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder deleteAfterRead(String deleteAfterRead) {
+            doSetProperty("deleteAfterRead", deleteAfterRead);
+            return this;
+        }
+        /**
+         * Define the destination blob prefix to use when a blob must be moved,
+         * and moveAfterRead is set to true.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBlobPrefix the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder destinationBlobPrefix(String destinationBlobPrefix) {
+            doSetProperty("destinationBlobPrefix", destinationBlobPrefix);
+            return this;
+        }
+        /**
+         * Define the destination blob suffix to use when a blob must be moved,
+         * and moveAfterRead is set to true.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationBlobSuffix the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder destinationBlobSuffix(String destinationBlobSuffix) {
+            doSetProperty("destinationBlobSuffix", destinationBlobSuffix);
+            return this;
+        }
+        /**
+         * Define the destination container where a blob must be moved when
+         * moveAfterRead is set to true.
+         * 
+         * The option is a: <code>java.lang.String</code> type.
+         * 
+         * Group: consumer
+         * 
+         * @param destinationContainer the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder destinationContainer(String destinationContainer) {
+            doSetProperty("destinationContainer", destinationContainer);
+            return this;
+        }
+        /**
+         * Move blobs from the container to a different container after they
+         * have been retrieved. To accomplish the operation, the
+         * destinationContainer option must be set. The copy blob operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not moved.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder moveAfterRead(boolean moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+        /**
+         * Move blobs from the container to a different container after they
+         * have been retrieved. To accomplish the operation, the
+         * destinationContainer option must be set. The copy blob operation is
+         * only performed if the Exchange is committed. If a rollback occurs,
+         * the blob is not moved.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param moveAfterRead the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder moveAfterRead(String moveAfterRead) {
+            doSetProperty("moveAfterRead", moveAfterRead);
+            return this;
+        }
+        /**
+         * Remove the contents of the prefix configuration string from the new
+         * blob name before moving. For example, if prefix is set to 'notify/'
+         * and the destinationBlobPrefix is set to 'archive/', a blob with a
+         * name of 'notify/example.txt' will be moved to 'archive/example.txt',
+         * rather than the default behavior where the new name is
+         * 'archive/notify/example.txt'. Only applicable when moveAfterRead is
+         * true.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param removePrefixOnMove the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder removePrefixOnMove(boolean removePrefixOnMove) {
+            doSetProperty("removePrefixOnMove", removePrefixOnMove);
+            return this;
+        }
+        /**
+         * Remove the contents of the prefix configuration string from the new
+         * blob name before moving. For example, if prefix is set to 'notify/'
+         * and the destinationBlobPrefix is set to 'archive/', a blob with a
+         * name of 'notify/example.txt' will be moved to 'archive/example.txt',
+         * rather than the default behavior where the new name is
+         * 'archive/notify/example.txt'. Only applicable when moveAfterRead is
+         * true.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param removePrefixOnMove the value to set
+         * @return the dsl builder
+         */
+        default BlobEndpointConsumerBuilder removePrefixOnMove(String removePrefixOnMove) {
+            doSetProperty("removePrefixOnMove", removePrefixOnMove);
+            return this;
+        }
         /**
          * If the polling consumer did not poll any files, you can enable this
          * option to send an empty message (no body) instead.


(camel) 02/04: Azure SDK BOM: Downgrade to 1.3.3 until the Azurite container will support the latest version

Posted by ac...@apache.org.
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.git

commit 616c7eaed4e10b210f1cdbc3821f732b8190c7f7
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Feb 4 10:19:15 2026 +0100

    Azure SDK BOM: Downgrade to 1.3.3 until the Azurite container will support the latest version
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
 parent/pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/parent/pom.xml b/parent/pom.xml
index e7e80e2ac312..916c282e7c35 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -80,7 +80,7 @@
         <awaitility-version>4.3.0</awaitility-version>
         <aws-java-sdk2-version>2.41.21</aws-java-sdk2-version>
         <aws-xray-version>2.20.0</aws-xray-version>
-        <azure-sdk-bom-version>1.3.4</azure-sdk-bom-version>
+        <azure-sdk-bom-version>1.3.3</azure-sdk-bom-version>
         <azure-storage-blob-changefeed-version>12.0.0-beta.34</azure-storage-blob-changefeed-version>
         <beanio-version>3.2.1</beanio-version>
         <bouncycastle-version>1.83</bouncycastle-version>