CAMEL-9833: Add mapHttpMessage option to allow to turn off mapping by default
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f483e70f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f483e70f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f483e70f
Branch: refs/heads/master
Commit: f483e70f788086aee41e333cd06dcb5a41737f5e
Parents: cebc58c
Author: Andrea Cosentino <ancosen@gmail.com>
Authored: Thu Apr 7 15:10:16 2016 +0200
Committer: Andrea Cosentino <ancosen@gmail.com>
Committed: Thu Apr 7 16:27:24 2016 +0200
----------------------------------------------------------------------
.../camel/http/common/DefaultHttpBinding.java | 61 +++++++++++++-------
.../apache/camel/http/common/HttpBinding.java | 24 ++++++++
.../camel/http/common/HttpCommonEndpoint.java | 31 ++++++++++
components/camel-http4/src/main/docs/http4.adoc | 6 +-
.../jetty/HttpBridgeBigFormPostRouteTest.java | 2 +-
5 files changed, 102 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/f483e70f/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
index ad9adfe..974b869 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpBinding.java
@@ -75,6 +75,8 @@ public class DefaultHttpBinding implements HttpBinding {
private boolean eagerCheckContentAvailable;
private boolean transferException;
private boolean allowJavaSerializedObject;
+ private boolean mapHttpMessageBody = true;
+ private boolean mapHttpMessageHeaders = true;
private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy();
public DefaultHttpBinding() {
@@ -97,25 +99,28 @@ public class DefaultHttpBinding implements HttpBinding {
public void readRequest(HttpServletRequest request, HttpMessage message) {
LOG.trace("readRequest {}", request);
- // lets force a parse of the body and headers
- message.getBody();
- // populate the headers from the request
- Map<String, Object> headers = message.getHeaders();
-
- //apply the headerFilterStrategy
- Enumeration<?> names = request.getHeaderNames();
- while (names.hasMoreElements()) {
- String name = (String)names.nextElement();
- String value = request.getHeader(name);
- // use http helper to extract parameter value as it may contain multiple values
- Object extracted = HttpHelper.extractHttpParameterValue(value);
- // mapping the content-type
- if (name.toLowerCase().equals("content-type")) {
- name = Exchange.CONTENT_TYPE;
- }
- if (headerFilterStrategy != null
- && !headerFilterStrategy.applyFilterToExternalHeaders(name, extracted,
message.getExchange())) {
- HttpHelper.appendHeader(headers, name, extracted);
+ // lets parse the body if mapHttpMessageBody is true
+ if (mapHttpMessageBody) {
+ message.getBody();
+ }
+ // populate the headers from the request if mapHttpHeaders is true
+ Map<String, Object> headers = message.getHeaders();
+ if (mapHttpMessageHeaders) {
+ //apply the headerFilterStrategy
+ Enumeration<?> names = request.getHeaderNames();
+ while (names.hasMoreElements()) {
+ String name = (String)names.nextElement();
+ String value = request.getHeader(name);
+ // use http helper to extract parameter value as it may contain multiple
values
+ Object extracted = HttpHelper.extractHttpParameterValue(value);
+ // mapping the content-type
+ if (name.toLowerCase().equals("content-type")) {
+ name = Exchange.CONTENT_TYPE;
+ }
+ if (headerFilterStrategy != null
+ && !headerFilterStrategy.applyFilterToExternalHeaders(name, extracted,
message.getExchange())) {
+ HttpHelper.appendHeader(headers, name, extracted);
+ }
}
}
@@ -555,7 +560,23 @@ public class DefaultHttpBinding implements HttpBinding {
this.headerFilterStrategy = headerFilterStrategy;
}
- protected static SimpleDateFormat getHttpDateFormat() {
+ public boolean isMapHttpMessageBody() {
+ return mapHttpMessageBody;
+ }
+
+ public void setMapHttpMessageBody(boolean mapHttpMessageBody) {
+ this.mapHttpMessageBody = mapHttpMessageBody;
+ }
+
+ public boolean isMapHttpMessageHeaders() {
+ return mapHttpMessageHeaders;
+ }
+
+ public void setMapHttpMessageHeaders(boolean mapHttpMessageHeaders) {
+ this.mapHttpMessageHeaders = mapHttpMessageHeaders;
+ }
+
+ protected static SimpleDateFormat getHttpDateFormat() {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
dateFormat.setTimeZone(TIME_ZONE_GMT);
return dateFormat;
http://git-wip-us.apache.org/repos/asf/camel/blob/f483e70f/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
index 9402301..1fa36a4 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpBinding.java
@@ -137,6 +137,16 @@ public interface HttpBinding {
* This can be turned on in case HTTP clients do not send streamed data.
*/
boolean isEagerCheckContentAvailable();
+
+ /**
+ * Whether to allow Exchange Body HTTP mapping
+ */
+ boolean isMapHttpMessageBody();
+
+ /**
+ * Whether to allow Exchange Headers HTTP mapping
+ */
+ boolean isMapHttpMessageHeaders();
/**
* Whether to eager check whether the HTTP requests has content if the content-length
header is 0 or not present.
@@ -180,5 +190,19 @@ public interface HttpBinding {
* @param headerFilterStrategy the custom strategy
*/
void setHeaderFilterStrategy(HeaderFilterStrategy headerFilterStrategy);
+
+ /**
+ * Whether to allow Exchange Body HTTP mapping
+ * <p/>
+ * This is by default turned on. If you disable this then be aware that the Exchange
body won't be mapped to HTTP
+ */
+ void setMapHttpMessageBody(boolean mapHttpMessageBody);
+
+ /**
+ * Whether to allow Exchange Headers HTTP mapping
+ * <p/>
+ * This is by default turned on. If you disable this then be aware that the Exchange
headers won't be mapped to HTTP
+ */
+ void setMapHttpMessageHeaders(boolean mapHttpMessageHeaders);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/f483e70f/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
index d6cea0a..e9b45fb 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
@@ -107,6 +107,14 @@ public abstract class HttpCommonEndpoint extends DefaultEndpoint implements
Head
description = "Refers to a custom org.apache.camel.component.http.UrlRewrite
which allows you to rewrite urls when you bridge/proxy endpoints."
+ " See more details at http://camel.apache.org/urlrewrite.html")
private UrlRewrite urlRewrite;
+ @UriParam(label = "advanced", defaultValue = "true",
+ description = "If this option is true then IN exchange Body of the exchange will
be mapped to HTTP body."
+ + " Setting this to false will avoid the HTTP mapping.")
+ boolean mapHttpMessageBody = true;
+ @UriParam(label = "advanced", defaultValue = "true",
+ description = "If this option is true then IN exchange Headers of the exchange
will be mapped to HTTP headers."
+ + " Setting this to false will avoid the HTTP Headers mapping.")
+ boolean mapHttpMessageHeaders = true;
public HttpCommonEndpoint() {
}
@@ -169,6 +177,8 @@ public abstract class HttpCommonEndpoint extends DefaultEndpoint implements
Head
httpBinding.setAllowJavaSerializedObject(getComponent().isAllowJavaSerializedObject());
}
httpBinding.setEagerCheckContentAvailable(isEagerCheckContentAvailable());
+ httpBinding.setMapHttpMessageBody(isMapHttpMessageBody());
+ httpBinding.setMapHttpMessageHeaders(isMapHttpMessageHeaders());
}
return httpBinding;
}
@@ -446,4 +456,25 @@ public abstract class HttpCommonEndpoint extends DefaultEndpoint implements
Head
this.okStatusCodeRange = okStatusCodeRange;
}
+ public boolean isMapHttpMessageBody() {
+ return mapHttpMessageBody;
+ }
+
+ /**
+ * If this option is true, the IN exchange body will be mapped to HTTP
+ */
+ public void setMapHttpMessageBody(boolean mapHttpMessageBody) {
+ this.mapHttpMessageBody = mapHttpMessageBody;
+ }
+
+ public boolean isMapHttpMessageHeaders() {
+ return mapHttpMessageHeaders;
+ }
+
+ /**
+ * If this option is true, the IN exchange headers will be mapped to HTTP Headers
+ */
+ public void setMapHttpMessageHeaders(boolean mapHttpMessageHeaders) {
+ this.mapHttpMessageHeaders = mapHttpMessageHeaders;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/f483e70f/components/camel-http4/src/main/docs/http4.adoc
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/docs/http4.adoc b/components/camel-http4/src/main/docs/http4.adoc
index acd9314..eb420c3 100644
--- a/components/camel-http4/src/main/docs/http4.adoc
+++ b/components/camel-http4/src/main/docs/http4.adoc
@@ -80,8 +80,9 @@ The HTTP4 component supports 13 options which are listed below.
+
// endpoint options: START
-The HTTP4 component supports 27 endpoint options which are listed below:
+The HTTP4 component supports 29 endpoint options which are listed below:
[width="100%",cols="2s,1,1m,1m,5",options="header"]
|=======================================================================
@@ -111,12 +112,15 @@ The HTTP4 component supports 27 endpoint options which are listed below:
| httpClientConfigurer | advanced | | HttpClientConfigurer | Register a custom configuration
strategy for new HttpClient instances created by producers or consumers such as to configure
authentication mechanisms etc
| httpClientOptions | advanced | | Map | To configure the HttpClient using the key/values
from the Map.
| httpContext | advanced | | HttpContext | To use a custom HttpContext instance
+| mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange
Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP
mapping.
+| mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange
Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the
HTTP Headers mapping.
| synchronous | advanced | false | boolean | Sets whether synchronous processing should be
strictly used or Camel is allowed to use asynchronous processing (if supported).
| useSystemProperties | advanced | false | boolean | To use System Properties as fallback
for configuration
|=======================================================================
// endpoint options: END
+
[[HTTP4-MessageHeaders]]
Message Headers
^^^^^^^^^^^^^^^
http://git-wip-us.apache.org/repos/asf/camel/blob/f483e70f/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
index 9d4221d..dd0ee1f 100644
--- a/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
+++ b/components/camel-jetty9/src/test/java/org/apache/camel/component/jetty/HttpBridgeBigFormPostRouteTest.java
@@ -118,7 +118,7 @@ public class HttpBridgeBigFormPostRouteTest extends BaseJettyTest {
from("jetty:http://localhost:" + port2 + "/test/hello?matchOnUriPrefix=true")
.removeHeaders("formMetaData")
- .to("http://localhost:" + port1 + "?bridgeEndpoint=true");
+ .to("http://localhost:" + port1 + "?bridgeEndpoint=true&mapHttpMessageHeaders=false");
}
};
}
|