You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/03/31 10:27:38 UTC

[camel] 04/05: CAMEL-13462: Fix override blob header

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

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

commit b8025724321d73b4fe4fc9e13227586c7f52eabd
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Mar 31 12:19:43 2020 +0200

    CAMEL-13462: Fix override blob header
---
 .../src/main/docs/azure-blob-component.adoc        |  16 +-
 .../component/azure/blob/BlobHeadersConstants.java |   2 +-
 .../component/azure/blob/BlobServiceProducer.java  | 196 +++++++++++----------
 .../component/azure/blob/BlobServiceUtil.java      |  54 +++---
 .../BlobServiceProducerOverrideBlobNameTest.java   |   9 +-
 .../component/azure/blob/BlobServiceUtilTest.java  |   8 +-
 .../azure/common/AzureCredentialsTest.java         |   6 +-
 7 files changed, 162 insertions(+), 129 deletions(-)

diff --git a/components/camel-azure/src/main/docs/azure-blob-component.adoc b/components/camel-azure/src/main/docs/azure-blob-component.adoc
index 5d7c81c..726acfa 100644
--- a/components/camel-azure/src/main/docs/azure-blob-component.adoc
+++ b/components/camel-azure/src/main/docs/azure-blob-component.adoc
@@ -17,7 +17,7 @@ https://docs.microsoft.com/azure/[Azure Documentation Portal].
 
 == URI Format
 
-[source,java]
+[source,text]
 ------------------------------
 azure-blob://accountName/containerName[/blobName][?options]
 ------------------------------
@@ -234,6 +234,20 @@ from("azure-blob://" + accountName + "/" + containerName + "/" + fileName + "?az
 .to("mock:result");
 ----
 
+== Dynamic blob names
+
+The producer supports overriding the default blob name from a message header as shown below:
+
+[source,java]
+----
+   .setHeader("CamelAzureOverrideBlobName", constant("myNewBlob"))
+    .to("azure-blob://myacount/mycontainer/myblob")
+----
+
+Here the producer would normally use `myBlob` as the blob name, but the header will override this and use
+`myNewBlob` instead. This allow for dynamic blob names.
+
+
 == Dependencies
 
 Maven users will need to add the following dependency to their `pom.xml`.
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobHeadersConstants.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobHeadersConstants.java
index 941b1cc..d9f6743 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobHeadersConstants.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobHeadersConstants.java
@@ -18,6 +18,6 @@ package org.apache.camel.component.azure.blob;
 
 public interface BlobHeadersConstants {
 
-    String OVERRIDE_BLOB_NAME = "CamelOverrideBlobName";
+    String OVERRIDE_BLOB_NAME = "CamelAzureOverrideBlobName";
 
 }
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceProducer.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceProducer.java
index 1248dbd..cb05f4a 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceProducer.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceProducer.java
@@ -49,7 +49,7 @@ import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.component.azure.blob.BlobHeadersConstants.OVERRIDE_BLOB_NAME;
+import static org.apache.camel.component.azure.blob.BlobServiceUtil.getBlobName;
 
 /**
  * A Producer which sends messages to the Azure Storage Blob Service
@@ -64,64 +64,60 @@ public class BlobServiceProducer extends DefaultProducer {
 
     @Override
     public void process(final Exchange exchange) throws Exception {
-
-        overrideBlobName(exchange);
-
         BlobServiceOperations operation = determineOperation(exchange);
         if (ObjectHelper.isEmpty(operation)) {
             operation = BlobServiceOperations.listBlobs;
-        } else {
-            switch (operation) {
-                case getBlob:
-                    getBlob(exchange);
-                    break;
-                case deleteBlob:
-                    deleteBlob(exchange);
-                    break;
-                case listBlobs:
-                    listBlobs(exchange);
-                    break;
-                case updateBlockBlob:
-                    updateBlockBlob(exchange);
-                    break;
-                case uploadBlobBlocks:
-                    uploadBlobBlocks(exchange);
-                    break;
-                case commitBlobBlockList:
-                    commitBlobBlockList(exchange);
-                    break;
-                case getBlobBlockList:
-                    getBlobBlockList(exchange);
-                    break;
-                case createAppendBlob:
-                    createAppendBlob(exchange);
-                    break;
-                case updateAppendBlob:
-                    updateAppendBlob(exchange);
-                    break;
-                case createPageBlob:
-                    createPageBlob(exchange);
-                    break;
-                case updatePageBlob:
-                    uploadPageBlob(exchange);
-                    break;
-                case resizePageBlob:
-                    resizePageBlob(exchange);
-                    break;
-                case clearPageBlob:
-                    clearPageBlob(exchange);
-                    break;
-                case getPageBlobRanges:
-                    getPageBlobRanges(exchange);
-                    break;
-                default:
-                    throw new IllegalArgumentException("Unsupported operation");
-            }
+        }
+        switch (operation) {
+            case getBlob:
+                getBlob(exchange);
+                break;
+            case deleteBlob:
+                deleteBlob(exchange);
+                break;
+            case listBlobs:
+                listBlobs(exchange);
+                break;
+            case updateBlockBlob:
+                updateBlockBlob(exchange);
+                break;
+            case uploadBlobBlocks:
+                uploadBlobBlocks(exchange);
+                break;
+            case commitBlobBlockList:
+                commitBlobBlockList(exchange);
+                break;
+            case getBlobBlockList:
+                getBlobBlockList(exchange);
+                break;
+            case createAppendBlob:
+                createAppendBlob(exchange);
+                break;
+            case updateAppendBlob:
+                updateAppendBlob(exchange);
+                break;
+            case createPageBlob:
+                createPageBlob(exchange);
+                break;
+            case updatePageBlob:
+                uploadPageBlob(exchange);
+                break;
+            case resizePageBlob:
+                resizePageBlob(exchange);
+                break;
+            case clearPageBlob:
+                clearPageBlob(exchange);
+                break;
+            case getPageBlobRanges:
+                getPageBlobRanges(exchange);
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported operation");
         }
     }
 
     private void listBlobs(Exchange exchange) throws Exception {
-        CloudBlobContainer client = BlobServiceUtil.createBlobContainerClient(getConfiguration());
+        CloudBlobContainer client = BlobServiceUtil.createBlobContainerClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         LOG.trace("Getting the blob list from the container [{}] from exchange [{}]...",
                 getConfiguration().getContainerName(), exchange);
@@ -142,13 +138,16 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void updateBlockBlob(Exchange exchange) throws Exception {
-        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(getConfiguration());
+        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(exchange, getConfiguration());
         configureCloudBlobForWrite(client);
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
 
         InputStream inputStream = getInputStreamFromExchange(exchange);
 
-        LOG.trace("Putting a block blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Putting a block blob [{}] from exchange [{}]...", blobName, exchange);
+        }
         try {
             client.upload(inputStream, -1,
                     opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext());
@@ -170,11 +169,14 @@ public class BlobServiceProducer extends DefaultProducer {
             throw new IllegalArgumentException("Illegal storageBlocks payload");
         }
 
-        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(getConfiguration());
+        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(exchange, getConfiguration());
         configureCloudBlobForWrite(client);
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
 
-        LOG.trace("Putting a blob [{}] from blocks from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Putting a blob [{}] from blocks from exchange [{}]...", blobName, exchange);
+        }
         List<BlockEntry> blockEntries = new LinkedList<>();
         for (BlobBlock blobBlock : blobBlocks) {
             blockEntries.add(blobBlock.getBlockEntry());
@@ -202,10 +204,13 @@ public class BlobServiceProducer extends DefaultProducer {
             throw new IllegalArgumentException("Illegal commit block list payload");
         }
 
-        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(getConfiguration());
+        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
 
-        LOG.trace("Putting a blob [{}] block list from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Putting a blob [{}] block list from exchange [{}]...", blobName, exchange);
+        }
         client.commitBlockList(blockEntries,
                 opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext());
     }
@@ -231,9 +236,12 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void getBlobBlockList(Exchange exchange) throws Exception {
-        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(getConfiguration());
+        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
-        LOG.trace("Getting the blob block list [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Getting the blob block list [{}] from exchange [{}]...", blobName, exchange);
+        }
         BlockListingFilter filter = exchange.getIn().getBody(BlockListingFilter.class);
         if (filter == null) {
             filter = BlockListingFilter.COMMITTED;
@@ -244,12 +252,12 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void deleteBlockBlob(Exchange exchange) throws Exception {
-        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(getConfiguration());
+        CloudBlockBlob client = BlobServiceUtil.createBlockBlobClient(exchange, getConfiguration());
         doDeleteBlock(client, exchange);
     }
 
     private void createAppendBlob(Exchange exchange) throws Exception {
-        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(getConfiguration());
+        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         if (opts.getAccessCond() == null) {
             // Default: do not reset the blob content if the blob already exists
@@ -260,7 +268,10 @@ public class BlobServiceProducer extends DefaultProducer {
 
     private void doCreateAppendBlob(CloudAppendBlob client, BlobServiceRequestOptions opts, Exchange exchange)
             throws Exception {
-        LOG.trace("Creating an append blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Creating an append blob [{}] from exchange [{}]...", blobName, exchange);
+        }
         try {
             client.createOrReplace(opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext());
         } catch (StorageException ex) {
@@ -273,7 +284,7 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void updateAppendBlob(Exchange exchange) throws Exception {
-        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(getConfiguration());
+        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(exchange, getConfiguration());
         configureCloudBlobForWrite(client);
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         if (opts.getAccessCond() == null) {
@@ -297,13 +308,13 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void deleteAppendBlob(Exchange exchange) throws Exception {
-        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(getConfiguration());
+        CloudAppendBlob client = BlobServiceUtil.createAppendBlobClient(exchange, getConfiguration());
         doDeleteBlock(client, exchange);
     }
 
 
     private void createPageBlob(Exchange exchange) throws Exception {
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         if (opts.getAccessCond() == null) {
             // Default: do not reset the blob content if the blob already exists
@@ -314,7 +325,10 @@ public class BlobServiceProducer extends DefaultProducer {
 
     private void doCreatePageBlob(CloudPageBlob client, BlobServiceRequestOptions opts, Exchange exchange)
             throws Exception {
-        LOG.trace("Creating a page blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Creating a page blob [{}] from exchange [{}]...", blobName, exchange);
+        }
         Long pageSize = getPageBlobSize(exchange);
         try {
             client.create(pageSize,
@@ -330,9 +344,12 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void uploadPageBlob(Exchange exchange) throws Exception {
-        LOG.trace("Updating a page blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Updating a page blob [{}] from exchange [{}]...", blobName, exchange);
+        }
 
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         configureCloudBlobForWrite(client);
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         if (opts.getAccessCond() == null) {
@@ -351,18 +368,24 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void resizePageBlob(Exchange exchange) throws Exception {
-        LOG.trace("Resizing a page blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Resizing a page blob [{}] from exchange [{}]...", blobName, exchange);
+        }
 
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
         Long pageSize = getPageBlobSize(exchange);
         client.resize(pageSize, opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext());
     }
 
     private void clearPageBlob(Exchange exchange) throws Exception {
-        LOG.trace("Clearing a page blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Clearing a page blob [{}] from exchange [{}]...", blobName, exchange);
+        }
 
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
 
         Long blobOffset = getConfiguration().getBlobOffset();
@@ -402,17 +425,20 @@ public class BlobServiceProducer extends DefaultProducer {
     }
 
     private void getPageBlobRanges(Exchange exchange) throws Exception {
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         BlobServiceUtil.configureCloudBlobForRead(client, getConfiguration());
         BlobServiceRequestOptions opts = BlobServiceUtil.getRequestOptions(exchange);
-        LOG.trace("Getting the page blob ranges [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Getting the page blob ranges [{}] from exchange [{}]...", blobName, exchange);
+        }
         List<PageRange> ranges =
                 client.downloadPageRanges(opts.getAccessCond(), opts.getRequestOpts(), opts.getOpContext());
         ExchangeUtil.getMessageForResponse(exchange).setBody(ranges);
     }
 
     private void deletePageBlob(Exchange exchange) throws Exception {
-        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(getConfiguration());
+        CloudPageBlob client = BlobServiceUtil.createPageBlobClient(exchange, getConfiguration());
         doDeleteBlock(client, exchange);
     }
 
@@ -426,15 +452,13 @@ public class BlobServiceProducer extends DefaultProducer {
 
 
     private void doDeleteBlock(CloudBlob client, Exchange exchange) throws Exception {
-        LOG.trace("Deleting a blob [{}] from exchange [{}]...", getConfiguration().getBlobName(), exchange);
+        if (LOG.isTraceEnabled()) {
+            String blobName = getBlobName(exchange, getConfiguration());
+            LOG.trace("Deleting a blob [{}] from exchange [{}]...", blobName, exchange);
+        }
         client.delete();
     }
 
-    private String getCharsetName(Exchange exchange) {
-        String charset = exchange.getIn().getHeader(Exchange.CHARSET_NAME, String.class);
-        return charset == null ? "UTF-8" : charset;
-    }
-
     private void configureCloudBlobForWrite(CloudBlob client) {
         if (getConfiguration().getStreamWriteSize() > 0) {
             client.setStreamWriteSizeInBytes(getConfiguration().getStreamWriteSize());
@@ -500,12 +524,4 @@ public class BlobServiceProducer extends DefaultProducer {
         }
     }
 
-
-    private void overrideBlobName(Exchange exchange) {
-        String blobName = exchange.getIn().getHeader(OVERRIDE_BLOB_NAME, String.class);
-
-        if (ObjectHelper.isNotEmpty(blobName)) {
-            getEndpoint().getConfiguration().setBlobName(blobName);
-        }
-    }
 }
diff --git a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceUtil.java b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceUtil.java
index c4084e9..99ad8c2 100644
--- a/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceUtil.java
+++ b/components/camel-azure/src/main/java/org/apache/camel/component/azure/blob/BlobServiceUtil.java
@@ -37,6 +37,9 @@ import org.apache.camel.component.azure.common.ExchangeUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+
+import static org.apache.camel.component.azure.blob.BlobHeadersConstants.OVERRIDE_BLOB_NAME;
+
 public final class BlobServiceUtil {
 
     private static final Logger LOG = LoggerFactory.getLogger(BlobServiceUtil.class);
@@ -63,17 +66,17 @@ public final class BlobServiceUtil {
 
     private static void getBlockBlob(Exchange exchange, BlobServiceConfiguration cfg)
             throws Exception {
-        CloudBlockBlob client = createBlockBlobClient(cfg);
+        CloudBlockBlob client = createBlockBlobClient(exchange, cfg);
         doGetBlob(client, exchange, cfg);
     }
 
     private static void getAppendBlob(Exchange exchange, BlobServiceConfiguration cfg) throws Exception {
-        CloudAppendBlob client = createAppendBlobClient(cfg);
+        CloudAppendBlob client = createAppendBlobClient(exchange, cfg);
         doGetBlob(client, exchange, cfg);
     }
 
     private static void getPageBlob(Exchange exchange, BlobServiceConfiguration cfg) throws Exception {
-        CloudPageBlob client = createPageBlobClient(cfg);
+        CloudPageBlob client = createPageBlobClient(exchange, cfg);
         doGetBlob(client, exchange, cfg);
     }
 
@@ -121,47 +124,47 @@ public final class BlobServiceUtil {
         return cfg.getBlobName()  + ".blob";
     }
 
-    public static CloudBlobContainer createBlobContainerClient(BlobServiceConfiguration cfg)
+    public static CloudBlobContainer createBlobContainerClient(Exchange exchange, BlobServiceConfiguration cfg)
             throws Exception {
-        URI uri = prepareStorageBlobUri(cfg, false);
+        URI uri = prepareStorageBlobUri(exchange, cfg, false);
         StorageCredentials creds = cfg.getAccountCredentials();
         return new CloudBlobContainer(uri, creds);
     }
 
-    public static CloudBlockBlob createBlockBlobClient(BlobServiceConfiguration cfg)
+    public static CloudBlockBlob createBlockBlobClient(Exchange exchange, BlobServiceConfiguration cfg)
             throws Exception {
-        CloudBlockBlob client = (CloudBlockBlob) getConfiguredClient(cfg);
+        CloudBlockBlob client = (CloudBlockBlob) getConfiguredClient(exchange, cfg);
         if (client == null) {
-            URI uri = prepareStorageBlobUri(cfg);
+            URI uri = prepareStorageBlobUri(exchange, cfg);
             StorageCredentials creds = cfg.getAccountCredentials();
             client = new CloudBlockBlob(uri, creds);
         }
         return client;
     }
 
-    public static CloudAppendBlob createAppendBlobClient(BlobServiceConfiguration cfg)
+    public static CloudAppendBlob createAppendBlobClient(Exchange exchange, BlobServiceConfiguration cfg)
             throws Exception {
-        CloudAppendBlob client = (CloudAppendBlob) getConfiguredClient(cfg);
+        CloudAppendBlob client = (CloudAppendBlob) getConfiguredClient(exchange, cfg);
         if (client == null) {
-            URI uri = prepareStorageBlobUri(cfg);
+            URI uri = prepareStorageBlobUri(exchange, cfg);
             StorageCredentials creds = cfg.getAccountCredentials();
             client = new CloudAppendBlob(uri, creds);
         }
         return client;
     }
 
-    public static CloudPageBlob createPageBlobClient(BlobServiceConfiguration cfg)
+    public static CloudPageBlob createPageBlobClient(Exchange exchange, BlobServiceConfiguration cfg)
             throws Exception {
-        CloudPageBlob client = (CloudPageBlob) getConfiguredClient(cfg);
+        CloudPageBlob client = (CloudPageBlob) getConfiguredClient(exchange, cfg);
         if (client == null) {
-            URI uri = prepareStorageBlobUri(cfg);
+            URI uri = prepareStorageBlobUri(exchange, cfg);
             StorageCredentials creds = cfg.getAccountCredentials();
             client = new CloudPageBlob(uri, creds);
         }
         return client;
     }
 
-    public static CloudBlob getConfiguredClient(BlobServiceConfiguration cfg) {
+    public static CloudBlob getConfiguredClient(Exchange exchange, BlobServiceConfiguration cfg) {
         CloudBlob client = cfg.getAzureBlobClient();
         if (client != null) {
             Class<?> expectedCls = null;
@@ -175,7 +178,7 @@ public final class BlobServiceUtil {
             if (client.getClass() != expectedCls) {
                 throw new IllegalArgumentException("Invalid Client Type");
             }
-            if (!client.getUri().equals(prepareStorageBlobUri(cfg))) {
+            if (!client.getUri().equals(prepareStorageBlobUri(exchange, cfg))) {
                 throw new IllegalArgumentException("Invalid Client URI");
             }
         }
@@ -188,12 +191,14 @@ public final class BlobServiceUtil {
         }
     }
 
-    public static URI prepareStorageBlobUri(BlobServiceConfiguration cfg) {
-        return prepareStorageBlobUri(cfg, true);
+    public static URI prepareStorageBlobUri(Exchange exchange, BlobServiceConfiguration cfg) {
+        return prepareStorageBlobUri(exchange, cfg, true);
     }
 
-    public static URI prepareStorageBlobUri(BlobServiceConfiguration cfg, boolean blobNameRequired) {
-        if (blobNameRequired && cfg.getBlobName() == null) {
+    public static URI prepareStorageBlobUri(Exchange exchange, BlobServiceConfiguration cfg, boolean blobNameRequired) {
+        String blobName = getBlobName(exchange, cfg);
+
+        if (blobNameRequired && blobName == null) {
             throw new IllegalArgumentException("Blob name must be specified");
         }
 
@@ -203,9 +208,9 @@ public final class BlobServiceUtil {
                 .append(BlobServiceConstants.SERVICE_URI_SEGMENT)
                 .append("/")
                 .append(cfg.getContainerName());
-        if (cfg.getBlobName() != null) {
+        if (blobName != null) {
             uriBuilder.append("/")
-                    .append(cfg.getBlobName());
+                    .append(blobName);
         }
         return URI.create(uriBuilder.toString());
     }
@@ -230,4 +235,9 @@ public final class BlobServiceUtil {
         opts.setRequestOpts(requestOpts);
         return opts;
     }
+
+    public static String getBlobName(Exchange exchange, BlobServiceConfiguration cfg) {
+        return exchange.getIn().getHeader(OVERRIDE_BLOB_NAME, cfg.getBlobName(), String.class);
+    }
+
 }
diff --git a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceProducerOverrideBlobNameTest.java b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceProducerOverrideBlobNameTest.java
index 869c0b2..0a4ba77 100644
--- a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceProducerOverrideBlobNameTest.java
+++ b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceProducerOverrideBlobNameTest.java
@@ -24,7 +24,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import static org.apache.camel.component.azure.blob.BlobHeadersConstants.OVERRIDE_BLOB_NAME;
-import static org.junit.Assert.assertEquals;
 
 public class BlobServiceProducerOverrideBlobNameTest {
 
@@ -41,24 +40,18 @@ public class BlobServiceProducerOverrideBlobNameTest {
 
     @Test
     public void testOverrideBlobName() throws Exception {
-
-        String blobName = "blobName";
+        String blobName = "myBlobName";
         exchange.getIn().setHeader(OVERRIDE_BLOB_NAME, blobName);
 
         producer.process(exchange);
-
-        assertEquals(blobName, producer.getEndpoint().getConfiguration().getBlobName());
     }
 
     @Test
     public void testSetBlobNameFromEndpoint() throws Exception {
-
         String blobName = "blob";
         exchange.getIn().setHeader(OVERRIDE_BLOB_NAME, blobName);
 
         producer.process(exchange);
-
-        assertEquals(blobName, producer.getEndpoint().getConfiguration().getBlobName());
     }
 
 }
diff --git a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceUtilTest.java b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceUtilTest.java
index f163c7c..fe8b3f1 100644
--- a/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceUtilTest.java
+++ b/components/camel-azure/src/test/java/org/apache/camel/component/azure/blob/BlobServiceUtilTest.java
@@ -34,7 +34,7 @@ public class BlobServiceUtilTest extends CamelTestSupport {
         BlobServiceEndpoint endpoint =
             (BlobServiceEndpoint) context.getEndpoint("azure-blob://camelazure/container/blob?credentials=#creds");
         URI uri = 
-            BlobServiceUtil.prepareStorageBlobUri(endpoint.getConfiguration());
+            BlobServiceUtil.prepareStorageBlobUri(endpoint.createExchange(), endpoint.getConfiguration());
         assertEquals("https://camelazure.blob.core.windows.net/container/blob", uri.toString());
     }
 
@@ -47,7 +47,7 @@ public class BlobServiceUtilTest extends CamelTestSupport {
         
         BlobServiceEndpoint endpoint =
             (BlobServiceEndpoint) context.getEndpoint("azure-blob://camelazure/container/blob?azureBlobClient=#azureBlobClient&publicForRead=true");
-        assertSame(client, BlobServiceUtil.getConfiguredClient(endpoint.getConfiguration()));
+        assertSame(client, BlobServiceUtil.getConfiguredClient(endpoint.createExchange(), endpoint.getConfiguration()));
     }
     @Test
     public void testGetConfiguredClientTypeMismatch() throws Exception {
@@ -60,7 +60,7 @@ public class BlobServiceUtilTest extends CamelTestSupport {
             (BlobServiceEndpoint) context.getEndpoint("azure-blob://camelazure/container/blob?azureBlobClient=#azureBlobClient&publicForRead=true"
                                                            + "&blobType=appendBlob");
         try {
-            BlobServiceUtil.getConfiguredClient(endpoint.getConfiguration());
+            BlobServiceUtil.getConfiguredClient(endpoint.createExchange(), endpoint.getConfiguration());
             fail();
         } catch (IllegalArgumentException ex) {
             assertEquals("Invalid Client Type", ex.getMessage());
@@ -77,7 +77,7 @@ public class BlobServiceUtilTest extends CamelTestSupport {
             (BlobServiceEndpoint) context.getEndpoint("azure-blob://camelazure/container/blob2?azureBlobClient=#azureBlobClient&publicForRead=true"
                                                            + "&blobType=appendBlob");
         try {
-            BlobServiceUtil.getConfiguredClient(endpoint.getConfiguration());
+            BlobServiceUtil.getConfiguredClient(endpoint.createExchange(), endpoint.getConfiguration());
             fail();
         } catch (IllegalArgumentException ex) {
             assertEquals("Invalid Client URI", ex.getMessage());
diff --git a/components/camel-azure/src/test/java/org/apache/camel/component/azure/common/AzureCredentialsTest.java b/components/camel-azure/src/test/java/org/apache/camel/component/azure/common/AzureCredentialsTest.java
index 88a7be9..53e2aa8 100644
--- a/components/camel-azure/src/test/java/org/apache/camel/component/azure/common/AzureCredentialsTest.java
+++ b/components/camel-azure/src/test/java/org/apache/camel/component/azure/common/AzureCredentialsTest.java
@@ -186,15 +186,15 @@ public class AzureCredentialsTest extends CamelTestSupport {
     private void executeBlobAssertions(String uriString, String expectedAccountName, String  expectedAccountKey) throws Exception {
         BlobServiceEndpoint endpoint = (BlobServiceEndpoint) context.getEndpoint(uriString);
 
-        CloudBlob pageBlobClient = BlobServiceUtil.createPageBlobClient(endpoint.getConfiguration());
+        CloudBlob pageBlobClient = BlobServiceUtil.createPageBlobClient(endpoint.createExchange(), endpoint.getConfiguration());
         executeBlobAccountCredentialsAssertion(pageBlobClient, endpoint.getConfiguration());
         executeBlobCredentialsAssertion(pageBlobClient, expectedAccountName, expectedAccountKey);
 
-        CloudBlob blockBlobClient = BlobServiceUtil.createBlockBlobClient(endpoint.getConfiguration());
+        CloudBlob blockBlobClient = BlobServiceUtil.createBlockBlobClient(endpoint.createExchange(), endpoint.getConfiguration());
         executeBlobAccountCredentialsAssertion(blockBlobClient, endpoint.getConfiguration());
         executeBlobCredentialsAssertion(blockBlobClient, expectedAccountName, expectedAccountKey);
 
-        CloudBlob appendBlobClient = BlobServiceUtil.createAppendBlobClient(endpoint.getConfiguration());
+        CloudBlob appendBlobClient = BlobServiceUtil.createAppendBlobClient(endpoint.createExchange(), endpoint.getConfiguration());
         executeBlobAccountCredentialsAssertion(appendBlobClient, endpoint.getConfiguration());
         executeBlobCredentialsAssertion(appendBlobClient, expectedAccountName, expectedAccountKey);
     }