This is an automated email from the ASF dual-hosted git repository. davsclaus 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 9ace796 CAMEL-17242: fix issue where Azure storage producers are deleting exchange headers (#6484) 9ace796 is described below commit 9ace796f312dc8aa6cdfa4d9b8f1cd5fe479b1ec Author: hdumont <hdum...@gmail.com> AuthorDate: Sat Nov 27 18:00:05 2021 +0100 CAMEL-17242: fix issue where Azure storage producers are deleting exchange headers (#6484) Co-authored-by: hdumont <hdum...@opentext.com> --- .../component/azure/storage/blob/BlobProducer.java | 2 +- .../azure/storage/blob/integration/BlobProducerIT.java | 17 +++++++++++++++-- .../azure/storage/datalake/DataLakeProducer.java | 2 +- .../datalake/integration/DataLakeProducerIT.java | 12 ++++++++++++ .../component/azure/storage/queue/QueueProducer.java | 2 +- .../queue/integration/StorageQueueProducerIT.java | 13 +++++++++++++ 6 files changed, 43 insertions(+), 5 deletions(-) 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 87077a0..6f6a72b 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 @@ -133,7 +133,7 @@ public class BlobProducer extends DefaultProducer { private void setResponse(final Exchange exchange, final BlobOperationResponse blobOperationResponse) { exchange.getMessage().setBody(blobOperationResponse.getBody()); - exchange.getMessage().setHeaders(blobOperationResponse.getHeaders()); + exchange.getMessage().getHeaders().putAll(blobOperationResponse.getHeaders()); } @Override diff --git a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobProducerIT.java b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobProducerIT.java index f3adbec..8ac562f 100644 --- a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobProducerIT.java +++ b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobProducerIT.java @@ -37,8 +37,7 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.*; class BlobProducerIT extends Base { @@ -174,6 +173,20 @@ class BlobProducerIT extends Base { result.assertIsSatisfied(); } + @Test + void testHeaderPreservation() throws InterruptedException { + result.expectedMessageCount(1); + + template.send("direct:uploadBlockBlobWithConfigUri", + exchange -> { + exchange.getIn().setBody("Block Blob"); + exchange.getIn().setHeader("DoNotDelete", "keep me"); + }); + assertEquals("keep me", result.getExchanges().get(0).getMessage().getHeader("DoNotDelete")); + + result.assertIsSatisfied(); + } + @AfterAll public void tearDown() { containerClient.delete(); diff --git a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeProducer.java b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeProducer.java index 1f463ce..6a2d060 100644 --- a/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeProducer.java +++ b/components/camel-azure/camel-azure-storage-datalake/src/main/java/org/apache/camel/component/azure/storage/datalake/DataLakeProducer.java @@ -110,7 +110,7 @@ public class DataLakeProducer extends DefaultProducer { private void setResponse(final Exchange exchange, final DataLakeOperationResponse dataLakeOperationResponse) { exchange.getMessage().setBody(dataLakeOperationResponse.getBody()); - exchange.getMessage().setHeaders(dataLakeOperationResponse.getHeaders()); + exchange.getMessage().getHeaders().putAll(dataLakeOperationResponse.getHeaders()); } private DataLakeOperationsDefinition determineOperation(final Exchange exchange) { diff --git a/components/camel-azure/camel-azure-storage-datalake/src/test/java/org/apache/camel/component/azure/storage/datalake/integration/DataLakeProducerIT.java b/components/camel-azure/camel-azure-storage-datalake/src/test/java/org/apache/camel/component/azure/storage/datalake/integration/DataLakeProducerIT.java index de87788..026cb70 100644 --- a/components/camel-azure/camel-azure-storage-datalake/src/test/java/org/apache/camel/component/azure/storage/datalake/integration/DataLakeProducerIT.java +++ b/components/camel-azure/camel-azure-storage-datalake/src/test/java/org/apache/camel/component/azure/storage/datalake/integration/DataLakeProducerIT.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Locale; import com.azure.storage.file.datalake.models.FileSystemItem; +import org.apache.camel.Exchange; import org.apache.camel.component.azure.storage.datalake.DataLakeConstants; import org.apache.camel.component.azure.storage.datalake.DataLakeOperationsDefinition; import org.apache.commons.lang3.RandomStringUtils; @@ -31,6 +32,8 @@ import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static org.junit.jupiter.api.Assertions.assertEquals; + @EnabledIfSystemProperty(named = "azure.instance.type", matches = "remote") public class DataLakeProducerIT extends Base { @@ -105,6 +108,15 @@ public class DataLakeProducerIT extends Base { } + @Test + void testHeaderPreservation() throws InterruptedException { + Exchange result = template.send(componentUri(fileSystemName, DataLakeOperationsDefinition.listFileSystem), + exchange -> { + exchange.getIn().setHeader("DoNotDelete", "keep me"); + }); + assertEquals("keep me", result.getMessage().getHeader("DoNotDelete")); + } + private String componentUri(final String filesystem, final DataLakeOperationsDefinition operation) { return String.format("azure-storage-datalake://%s%s?operation=%s", service.azureCredentials().accountName(), diff --git a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueProducer.java b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueProducer.java index 98a9898..3ad26f9 100644 --- a/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueProducer.java +++ b/components/camel-azure/camel-azure-storage-queue/src/main/java/org/apache/camel/component/azure/storage/queue/QueueProducer.java @@ -91,7 +91,7 @@ public class QueueProducer extends DefaultProducer { private void setResponse(final Exchange exchange, final QueueOperationResponse response) { exchange.getMessage().setBody(response.getBody()); - exchange.getMessage().setHeaders(response.getHeaders()); + exchange.getMessage().getHeaders().putAll(response.getHeaders()); } private QueueOperationDefinition determineOperation(final Exchange exchange) { diff --git a/components/camel-azure/camel-azure-storage-queue/src/test/java/org/apache/camel/component/azure/storage/queue/integration/StorageQueueProducerIT.java b/components/camel-azure/camel-azure-storage-queue/src/test/java/org/apache/camel/component/azure/storage/queue/integration/StorageQueueProducerIT.java index c10e7e0..fa5db08 100644 --- a/components/camel-azure/camel-azure-storage-queue/src/test/java/org/apache/camel/component/azure/storage/queue/integration/StorageQueueProducerIT.java +++ b/components/camel-azure/camel-azure-storage-queue/src/test/java/org/apache/camel/component/azure/storage/queue/integration/StorageQueueProducerIT.java @@ -128,6 +128,19 @@ class StorageQueueProducerIT extends StorageQueueBase { }; } + @Test + public void testHeaderPreservation() throws InterruptedException { + + // first test if queue is not created + template.send("direct:sendMessage", ExchangePattern.InOnly, exchange -> { + exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, queueName); + exchange.getIn().setBody("test-message-1"); + exchange.getIn().setHeader(QueueConstants.CREATE_QUEUE, true); + exchange.getIn().setHeader("DoNotDelete", "keep me"); + }); + assertEquals("keep me", result.getExchanges().get(0).getMessage().getHeader("DoNotDelete")); + } + private String componentUri(final String operation, final String queueName) { return String.format("azure-storage-queue://cameldev/%s?operation=%s", queueName, operation); }