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 2017/03/26 08:08:29 UTC
[3/4] camel git commit: CAMEL-11028: Avoid duplicating content-type
headers for camel-spark-rest
CAMEL-11028: Avoid duplicating content-type headers for camel-spark-rest
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38e2c1f9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38e2c1f9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38e2c1f9
Branch: refs/heads/camel-2.18.x
Commit: 38e2c1f983cb9203dcfa0c002e31a39e8d137363
Parents: 1a59b2c
Author: Charlie McNeill, Karthikeyan Gurunathan and Jonathan Bridger <jo...@sky.uk>
Authored: Thu Mar 23 14:35:35 2017 +0000
Committer: Claus Ibsen <da...@apache.org>
Committed: Sun Mar 26 10:07:23 2017 +0200
----------------------------------------------------------------------
components/camel-spark-rest/pom.xml | 7 +-
.../sparkrest/DefaultSparkBinding.java | 14 +--
.../sparkrest/SparkHeaderFilterStrategy.java | 2 +
.../sparkrest/DefaultSparkBindingTest.java | 125 +++++++++++++++++++
4 files changed, 140 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/pom.xml b/components/camel-spark-rest/pom.xml
index 3b8dd56..879bbd8 100644
--- a/components/camel-spark-rest/pom.xml
+++ b/components/camel-spark-rest/pom.xml
@@ -100,7 +100,6 @@
<artifactId>camel-swagger-java</artifactId>
<scope>test</scope>
</dependency>
-
<!-- for testing rest-dsl -->
<dependency>
<groupId>org.apache.camel</groupId>
@@ -112,6 +111,12 @@
<artifactId>camel-jaxb</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ <version>1.9.5</version>
+ <scope>test</scope>
+ </dependency>
<!-- logging -->
<dependency>
http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
index e721baa..202fb17 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/DefaultSparkBinding.java
@@ -66,13 +66,6 @@ public class DefaultSparkBinding implements SparkBinding {
@Override
public void populateCamelHeaders(Request request, Map<String, Object> headers, Exchange exchange, SparkConfiguration configuration) throws Exception {
- // store the method and query and other info in headers as String types
- headers.put(Exchange.HTTP_METHOD, request.raw().getMethod());
- headers.put(Exchange.HTTP_QUERY, request.raw().getQueryString());
- headers.put(Exchange.HTTP_URL, request.raw().getRequestURL().toString());
- headers.put(Exchange.HTTP_URI, request.raw().getRequestURI());
- headers.put(Exchange.CONTENT_TYPE, request.raw().getContentType());
-
String path = request.raw().getPathInfo();
SparkEndpoint endpoint = (SparkEndpoint) exchange.getFromEndpoint();
if (endpoint.getPath() != null) {
@@ -127,6 +120,13 @@ public class DefaultSparkBinding implements SparkBinding {
&& !headerFilterStrategy.applyFilterToExternalHeaders(key, splat, exchange)) {
SparkHelper.appendHeader(headers, key, splat);
}
+
+ // store the method and query and other info in headers as String types
+ headers.putIfAbsent(Exchange.HTTP_METHOD, request.raw().getMethod());
+ headers.putIfAbsent(Exchange.HTTP_QUERY, request.raw().getQueryString());
+ headers.putIfAbsent(Exchange.HTTP_URL, request.raw().getRequestURL().toString());
+ headers.putIfAbsent(Exchange.HTTP_URI, request.raw().getRequestURI());
+ headers.putIfAbsent(Exchange.CONTENT_TYPE, request.raw().getContentType());
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
index 8776612..d95c868 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkHeaderFilterStrategy.java
@@ -28,6 +28,8 @@ public class SparkHeaderFilterStrategy extends DefaultHeaderFilterStrategy {
}
protected void initialize() {
+ getInFilter().add("content-type");
+
getOutFilter().add("content-length");
getOutFilter().add("content-type");
getOutFilter().add("host");
http://git-wip-us.apache.org/repos/asf/camel/blob/38e2c1f9/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
new file mode 100644
index 0000000..717e280
--- /dev/null
+++ b/components/camel-spark-rest/src/test/java/org/apache/camel/component/sparkrest/DefaultSparkBindingTest.java
@@ -0,0 +1,125 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.sparkrest;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyMap;
+import static org.apache.camel.Exchange.CONTENT_TYPE;
+import static org.apache.camel.Exchange.HTTP_METHOD;
+import static org.apache.camel.Exchange.HTTP_QUERY;
+import static org.apache.camel.Exchange.HTTP_URI;
+import static org.apache.camel.Exchange.HTTP_URL;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.camel.Exchange;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.FromDataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
+
+import spark.Request;
+
+@RunWith(Theories.class)
+public class DefaultSparkBindingTest {
+
+ private DefaultSparkBinding defaultSparkBinding;
+
+ private Request request = mock(Request.class);
+ private SparkConfiguration sparkConfiguration = mock(SparkConfiguration.class);
+ private HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
+ private Exchange camelExchange = mock(Exchange.class);
+
+ @Before
+ public void setup() {
+ defaultSparkBinding = new DefaultSparkBinding();
+
+ when(request.raw()).thenReturn(httpServletRequest);
+ when(request.headers()).thenReturn(Sets.newHashSet("Content-Type"));
+ when(request.headers("Content-Type")).thenReturn("application/json");
+
+ when(httpServletRequest.getMethod()).thenReturn("POST");
+ when(httpServletRequest.getQueryString()).thenReturn("?query=value");
+ when(httpServletRequest.getRequestURL()).thenReturn(new StringBuffer("http://localhost?query=value"));
+ when(httpServletRequest.getRequestURI()).thenReturn("http://localhost?query=value");
+ when(httpServletRequest.getContentType()).thenReturn("application/json");
+
+ when(camelExchange.getFromEndpoint()).thenReturn(new SparkEndpoint("/", null));
+ }
+
+ @DataPoints("exchangeHeaderScenarios")
+ public static List<ExchangeHeaderScenario> exchangeHeaderScenarios() {
+ return asList(
+ new ExchangeHeaderScenario(emptyMap(), HTTP_METHOD, "POST"),
+ new ExchangeHeaderScenario(emptyMap(), HTTP_QUERY, "?query=value"),
+ new ExchangeHeaderScenario(emptyMap(), HTTP_URL, "http://localhost?query=value"),
+ new ExchangeHeaderScenario(emptyMap(), HTTP_URI, "http://localhost?query=value"),
+ new ExchangeHeaderScenario(emptyMap(), CONTENT_TYPE, "application/json"),
+ new ExchangeHeaderScenario(ImmutableMap.of(HTTP_METHOD, "GET"), HTTP_METHOD, "GET"),
+ new ExchangeHeaderScenario(ImmutableMap.of(HTTP_QUERY, "?originalQuery=value"), HTTP_QUERY, "?originalQuery=value"),
+ new ExchangeHeaderScenario(ImmutableMap.of(HTTP_URL, "http://originalhost?query=value"), HTTP_URL, "http://originalhost?query=value"),
+ new ExchangeHeaderScenario(ImmutableMap.of(HTTP_URI, "http://originalhost?query=value"), HTTP_URI, "http://originalhost?query=value"),
+ new ExchangeHeaderScenario(ImmutableMap.of(CONTENT_TYPE, "text/plain"), CONTENT_TYPE, "text/plain")
+ );
+ }
+
+ @Theory
+ @Test
+ public void shouldOnlyAddStandardExchangeHeader_givenHeaderNotPresentInInput(
+ @FromDataPoints("exchangeHeaderScenarios") ExchangeHeaderScenario scenario) throws Exception {
+ //given
+ Map<String, Object> headers = scenario.headers;
+
+ //when
+ defaultSparkBinding.populateCamelHeaders(request, headers, camelExchange, sparkConfiguration);
+
+ //then
+ String actualHeader = Objects.toString(headers.get(scenario.expectedHeaderName), null);
+ assertEquals(scenario.expectedHeaderValue, actualHeader);
+ }
+
+ private static class ExchangeHeaderScenario {
+ Map<String, Object> headers = new HashMap<>();
+ String expectedHeaderName;
+ String expectedHeaderValue;
+
+ public ExchangeHeaderScenario(Map<String, Object> headers, String expectedHeaderName, String expectedHeaderValue) {
+ super();
+ this.expectedHeaderName = expectedHeaderName;
+ this.expectedHeaderValue = expectedHeaderValue;
+
+ this.headers.putAll(headers);
+ }
+ }
+}
+
+