CAMEL-8716: camel-http - Make it easier to extend DefaultHttpBinding and have default no-arg ctr
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8962627f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8962627f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8962627f Branch: refs/heads/master Commit: 8962627fb073e969d72f6a211c9f5589a90eb944 Parents: 9305806 Author: Claus Ibsen <[email protected]> Authored: Wed Apr 29 09:36:40 2015 +0200 Committer: Claus Ibsen <[email protected]> Committed: Wed Apr 29 10:26:32 2015 +0200 ---------------------------------------------------------------------- .../component/http/DefaultHttpBinding.java | 4 +++- .../component/http4/DefaultHttpBinding.java | 22 ++++++++++++++------ .../camel/component/http4/HttpBinding.java | 16 ++++++++++++++ .../camel/component/http4/HttpEndpoint.java | 22 +++++++++++++------- 4 files changed, 49 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/8962627f/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java b/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java index 580dc00..6617f70 100644 --- a/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java +++ b/components/camel-http/src/main/java/org/apache/camel/component/http/DefaultHttpBinding.java @@ -51,6 +51,8 @@ import org.slf4j.LoggerFactory; /** * Binding between {@link HttpMessage} and {@link HttpServletResponse}. + * <p/> + * Uses by default the {@link org.apache.camel.component.http.HttpHeaderFilterStrategy} * * @version */ @@ -59,7 +61,7 @@ public class DefaultHttpBinding implements HttpBinding { private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpBinding.class); private boolean useReaderForPayload; private boolean transferException; - private HeaderFilterStrategy headerFilterStrategy; + private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy(); public DefaultHttpBinding() { } http://git-wip-us.apache.org/repos/asf/camel/blob/8962627f/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java index 7064c78..f94a3c1 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/DefaultHttpBinding.java @@ -51,6 +51,8 @@ import org.slf4j.LoggerFactory; /** * Binding between {@link HttpMessage} and {@link HttpServletResponse}. + * <p/> + * Uses by default the {@link org.apache.camel.component.http4.HttpHeaderFilterStrategy} * * @version */ @@ -58,10 +60,9 @@ public class DefaultHttpBinding implements HttpBinding { private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpBinding.class); private boolean useReaderForPayload; + private boolean transferException; private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy(); - private HttpEndpoint endpoint; - @Deprecated public DefaultHttpBinding() { } @@ -70,9 +71,10 @@ public class DefaultHttpBinding implements HttpBinding { this.headerFilterStrategy = headerFilterStrategy; } + @Deprecated public DefaultHttpBinding(HttpEndpoint endpoint) { - this.endpoint = endpoint; this.headerFilterStrategy = endpoint.getHeaderFilterStrategy(); + this.transferException = endpoint.isTransferException(); } public void readRequest(HttpServletRequest request, HttpMessage message) { @@ -124,8 +126,8 @@ public class DefaultHttpBinding implements HttpBinding { // if content type is serialized java object, then de-serialize it to a Java object if (request.getContentType() != null && HttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT.equals(request.getContentType())) { try { - InputStream is = endpoint.getCamelContext().getTypeConverter().mandatoryConvertTo(InputStream.class, body); - Object object = HttpHelper.deserializeJavaObjectFromStream(is); + InputStream is = message.getExchange().getContext().getTypeConverter().mandatoryConvertTo(InputStream.class, body); + Object object = HttpHelper.deserializeJavaObjectFromStream(is, message.getExchange().getContext()); if (object != null) { message.setBody(object); } @@ -229,7 +231,7 @@ public class DefaultHttpBinding implements HttpBinding { public void doWriteExceptionResponse(Throwable exception, HttpServletResponse response) throws IOException { // 500 for internal server error response.setStatus(500); - if (endpoint != null && endpoint.isTransferException()) { + if (isTransferException()) { // transfer the exception as a serialized java object HttpHelper.writeObjectToServletResponse(response, exception); } else { @@ -431,6 +433,14 @@ public class DefaultHttpBinding implements HttpBinding { this.useReaderForPayload = useReaderForPayload; } + public boolean isTransferException() { + return transferException; + } + + public void setTransferException(boolean transferException) { + this.transferException = transferException; + } + public HeaderFilterStrategy getHeaderFilterStrategy() { return headerFilterStrategy; } http://git-wip-us.apache.org/repos/asf/camel/blob/8962627f/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpBinding.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpBinding.java index 339f13b..6f667e8 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpBinding.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpBinding.java @@ -116,6 +116,22 @@ public interface HttpBinding { void setUseReaderForPayload(boolean useReaderForPayload); /** + * If enabled and an Exchange failed processing on the consumer side, and if the caused Exception was send back + * serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or + * Servlet Camel components). On the producer side the exception will be deserialized and thrown as is, + * instead of the HttpOperationFailedException. The caused exception is required to be serialized. + */ + boolean isTransferException(); + + /** + * If enabled and an Exchange failed processing on the consumer side, and if the caused Exception was send back + * serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or + * Servlet Camel components). On the producer side the exception will be deserialized and thrown as is, + * instead of the HttpOperationFailedException. The caused exception is required to be serialized. + */ + void setTransferException(boolean transferException); + + /** * Gets the header filter strategy * * @return the strategy http://git-wip-us.apache.org/repos/asf/camel/blob/8962627f/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java index 4229c1c..03724b5 100644 --- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java +++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java @@ -52,16 +52,21 @@ import org.slf4j.LoggerFactory; public class HttpEndpoint extends DefaultEndpoint implements HeaderFilterStrategyAware { private static final Logger LOG = LoggerFactory.getLogger(HttpEndpoint.class); - private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy(); - private HttpBinding binding; private HttpContext httpContext; private HttpComponent component; - @UriPath @Metadata(required = "true") - private URI httpUri; private HttpClientConfigurer httpClientConfigurer; private HttpClientConnectionManager clientConnectionManager; private HttpClientBuilder clientBuilder; private HttpClient httpClient; + private UrlRewrite urlRewrite; + private CookieStore cookieStore = new BasicCookieStore(); + + @UriPath @Metadata(required = "true") + private URI httpUri; + @UriParam + private HeaderFilterStrategy headerFilterStrategy = new HttpHeaderFilterStrategy(); + @UriParam + private HttpBinding binding; @UriParam(defaultValue = "true") private boolean throwExceptionOnFailure = true; @UriParam @@ -80,11 +85,9 @@ public class HttpEndpoint extends DefaultEndpoint implements HeaderFilterStrateg private boolean authenticationPreemptive; @UriParam private String httpMethodRestrict; - private UrlRewrite urlRewrite; @UriParam(defaultValue = "true") private boolean clearExpiredCookies = true; - private CookieStore cookieStore = new BasicCookieStore(); - + public HttpEndpoint() { } @@ -252,7 +255,10 @@ public class HttpEndpoint extends DefaultEndpoint implements HeaderFilterStrateg public HttpBinding getBinding() { if (binding == null) { - binding = new DefaultHttpBinding(this); + // create a new binding and use the options from this endpoint + binding = new DefaultHttpBinding(); + binding.setHeaderFilterStrategy(getHeaderFilterStrategy()); + binding.setTransferException(isTransferException()); } return binding; }
