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);
}