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 2013/09/03 13:16:26 UTC
[3/3] git commit: CAMEL-6702: camel-http4 in bridge mode should not
use cookie store. Also made it easy to configure a custom cookie store,
and removed expired cookies by default.
CAMEL-6702: camel-http4 in bridge mode should not use cookie store. Also made it easy to configure a custom cookie store, and removed expired cookies by default.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b3bc9bcc
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b3bc9bcc
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b3bc9bcc
Branch: refs/heads/camel-2.11.x
Commit: b3bc9bcc3c67e962f949f16a1fe986b0f592dcb5
Parents: 8384cff
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 3 13:15:23 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 3 13:15:57 2013 +0200
----------------------------------------------------------------------
.../camel/component/http4/HttpComponent.java | 15 +++++-
.../camel/component/http4/HttpEndpoint.java | 32 +++++++++++-
.../camel/component/http4/HttpProducer.java | 10 ++++
.../camel/component/http4/NoopCookieStore.java | 51 ++++++++++++++++++++
4 files changed, 106 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b3bc9bcc/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
index de82932..a336ff5 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
@@ -31,6 +31,7 @@ import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.URISupport;
import org.apache.camel.util.jsse.SSLContextParameters;
import org.apache.http.auth.params.AuthParamBean;
+import org.apache.http.client.CookieStore;
import org.apache.http.client.params.ClientParamBean;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnRouteParamBean;
@@ -65,6 +66,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
protected HttpContext httpContext;
protected SSLContextParameters sslContextParameters;
protected X509HostnameVerifier x509HostnameVerifier = new BrowserCompatHostnameVerifier();
+ protected CookieStore cookieStore;
// options to the default created http connection manager
protected int maxTotalConnections = 200;
@@ -274,6 +276,9 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
if (httpContext != null) {
endpoint.setHttpContext(httpContext);
}
+ if (endpoint.getCookieStore() == null) {
+ endpoint.setCookieStore(getCookieStore());
+ }
// register port on schema registry
registerPort(secure, x509HostnameVerifier, port, sslContextParameters);
@@ -450,7 +455,15 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
public void setConnectionTimeToLive(long connectionTimeToLive) {
this.connectionTimeToLive = connectionTimeToLive;
}
-
+
+ public CookieStore getCookieStore() {
+ return cookieStore;
+ }
+
+ public void setCookieStore(CookieStore cookieStore) {
+ this.cookieStore = cookieStore;
+ }
+
@Override
public void doStart() throws Exception {
super.doStart();
http://git-wip-us.apache.org/repos/asf/camel/blob/b3bc9bcc/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 fe1c583..d3170db 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
@@ -28,12 +28,16 @@ import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.spi.HeaderFilterStrategyAware;
import org.apache.camel.util.ObjectHelper;
import org.apache.http.HttpHost;
+import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
+import org.apache.http.client.protocol.ClientContext;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
+import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.DefaultedHttpContext;
import org.apache.http.protocol.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,6 +68,8 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
private boolean traceEnabled;
private String httpMethodRestrict;
private UrlRewrite urlRewrite;
+ private boolean clearExpiredCookies = true;
+ private CookieStore cookieStore;
public HttpEndpoint() {
}
@@ -124,7 +130,10 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
ObjectHelper.notNull(clientParams, "clientParams");
ObjectHelper.notNull(clientConnectionManager, "httpConnectionManager");
- HttpClient answer = new DefaultHttpClient(clientConnectionManager, getClientParams());
+ DefaultHttpClient answer = new DefaultHttpClient(clientConnectionManager, getClientParams());
+ if (cookieStore != null) {
+ answer.setCookieStore(cookieStore);
+ }
// configure http proxy from camelContext
if (ObjectHelper.isNotEmpty(getCamelContext().getProperty("http.proxyHost")) && ObjectHelper.isNotEmpty(getCamelContext().getProperty("http.proxyPort"))) {
@@ -150,6 +159,11 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
configurer.configureHttpClient(answer);
}
+ if (isBridgeEndpoint()) {
+ // need to use noop cookiestore as we do not want to keep cookies in memory
+ answer.setCookieStore(new NoopCookieStore());
+ }
+
LOG.debug("Created HttpClient {}", answer);
return answer;
}
@@ -347,4 +361,20 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
public void setUrlRewrite(UrlRewrite urlRewrite) {
this.urlRewrite = urlRewrite;
}
+
+ public boolean isClearExpiredCookies() {
+ return clearExpiredCookies;
+ }
+
+ public void setClearExpiredCookies(boolean clearExpiredCookies) {
+ this.clearExpiredCookies = clearExpiredCookies;
+ }
+
+ public CookieStore getCookieStore() {
+ return cookieStore;
+ }
+
+ public void setCookieStore(CookieStore cookieStore) {
+ this.cookieStore = cookieStore;
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/b3bc9bcc/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
index 135c0ec..91ba769 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
@@ -26,6 +26,7 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -57,6 +58,7 @@ import org.apache.http.entity.ContentType;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
@@ -82,6 +84,14 @@ public class HttpProducer extends DefaultProducer {
}
public void process(Exchange exchange) throws Exception {
+
+ if (getEndpoint().isClearExpiredCookies()) {
+ if (httpClient instanceof DefaultHttpClient) {
+ boolean cleared = ((DefaultHttpClient) httpClient).getCookieStore().clearExpired(new Date());
+ log.debug("Any expired cookies cleared: {}", cleared);
+ }
+ }
+
// if we bridge endpoint then we need to skip matching headers with the HTTP_QUERY to avoid sending
// duplicated headers to the receiver, so use this skipRequestHeaders as the list of headers to skip
Map<String, Object> skipRequestHeaders = null;
http://git-wip-us.apache.org/repos/asf/camel/blob/b3bc9bcc/components/camel-http4/src/main/java/org/apache/camel/component/http4/NoopCookieStore.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/NoopCookieStore.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/NoopCookieStore.java
new file mode 100644
index 0000000..85221d9
--- /dev/null
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/NoopCookieStore.java
@@ -0,0 +1,51 @@
+/**
+ * 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.http4;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.http.client.CookieStore;
+import org.apache.http.cookie.Cookie;
+
+/**
+ * A noop {@link CookieStore} used when bridging endpoints.
+ */
+public class NoopCookieStore implements CookieStore {
+
+ @Override
+ public void addCookie(Cookie cookie) {
+ // noop
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public List<Cookie> getCookies() {
+ return Collections.EMPTY_LIST;
+ }
+
+ @Override
+ public boolean clearExpired(Date date) {
+ return false;
+ }
+
+ @Override
+ public void clear() {
+ // noop
+ }
+}