You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zr...@apache.org on 2017/11/25 23:47:25 UTC

[camel] branch master updated: CAMEL-11919: Fixes if headers not given as String[]

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 906569b  CAMEL-11919: Fixes if headers not given as String[]
906569b is described below

commit 906569b9aad68fad5f65f518e474125835351ce3
Author: Zoran Regvart <zr...@apache.org>
AuthorDate: Sun Nov 26 00:47:22 2017 +0100

    CAMEL-11919: Fixes if headers not given as String[]
    
    If headers on the incoming message intended to be sent to Salesforce are
    not specified as a String array, they will not be set on the HTTP
    request. This adds explicit conversion instead of relying on conversion
    of the header value.
---
 .../internal/client/AbstractClientBase.java        | 20 ++++++--
 .../SalesforceHeadersIntegrationTest.java          |  4 +-
 .../internal/client/AbstractClientBaseTest.java    | 53 ++++++++++++++++++++++
 3 files changed, 72 insertions(+), 5 deletions(-)

diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
index 6230b23..8293a80 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBase.java
@@ -21,6 +21,8 @@ import java.io.InputStream;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -29,6 +31,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.Phaser;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.stream.Collectors;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
@@ -277,7 +280,7 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce
 
     protected abstract SalesforceException createRestException(Response response, InputStream responseContent);
 
-    private static Map<String, String> determineHeadersFrom(final Response response) {
+    static Map<String, String> determineHeadersFrom(final Response response) {
         final HttpFields headers = response.getHeaders();
 
         final Map<String, String> answer = new LinkedHashMap<>();
@@ -311,8 +314,19 @@ public abstract class AbstractClientBase implements SalesforceSession.Salesforce
         final Map<String, List<String>> answer = new HashMap<>();
         for (final String headerName : headers.keySet()) {
             if (headerName.startsWith("Sforce") || headerName.startsWith("x-sfdc")) {
-                final String[] values = inboundMessage.getHeader(headerName, String[].class);
-                answer.put(headerName, Arrays.asList(values));
+                final Object headerValue = inboundMessage.getHeader(headerName);
+
+                if (headerValue instanceof String) {
+                    answer.put(headerName, Collections.singletonList((String) headerValue));
+                } else if (headerValue instanceof String[]) {
+                    answer.put(headerName, Arrays.asList((String[]) headerValue));
+                } else if (headerValue instanceof Collection) {
+                    answer.put(headerName, ((Collection<?>) headerValue).stream().map(String::valueOf)
+                        .collect(Collectors.<String>toList()));
+                } else {
+                    throw new IllegalArgumentException(
+                        "Given value for header `" + headerName + "`, is not String, String array or a Collection");
+                }
             }
         }
 
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceHeadersIntegrationTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceHeadersIntegrationTest.java
index ff66922..8066b5e 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceHeadersIntegrationTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/SalesforceHeadersIntegrationTest.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.salesforce;
 
-import java.util.Arrays;
+import java.util.Collections;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -29,7 +29,7 @@ public class SalesforceHeadersIntegrationTest extends AbstractSalesforceTestBase
     @Test
     public void shouldSendCustomHeaders() {
         final Exchange exchange = template().request("salesforce:getGlobalObjects", (Processor) exchange1 -> {
-            exchange1.getIn().setHeader("Sforce-Limit-Info", Arrays.asList("api-usage"));
+            exchange1.getIn().setHeader("Sforce-Limit-Info", Collections.singletonList("api-usage"));
         });
 
         Assertions.assertThat(exchange.getOut().getBody(GlobalObjects.class)).isNotNull();
diff --git a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
index 152763a..b96ceba 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/test/java/org/apache/camel/component/salesforce/internal/client/AbstractClientBaseTest.java
@@ -17,10 +17,21 @@
 package org.apache.camel.component.salesforce.internal.client;
 
 import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
 
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
 import org.apache.camel.component.salesforce.SalesforceHttpClient;
 import org.apache.camel.component.salesforce.api.SalesforceException;
 import org.apache.camel.component.salesforce.internal.SalesforceSession;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.impl.DefaultMessage;
 import org.eclipse.jetty.client.HttpConversation;
 import org.eclipse.jetty.client.api.Request;
 import org.eclipse.jetty.client.api.Response;
@@ -31,6 +42,8 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.entry;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
@@ -72,6 +85,46 @@ public class AbstractClientBaseTest {
     }
 
     @Test
+    public void shouldDetermineHeadersForRequest() {
+        final CamelContext context = new DefaultCamelContext();
+
+        final Exchange exchange = new DefaultExchange(context);
+        final Message in = new DefaultMessage(context);
+        in.setHeader("Sforce-Auto-Assign", "TRUE");
+        in.setHeader("Sforce-Call-Options",
+            new String[] {"client=SampleCaseSensitiveToken/100", "defaultNamespace=battle"});
+        in.setHeader("Sforce-Limit-Info", singletonList("per-app-api-usage"));
+        in.setHeader("x-sfdc-packageversion-clientPackage", "1.0");
+        in.setHeader("Sforce-Query-Options", "batchSize=1000");
+        in.setHeader("Non-Related", "Header");
+        exchange.setIn(in);
+
+        final Map<String, List<String>> headers = AbstractClientBase.determineHeaders(exchange);
+
+        assertThat(headers).containsOnly(entry("Sforce-Auto-Assign", singletonList("TRUE")),
+            entry("Sforce-Call-Options", asList("client=SampleCaseSensitiveToken/100", "defaultNamespace=battle")),
+            entry("Sforce-Limit-Info", singletonList("per-app-api-usage")),
+            entry("x-sfdc-packageversion-clientPackage", singletonList("1.0")),
+            entry("Sforce-Query-Options", singletonList("batchSize=1000")));
+    }
+
+    @Test
+    public void shouldDetermineHeadersFromResponse() {
+        final Response response = mock(Response.class);
+        final HttpFields httpHeaders = new HttpFields();
+        httpHeaders.add("Date", "Mon, 20 May 2013 22:21:46 GMT");
+        httpHeaders.add("Sforce-Limit-Info", "api-usage=18/5000");
+        httpHeaders.add("Last-Modified", "Mon, 20 May 2013 20:49:32 GMT");
+        httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
+        httpHeaders.add("Transfer-Encoding", "chunked");
+
+        when(response.getHeaders()).thenReturn(httpHeaders);
+        final Map<String, String> headers = AbstractClientBase.determineHeadersFrom(response);
+
+        assertThat(headers).containsEntry("Sforce-Limit-Info", "api-usage=18/5000");
+    }
+
+    @Test
     public void shouldNotHangIfRequestsHaveFinished() throws Exception {
         final Request request = mock(Request.class);
         final ArgumentCaptor<CompleteListener> listener = ArgumentCaptor.forClass(CompleteListener.class);

-- 
To stop receiving notification emails like this one, please contact
['"commits@camel.apache.org" <co...@camel.apache.org>'].