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>'].