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 2021/11/27 17:00:43 UTC

[camel] branch main updated: CAMEL-17242: fix issue where Azure storage producers are deleting exchange headers (#6484)

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 <hd...@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 <hd...@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);
     }