Return-Path: Delivered-To: apmail-hc-commits-archive@www.apache.org Received: (qmail 98798 invoked from network); 23 Jul 2010 19:46:44 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 23 Jul 2010 19:46:44 -0000 Received: (qmail 93840 invoked by uid 500); 23 Jul 2010 19:46:44 -0000 Delivered-To: apmail-hc-commits-archive@hc.apache.org Received: (qmail 93798 invoked by uid 500); 23 Jul 2010 19:46:44 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 93791 invoked by uid 99); 23 Jul 2010 19:46:44 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 23 Jul 2010 19:46:44 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 23 Jul 2010 19:46:41 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id E37F92388A56; Fri, 23 Jul 2010 19:45:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r967227 - in /httpcomponents/httpclient/trunk: RELEASE_NOTES.txt httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java Date: Fri, 23 Jul 2010 19:45:47 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100723194547.E37F92388A56@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: olegk Date: Fri Jul 23 19:45:47 2010 New Revision: 967227 URL: http://svn.apache.org/viewvc?rev=967227&view=rev Log: HTTPCLIENT-969: BasicCookieStore#getCookies() to return a copy of Cookie list Contributed by David Smiley Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=967227&r1=967226&r2=967227&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original) +++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Fri Jul 23 19:45:47 2010 @@ -1,6 +1,9 @@ Changes since 4.1 ALPHA2 ------------------- +* [HTTPCLIENT-969] BasicCookieStore#getCookies() to return a copy of Cookie list + Contributed by David Smiley + * [HTTPCLIENT-965] Fixed problem with cache not honoring must-revalidate or proxy-revalidate Cache-Control directives. Contributed by Jonathan Moore Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java?rev=967227&r1=967226&r2=967227&view=diff ============================================================================== --- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java (original) +++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/BasicCookieStore.java Fri Jul 23 19:45:47 2010 @@ -27,12 +27,7 @@ package org.apache.http.impl.client; import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.Iterator; -import java.util.List; +import java.util.*; import org.apache.http.annotation.GuardedBy; import org.apache.http.annotation.ThreadSafe; @@ -50,23 +45,14 @@ import org.apache.http.cookie.CookieIden @ThreadSafe public class BasicCookieStore implements CookieStore, Serializable { - private static final long serialVersionUID = -1113466491038527240L; + private static final long serialVersionUID = -7581093305228232025L; @GuardedBy("this") - private final ArrayList cookies; + private final TreeSet cookies; - @GuardedBy("this") - private final Comparator cookieComparator; - - // -------------------------------------------------------- Class Variables - - /** - * Default constructor. - */ public BasicCookieStore() { super(); - this.cookies = new ArrayList(); - this.cookieComparator = new CookieIdentityComparator(); + this.cookies = new TreeSet(new CookieIdentityComparator()); } /** @@ -82,12 +68,7 @@ public class BasicCookieStore implements public synchronized void addCookie(Cookie cookie) { if (cookie != null) { // first remove any old cookie that is equivalent - for (Iterator it = cookies.iterator(); it.hasNext();) { - if (cookieComparator.compare(cookie, it.next()) == 0) { - it.remove(); - break; - } - } + cookies.remove(cookie); if (!cookie.isExpired(new Date())) { cookies.add(cookie); } @@ -119,7 +100,8 @@ public class BasicCookieStore implements * @return an array of {@link Cookie cookies}. */ public synchronized List getCookies() { - return Collections.unmodifiableList(this.cookies); + //create defensive copy so it won't be concurrently modified + return new ArrayList(cookies); } /** @@ -144,11 +126,6 @@ public class BasicCookieStore implements return removed; } - @Override - public String toString() { - return cookies.toString(); - } - /** * Clears all cookies. */ @@ -156,4 +133,9 @@ public class BasicCookieStore implements cookies.clear(); } + @Override + public synchronized String toString() { + return cookies.toString(); + } + }