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
+    }
+}