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/05/04 11:26:26 UTC

(camel) branch main updated: CAMEL-23341: camel-azure-storage-blob - Add support for changing access tier of existing blobs

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

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


The following commit(s) were added to refs/heads/main by this push:
     new a6d0d2364a6e CAMEL-23341: camel-azure-storage-blob - Add support for changing access tier of existing blobs
a6d0d2364a6e is described below

commit a6d0d2364a6ecf6569f150f58052cd0932a8cd6f
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Mon May 4 13:26:18 2026 +0200

    CAMEL-23341: camel-azure-storage-blob - Add support for changing access tier of existing blobs
    
    Adds a new `setBlobTier` producer operation that changes the access tier
    of an existing blob, exposing the Azure SDK
    `BlobClient.setAccessTierWithResponse(...)` capability through the
    component. Useful for lifecycle management (HOT/COOL/COLD/ARCHIVE) and
    for rehydrating archived blobs back to an online tier.
    
    Changes include:
    - New `setBlobTier` value in `BlobOperationsDefinition`.
    - `BlobClientWrapper.setAccessTier(...)` delegating to the Azure SDK so
      the wrapper remains the single mocking surface.
    - `BlobOperations.setBlobTier(Exchange)` resolving the target tier from
      the `CamelAzureStorageBlobAccessTier` header or the message body,
      with optional `RehydratePriority` from the new
      `CamelAzureStorageBlobRehydratePriority` header.
    - `BlobProducer` dispatch wired for the new operation.
    - New `BlobConstants.REHYDRATE_PRIORITY` constant + matching
      `BlobExchangeHeaders.getRehydratePriorityFromHeaders` and
      `BlobConfigurationOptionsProxy.getRehydratePriority`.
    - `BlobConfiguration#operation` enum list extended with `setBlobTier`.
    - Three unit tests in `BlobOperationsTest` (header, body+priority,
      validation).
    - Documentation entry plus usage snippets covering both the move-to-cool
      and rehydrate-from-archive flows.
    - Regenerated component, central catalog, and endpoint DSL factory.
    
    Closes #22903
---
 .../catalog/components/azure-storage-blob.json     |  9 ++--
 .../azure/storage/blob/azure-storage-blob.json     |  9 ++--
 .../main/docs/azure-storage-blob-component.adoc    | 20 +++++++++
 .../azure/storage/blob/BlobConfiguration.java      |  2 +-
 .../blob/BlobConfigurationOptionsProxy.java        |  5 +++
 .../azure/storage/blob/BlobConstants.java          |  5 +++
 .../azure/storage/blob/BlobExchangeHeaders.java    |  5 +++
 .../storage/blob/BlobOperationsDefinition.java     |  9 +++-
 .../component/azure/storage/blob/BlobProducer.java |  3 ++
 .../storage/blob/client/BlobClientWrapper.java     |  9 ++++
 .../storage/blob/operations/BlobOperations.java    | 32 +++++++++++++
 .../blob/operations/BlobOperationsTest.java        | 52 ++++++++++++++++++++++
 .../endpoint/dsl/BlobEndpointBuilderFactory.java   | 16 +++++++
 13 files changed, 166 insertions(+), 10 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 4782e7a9aaff..bdadf4519914 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
@@ -65,7 +65,7 @@
     "lazyStartProducer": { "index": 38, "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": 39, "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": 40, "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": 41, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBl [...]
+    "operation": { "index": 41, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBl [...]
     "pageBlobSize": { "index": 42, "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": 43, "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": 44, "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" },
@@ -77,7 +77,7 @@
     "sourceBlobAccessKey": { "index": 50, "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, "security": "secret", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly,  [...]
   },
   "headers": {
-    "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlock [...]
+    "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlock [...]
     "CamelAzureStorageBlobHttpHeaders": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "BlobHttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob) Additional parameters for a set of operations.", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#BLOB_HTTP_HEA [...]
     "CamelAzureStorageBlobETag": { "index": 2, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The E Tag of the blob", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#E_TAG" },
     "CamelAzureStorageBlobCreationTime": { "index": 3, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Creation time of the blob.", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#CREATION_TIME" },
@@ -154,7 +154,8 @@
     "CamelAzureStorageBlobLegalHold": { "index": 74, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (setBlobLegalHold) The legal hold status to set on the blob. When set to true the blob is protected from modification and deletion until the hold is cleared by setting the value to false. (consumer) The legal hold status [...]
     "CamelAzureStorageBlobImmutabilityPolicy": { "index": 75, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicy", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) A pre-built BlobImmutabilityPolicy object that overrides the policy expiry time and mode headers when present.", "constantName": "org.apach [...]
     "CamelAzureStorageBlobImmutabilityPolicyExpiryTime": { "index": 76, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.time.OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The expiry time of the time-based retention policy. Required unless a pre-built BlobImmutabilityPolicy is provided via the body or the CamelAzureStorageBlobI [...]
-    "CamelAzureStorageBlobImmutabilityPolicyMode": { "index": 77, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicyMode", "enum": [ "Mutable", "Unlocked", "Locked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The mode of the immutability policy: UNLOCKED (default, can be modified or deleted), L [...]
+    "CamelAzureStorageBlobImmutabilityPolicyMode": { "index": 77, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicyMode", "enum": [ "Mutable", "Unlocked", "Locked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The mode of the immutability policy: UNLOCKED (default, can be modified or deleted), L [...]
+    "CamelAzureStorageBlobRehydratePriority": { "index": 78, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.RehydratePriority", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobTier) The rehydrate priority used when rehydrating a blob from the archive tier: Standard or High. Ignored when changing tier between non-archive tiers.", "constantN [...]
   },
   "properties": {
     "accountName": { "index": 0, "kind": "path", "displayName": "Account Name", "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": "Azure account name to be used for authentication with azure blob services" },
@@ -203,7 +204,7 @@
     "downloadLinkExpiration": { "index": 43, "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": 44, "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": 45, "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": 46, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitB [...]
+    "operation": { "index": 46, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitB [...]
     "pageBlobSize": { "index": 47, "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": 48, "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": 49, "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." },
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 4782e7a9aaff..bdadf4519914 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
@@ -65,7 +65,7 @@
     "lazyStartProducer": { "index": 38, "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": 39, "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": 40, "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": 41, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBl [...]
+    "operation": { "index": 41, "kind": "property", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBl [...]
     "pageBlobSize": { "index": 42, "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": 43, "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": 44, "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" },
@@ -77,7 +77,7 @@
     "sourceBlobAccessKey": { "index": 50, "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, "security": "secret", "configurationClass": "org.apache.camel.component.azure.storage.blob.BlobConfiguration", "configurationField": "configuration", "description": "Source Blob Access Key: for copyblob operation, sadly,  [...]
   },
   "headers": {
-    "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlock [...]
+    "CamelAzureStorageBlobOperation": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitBlobBlock [...]
     "CamelAzureStorageBlobHttpHeaders": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "BlobHttpHeaders", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob) Additional parameters for a set of operations.", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#BLOB_HTTP_HEA [...]
     "CamelAzureStorageBlobETag": { "index": 2, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The E Tag of the blob", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#E_TAG" },
     "CamelAzureStorageBlobCreationTime": { "index": 3, "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Creation time of the blob.", "constantName": "org.apache.camel.component.azure.storage.blob.BlobConstants#CREATION_TIME" },
@@ -154,7 +154,8 @@
     "CamelAzureStorageBlobLegalHold": { "index": 74, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(producer) (setBlobLegalHold) The legal hold status to set on the blob. When set to true the blob is protected from modification and deletion until the hold is cleared by setting the value to false. (consumer) The legal hold status [...]
     "CamelAzureStorageBlobImmutabilityPolicy": { "index": 75, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicy", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) A pre-built BlobImmutabilityPolicy object that overrides the policy expiry time and mode headers when present.", "constantName": "org.apach [...]
     "CamelAzureStorageBlobImmutabilityPolicyExpiryTime": { "index": 76, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.time.OffsetDateTime", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The expiry time of the time-based retention policy. Required unless a pre-built BlobImmutabilityPolicy is provided via the body or the CamelAzureStorageBlobI [...]
-    "CamelAzureStorageBlobImmutabilityPolicyMode": { "index": 77, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicyMode", "enum": [ "Mutable", "Unlocked", "Locked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The mode of the immutability policy: UNLOCKED (default, can be modified or deleted), L [...]
+    "CamelAzureStorageBlobImmutabilityPolicyMode": { "index": 77, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.BlobImmutabilityPolicyMode", "enum": [ "Mutable", "Unlocked", "Locked" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobImmutabilityPolicy) The mode of the immutability policy: UNLOCKED (default, can be modified or deleted), L [...]
+    "CamelAzureStorageBlobRehydratePriority": { "index": 78, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "com.azure.storage.blob.models.RehydratePriority", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "(setBlobTier) The rehydrate priority used when rehydrating a blob from the archive tier: Standard or High. Ignored when changing tier between non-archive tiers.", "constantN [...]
   },
   "properties": {
     "accountName": { "index": 0, "kind": "path", "displayName": "Account Name", "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": "Azure account name to be used for authentication with azure blob services" },
@@ -203,7 +204,7 @@
     "downloadLinkExpiration": { "index": 43, "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": 44, "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": 45, "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": 46, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitB [...]
+    "operation": { "index": 46, "kind": "parameter", "displayName": "Operation", "group": "producer", "label": "producer", "required": false, "type": "enum", "javaType": "org.apache.camel.component.azure.storage.blob.BlobOperationsDefinition", "enum": [ "listBlobContainers", "findBlobsByTags", "createBlobContainer", "deleteBlobContainer", "listBlobs", "getBlob", "deleteBlob", "downloadBlobToFile", "downloadLink", "uploadBlockBlob", "uploadBlockBlobChunked", "stageBlockBlobList", "commitB [...]
     "pageBlobSize": { "index": 47, "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": 48, "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": 49, "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." },
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 0a17787a7cf8..0bfb34e0ea96 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
@@ -171,6 +171,7 @@ and existing blocks together. Any blocks not specified in the block list and per
 |`setBlobLegalHold`|`Common`|Sets a legal hold on a blob. The legal hold flag (`Boolean`) is provided via the `CamelAzureStorageBlobLegalHold` header or the message body. While a legal hold is set, the blob cannot be modified or deleted until the hold is explicitly cleared by calling the operation again with `false`.
 |`setBlobImmutabilityPolicy`|`Common`|Sets a time-based immutability policy on a blob. The policy expiry time (`OffsetDateTime`) is read from the `CamelAzureStorageBlobImmutabilityPolicyExpiryTime` header and the policy mode (`BlobImmutabilityPolicyMode`, defaults to `UNLOCKED`) from `CamelAzureStorageBlobImmutabilityPolicyMode`. A pre-built `BlobImmutabilityPolicy` may also be supplied via the message body or `CamelAzureStorageBlobImmutabilityPolicy` header.
 |`undeleteBlob`|`Common`|Restores the contents and metadata of a soft-deleted blob and any associated soft-deleted snapshots. Soft delete must be enabled on the storage account for this operation to succeed.
+|`setBlobTier`|`Common`|Sets the access tier of an existing blob. The target tier (`AccessTier` such as `HOT`, `COOL`, `COLD`, or `ARCHIVE`) is read from the `CamelAzureStorageBlobAccessTier` header or the message body. When rehydrating a blob from `ARCHIVE`, the optional `CamelAzureStorageBlobRehydratePriority` header (`RehydratePriority`, `STANDARD` or `HIGH`) controls the rehydration priority.
 |===
 
 Refer to the example section in this page to learn how to use these operations into your camel application.
@@ -838,6 +839,25 @@ from("direct:undeleteBlob")
   .to("mock:result");
 --------------------------------------------------------------------------------
 
+- `setBlobTier`
+
+[source,java]
+--------------------------------------------------------------------------------
+
+// move a blob to the COOL tier for less frequent access
+from("direct:moveToCool")
+  .setHeader(BlobConstants.ACCESS_TIER, constant(AccessTier.COOL))
+  .to("azure-storage-blob://camelazure/container1?blobName=hello.txt&operation=setBlobTier&serviceClient=#client")
+  .to("mock:result");
+
+// rehydrate a blob from ARCHIVE to HOT with high priority
+from("direct:rehydrate")
+  .setHeader(BlobConstants.ACCESS_TIER, constant(AccessTier.HOT))
+  .setHeader(BlobConstants.REHYDRATE_PRIORITY, constant(RehydratePriority.HIGH))
+  .to("azure-storage-blob://camelazure/container1?blobName=archived.txt&operation=setBlobTier&serviceClient=#client")
+  .to("mock:result");
+--------------------------------------------------------------------------------
+
 === SAS Token generation example
 
 SAS Blob Container tokens can be generated programmatically or via Azure UI. To generate the token with java code, the following can be done:
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 06a60dc39c2a..4bb96259da0c 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
@@ -51,7 +51,7 @@ public class BlobConfiguration implements Cloneable {
     @UriParam(label = "producer",
               enums = "listBlobContainers,findBlobsByTags,createBlobContainer,deleteBlobContainer,listBlobs,getBlob,deleteBlob,downloadBlobToFile,downloadLink,"
                       + "uploadBlockBlob,uploadBlockBlobChunked,stageBlockBlobList,commitBlobBlockList,getBlobBlockList,createAppendBlob,commitAppendBlob,createPageBlob,uploadPageBlob,resizePageBlob,"
-                      + "clearPageBlob,getPageBlobRanges,getChangeFeed,copyBlob,createBlobSnapshot,setBlobTags,getBlobTags,undeleteBlob",
+                      + "clearPageBlob,getPageBlobRanges,getChangeFeed,copyBlob,createBlobSnapshot,setBlobTags,getBlobTags,undeleteBlob,setBlobTier",
               defaultValue = "listBlobContainers")
     private BlobOperationsDefinition operation = BlobOperationsDefinition.listBlobContainers;
     @UriParam(label = "common")
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
index b13829fe0b25..e65b3c644e90 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConfigurationOptionsProxy.java
@@ -37,6 +37,7 @@ import com.azure.storage.blob.models.ListBlobsOptions;
 import com.azure.storage.blob.models.PageRange;
 import com.azure.storage.blob.models.ParallelTransferOptions;
 import com.azure.storage.blob.models.PublicAccessType;
+import com.azure.storage.blob.models.RehydratePriority;
 import org.apache.camel.Exchange;
 import org.apache.camel.util.ObjectHelper;
 
@@ -305,6 +306,10 @@ public class BlobConfigurationOptionsProxy {
         return BlobExchangeHeaders.getBlobImmutabilityPolicyModeFromHeaders(exchange);
     }
 
+    public RehydratePriority getRehydratePriority(final Exchange exchange) {
+        return BlobExchangeHeaders.getRehydratePriorityFromHeaders(exchange);
+    }
+
     public BlobConfiguration getConfiguration() {
         return configuration;
     }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
index 47fe9e15f0fe..a01ed64d25f0 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobConstants.java
@@ -327,6 +327,11 @@ public final class BlobConstants {
                             + " modified or deleted), `LOCKED` (cannot be modified or shortened, only extended), or `MUTABLE`.",
               javaType = "com.azure.storage.blob.models.BlobImmutabilityPolicyMode")
     public static final String BLOB_IMMUTABILITY_POLICY_MODE = HEADER_PREFIX + "ImmutabilityPolicyMode";
+    @Metadata(label = "producer",
+              description = "(setBlobTier) The rehydrate priority used when rehydrating a blob from the archive tier:"
+                            + " `Standard` or `High`. Ignored when changing tier between non-archive tiers.",
+              javaType = "com.azure.storage.blob.models.RehydratePriority")
+    public static final String REHYDRATE_PRIORITY = HEADER_PREFIX + "RehydratePriority";
 
     private BlobConstants() {
     }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobExchangeHeaders.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobExchangeHeaders.java
index c1b0abc838eb..fb7022b5eeb0 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobExchangeHeaders.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobExchangeHeaders.java
@@ -47,6 +47,7 @@ import com.azure.storage.blob.models.PageBlobItem;
 import com.azure.storage.blob.models.PageRange;
 import com.azure.storage.blob.models.ParallelTransferOptions;
 import com.azure.storage.blob.models.PublicAccessType;
+import com.azure.storage.blob.models.RehydratePriority;
 import org.apache.camel.Exchange;
 import org.apache.camel.util.ObjectHelper;
 
@@ -529,6 +530,10 @@ public class BlobExchangeHeaders {
         return getObjectFromHeaders(exchange, BlobConstants.BLOB_IMMUTABILITY_POLICY_MODE, BlobImmutabilityPolicyMode.class);
     }
 
+    public static RehydratePriority getRehydratePriorityFromHeaders(final Exchange exchange) {
+        return getObjectFromHeaders(exchange, BlobConstants.REHYDRATE_PRIORITY, RehydratePriority.class);
+    }
+
     public BlobExchangeHeaders blobTags(final Map<String, String> tags) {
         headers.put(BlobConstants.BLOB_TAGS, tags);
         return this;
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobOperationsDefinition.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobOperationsDefinition.java
index c65969230c61..0d5259d06f97 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobOperationsDefinition.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobOperationsDefinition.java
@@ -175,5 +175,12 @@ public enum BlobOperationsDefinition {
      * must be enabled on the storage account for this operation to succeed. The HTTP response headers from the
      * underlying request are returned in the exchange headers.
      */
-    undeleteBlob
+    undeleteBlob,
+    /**
+     * Sets the access tier of an existing blob. The target tier is read from the
+     * {@code CamelAzureStorageBlobAccessTier} header (AccessTier) or from the message body (AccessTier). When
+     * rehydrating an archived blob, the optional {@code CamelAzureStorageBlobRehydratePriority} header
+     * (RehydratePriority) controls the rehydration priority.
+     */
+    setBlobTier
 }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobProducer.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobProducer.java
index 9ce64f82dff8..7a3a49b9a7e8 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobProducer.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobProducer.java
@@ -150,6 +150,9 @@ public class BlobProducer extends DefaultProducer {
             case undeleteBlob:
                 setResponse(exchange, getBlobOperations(exchange).undeleteBlob(exchange));
                 break;
+            case setBlobTier:
+                setResponse(exchange, getBlobOperations(exchange).setBlobTier(exchange));
+                break;
             default:
                 throw new IllegalArgumentException("Unsupported operation");
         }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/client/BlobClientWrapper.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/client/BlobClientWrapper.java
index 152e07582632..c50130c9195a 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/client/BlobClientWrapper.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/client/BlobClientWrapper.java
@@ -55,6 +55,7 @@ import com.azure.storage.blob.models.PageBlobRequestConditions;
 import com.azure.storage.blob.models.PageRange;
 import com.azure.storage.blob.models.PageRangeItem;
 import com.azure.storage.blob.models.ParallelTransferOptions;
+import com.azure.storage.blob.models.RehydratePriority;
 import com.azure.storage.blob.options.BlobGetTagsOptions;
 import com.azure.storage.blob.options.BlobParallelUploadOptions;
 import com.azure.storage.blob.options.BlobSetTagsOptions;
@@ -401,6 +402,14 @@ public class BlobClientWrapper {
         return client.undeleteWithResponse(timeout, Context.NONE);
     }
 
+    public Response<Void> setAccessTier(
+            final AccessTier tier,
+            final RehydratePriority priority,
+            final String leaseId,
+            final Duration timeout) {
+        return client.setAccessTierWithResponse(tier, priority, leaseId, timeout, Context.NONE);
+    }
+
     public BlobLeaseClient getLeaseClient() {
         return new BlobLeaseClientBuilder().blobClient(client).buildClient();
     }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
index 94cdef5c3fa8..a97358e58959 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
@@ -51,6 +51,7 @@ import com.azure.storage.blob.models.PageBlobItem;
 import com.azure.storage.blob.models.PageRange;
 import com.azure.storage.blob.models.PageRangeItem;
 import com.azure.storage.blob.models.ParallelTransferOptions;
+import com.azure.storage.blob.models.RehydratePriority;
 import com.azure.storage.blob.sas.BlobSasPermission;
 import com.azure.storage.blob.sas.BlobServiceSasSignatureValues;
 import com.azure.storage.blob.specialized.BlobClientBase;
@@ -758,6 +759,37 @@ public class BlobOperations {
         return BlobOperationResponse.createWithEmptyBody(exchangeHeaders.toMap());
     }
 
+    public BlobOperationResponse setBlobTier(final Exchange exchange) {
+        ObjectHelper.notNull(exchange, MISSING_EXCHANGE);
+
+        if (LOG.isTraceEnabled()) {
+            LOG.trace("Setting access tier on blob [{}] from exchange [{}]...", configurationProxy.getBlobName(exchange),
+                    exchange);
+        }
+
+        AccessTier tier = configurationProxy.getAccessTier(exchange);
+        if (tier == null) {
+            tier = exchange.getIn().getBody(AccessTier.class);
+        }
+        if (tier == null) {
+            throw new IllegalArgumentException(
+                    "Access tier must be specified either as the message body (AccessTier) or via the "
+                                               + BlobConstants.ACCESS_TIER + " header.");
+        }
+
+        final RehydratePriority priority = configurationProxy.getRehydratePriority(exchange);
+        final BlobCommonRequestOptions commonRequestOptions = getCommonRequestOptions(exchange);
+
+        final Response<Void> response = client.setAccessTier(tier, priority, commonRequestOptions.leaseId(),
+                commonRequestOptions.getTimeout());
+
+        final BlobExchangeHeaders exchangeHeaders = BlobExchangeHeaders.create()
+                .accessTierHeader(tier)
+                .httpHeaders(response.getHeaders());
+
+        return BlobOperationResponse.create(tier, exchangeHeaders.toMap());
+    }
+
     private DownloadRetryOptions getDownloadRetryOptions(final BlobConfigurationOptionsProxy configurationProxy) {
         return new DownloadRetryOptions().setMaxRetryRequests(configurationProxy.getMaxRetryRequests());
     }
diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperationsTest.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperationsTest.java
index 2b5350d88e1f..9183c0b9bf77 100644
--- a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperationsTest.java
+++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperationsTest.java
@@ -29,12 +29,14 @@ import java.util.Map;
 
 import com.azure.core.http.HttpHeaders;
 import com.azure.core.http.rest.ResponseBase;
+import com.azure.storage.blob.models.AccessTier;
 import com.azure.storage.blob.models.BlobDownloadHeaders;
 import com.azure.storage.blob.models.BlobImmutabilityPolicy;
 import com.azure.storage.blob.models.BlobImmutabilityPolicyMode;
 import com.azure.storage.blob.models.BlobLegalHoldResult;
 import com.azure.storage.blob.models.BlobProperties;
 import com.azure.storage.blob.models.BlockBlobItem;
+import com.azure.storage.blob.models.RehydratePriority;
 import com.azure.storage.blob.specialized.BlobClientBase;
 import com.azure.storage.blob.specialized.BlobLeaseClient;
 import org.apache.camel.Exchange;
@@ -540,6 +542,56 @@ class BlobOperationsTest extends CamelTestSupport {
         verify(client, times(1)).undelete(any());
     }
 
+    @Test
+    void testSetBlobTierFromHeader() {
+        final HttpHeaders httpHeaders = new HttpHeaders().set("x-test-header", "111");
+
+        when(client.setAccessTier(eq(AccessTier.COOL), eq(null), any(), any()))
+                .thenReturn(new ResponseBase<>(null, 200, httpHeaders, null, null));
+
+        final Exchange exchange = new DefaultExchange(context);
+        exchange.getIn().setHeader(BlobConstants.ACCESS_TIER, AccessTier.COOL);
+
+        final BlobOperations operations = new BlobOperations(configuration, client);
+        final BlobOperationResponse response = operations.setBlobTier(exchange);
+
+        assertNotNull(response);
+        assertEquals(AccessTier.COOL, response.getBody());
+        assertEquals(AccessTier.COOL, response.getHeaders().get(BlobConstants.ACCESS_TIER));
+        assertEquals("111", ((HttpHeaders) response.getHeaders().get(BlobConstants.RAW_HTTP_HEADERS))
+                .get("x-test-header").getValue());
+        verify(client, times(1)).setAccessTier(eq(AccessTier.COOL), eq(null), any(), any());
+    }
+
+    @Test
+    void testSetBlobTierFromBodyWithRehydratePriority() {
+        final HttpHeaders httpHeaders = new HttpHeaders().set("x-test-header", "222");
+
+        when(client.setAccessTier(eq(AccessTier.HOT), eq(RehydratePriority.HIGH), any(), any()))
+                .thenReturn(new ResponseBase<>(null, 200, httpHeaders, null, null));
+
+        final Exchange exchange = new DefaultExchange(context);
+        exchange.getIn().setBody(AccessTier.HOT);
+        exchange.getIn().setHeader(BlobConstants.REHYDRATE_PRIORITY, RehydratePriority.HIGH);
+
+        final BlobOperations operations = new BlobOperations(configuration, client);
+        final BlobOperationResponse response = operations.setBlobTier(exchange);
+
+        assertNotNull(response);
+        assertEquals(AccessTier.HOT, response.getBody());
+        assertEquals(AccessTier.HOT, response.getHeaders().get(BlobConstants.ACCESS_TIER));
+        verify(client, times(1)).setAccessTier(eq(AccessTier.HOT), eq(RehydratePriority.HIGH), any(), any());
+    }
+
+    @Test
+    void testSetBlobTierWithNoTierThrows() {
+        final Exchange exchange = new DefaultExchange(context);
+        exchange.getIn().setBody("not-an-access-tier");
+
+        final BlobOperations operations = new BlobOperations(configuration, client);
+        assertThrows(IllegalArgumentException.class, () -> operations.setBlobTier(exchange));
+    }
+
     @Test
     void testCreateBlobSnapshot() {
         final String snapshotId = "2026-04-15T10:00:00.0000000Z";
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 ee315bd99902..5f07debab090 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
@@ -4515,6 +4515,22 @@ public interface BlobEndpointBuilderFactory {
         public String azureStorageBlobImmutabilityPolicyMode() {
             return "CamelAzureStorageBlobImmutabilityPolicyMode";
         }
+        /**
+         * (setBlobTier) The rehydrate priority used when rehydrating a blob
+         * from the archive tier: Standard or High. Ignored when changing tier
+         * between non-archive tiers.
+         * 
+         * The option is a: {@code
+         * com.azure.storage.blob.models.RehydratePriority} type.
+         * 
+         * Group: producer
+         * 
+         * @return the name of the header {@code
+         * AzureStorageBlobRehydratePriority}.
+         */
+        public String azureStorageBlobRehydratePriority() {
+            return "CamelAzureStorageBlobRehydratePriority";
+        }
     }
     static BlobEndpointBuilder endpointBuilder(String componentName, String path) {
         class BlobEndpointBuilderImpl extends AbstractEndpointBuilder implements BlobEndpointBuilder, AdvancedBlobEndpointBuilder {