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/10/13 14:20:27 UTC

[camel] branch main updated: [camel-nats] Fix headers mapping when doing a round trip to nats (#6268)

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 4d1ba62  [camel-nats] Fix headers mapping when doing a round trip to nats (#6268)
4d1ba62 is described below

commit 4d1ba62d9b741431b31d4d4a4e31e9d5f03ef78b
Author: OpenGuidou <73...@users.noreply.github.com>
AuthorDate: Wed Oct 13 16:19:57 2021 +0200

    [camel-nats] Fix headers mapping when doing a round trip to nats (#6268)
    
    Co-authored-by: Guillaume Doussin <gu...@amadeus.com>
---
 .../java/org/apache/camel/component/nats/NatsConsumer.java   |  8 +++++++-
 .../nats/integration/NatsConsumerHeadersSupportIT.java       | 12 +++++++-----
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
index 7d04fd7..56f9f70 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConsumer.java
@@ -173,7 +173,13 @@ public class NatsConsumer extends DefaultConsumer {
                                 .getHeaderFilterStrategy();
                         msg.getHeaders().entrySet().forEach(entry -> {
                             if (!strategy.applyFilterToExternalHeaders(entry.getKey(), entry.getValue(), exchange)) {
-                                exchange.getIn().setHeader(entry.getKey(), entry.getValue());
+                                if (entry.getValue().size() == 1) {
+                                    // going from camel to nats add all headers in lists, so we extract them in the opposite
+                                    // way if it contains a single value
+                                    exchange.getIn().setHeader(entry.getKey(), entry.getValue().get(0));
+                                } else {
+                                    exchange.getIn().setHeader(entry.getKey(), entry.getValue());
+                                }
                             } else {
                                 LOG.debug("Excluding header {} as per strategy", entry.getKey());
                             }
diff --git a/components/camel-nats/src/test/java/org/apache/camel/component/nats/integration/NatsConsumerHeadersSupportIT.java b/components/camel-nats/src/test/java/org/apache/camel/component/nats/integration/NatsConsumerHeadersSupportIT.java
index 2fca96a..ae9134e 100644
--- a/components/camel-nats/src/test/java/org/apache/camel/component/nats/integration/NatsConsumerHeadersSupportIT.java
+++ b/components/camel-nats/src/test/java/org/apache/camel/component/nats/integration/NatsConsumerHeadersSupportIT.java
@@ -17,6 +17,8 @@
 package org.apache.camel.component.nats.integration;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 import io.nats.client.Connection;
 import io.nats.client.Nats;
@@ -46,11 +48,11 @@ class NatsConsumerHeadersSupportIT extends NatsITSupport {
     @Test
     void testConsumerShouldForwardHeaders() throws IOException, InterruptedException {
 
-        final String[] firstHeader = { HEADER_VALUE_1 };
-        final String[] secondHeader = { HEADER_VALUE_2, HEADER_VALUE_3 };
-        this.mockResultEndpoint.expectedHeaderReceived(HEADER_KEY_1, firstHeader);
-        this.mockResultEndpoint.expectedHeaderReceived(HEADER_KEY_2,
-                secondHeader);
+        List<String> secondHeaders = new ArrayList<String>();
+        secondHeaders.add(HEADER_VALUE_2);
+        secondHeaders.add(HEADER_VALUE_3);
+        this.mockResultEndpoint.expectedHeaderReceived(HEADER_KEY_1, HEADER_VALUE_1);
+        this.mockResultEndpoint.expectedHeaderReceived(HEADER_KEY_2, secondHeaders);
 
         final Options options = new Options.Builder().server("nats://" + service.getServiceAddress()).build();
         final Connection connection = Nats.connect(options);