You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2013/04/04 10:57:37 UTC

svn commit: r1464366 [2/2] - in /httpcomponents/httpclient/trunk: httpclient-cache/src/main/java/org/apache/http/client/cache/ httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ httpclient-cache/src/test/java/org/apache/http/client/cache...

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCachingPolicy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCachingPolicy.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCachingPolicy.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseCachingPolicy.java Thu Apr  4 08:57:36 2013
@@ -26,8 +26,6 @@
  */
 package org.apache.http.impl.client.cache;
 
-import static org.apache.http.impl.cookie.DateUtils.formatDate;
-
 import java.util.Date;
 import java.util.Random;
 
@@ -36,6 +34,7 @@ import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
 import org.apache.http.ProtocolVersion;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.message.BasicHttpRequest;
 import org.apache.http.message.BasicHttpResponse;
 import org.apache.http.message.BasicStatusLine;
@@ -66,7 +65,7 @@ public class TestResponseCachingPolicy {
         request = new BasicHttpRequest("GET","/",HTTP_1_1);
         response = new BasicHttpResponse(
                 new BasicStatusLine(HTTP_1_1, HttpStatus.SC_OK, ""));
-        response.setHeader("Date", formatDate(new Date()));
+        response.setHeader("Date", DateUtils.formatDate(new Date()));
         response.setHeader("Content-Length", "0");
     }
 
@@ -172,7 +171,7 @@ public class TestResponseCachingPolicy {
     public void testNon206WithExplicitExpiresIsCacheable() {
         final int status = getRandomStatus();
         response.setStatusCode(status);
-        response.setHeader("Expires", formatDate(new Date()));
+        response.setHeader("Expires", DateUtils.formatDate(new Date()));
         Assert.assertTrue(policy.isResponseCacheable("GET", response));
     }
 
@@ -284,7 +283,7 @@ public class TestResponseCachingPolicy {
 
         response = new BasicHttpResponse(
                 new BasicStatusLine(HTTP_1_1, HttpStatus.SC_OK, ""));
-        response.setHeader("Date", formatDate(new Date()));
+        response.setHeader("Date", DateUtils.formatDate(new Date()));
         response.addHeader("Cache-Control", "no-transform");
         response.setHeader("Content-Length", "0");
 
@@ -340,8 +339,8 @@ public class TestResponseCachingPolicy {
 
     @Test
     public void testResponsesWithMultipleDateHeadersAreNotCacheable() {
-        response.addHeader("Date", formatDate(now));
-        response.addHeader("Date", formatDate(sixSecondsAgo));
+        response.addHeader("Date", DateUtils.formatDate(now));
+        response.addHeader("Date", DateUtils.formatDate(sixSecondsAgo));
         Assert.assertFalse(policy.isResponseCacheable("GET", response));
     }
 
@@ -355,8 +354,8 @@ public class TestResponseCachingPolicy {
     public void testResponsesWithMultipleExpiresHeadersAreNotCacheable() {
         final Date now = new Date();
         final Date sixSecondsAgo = new Date(now.getTime() - 6 * 1000L);
-        response.addHeader("Expires", formatDate(now));
-        response.addHeader("Expires", formatDate(sixSecondsAgo));
+        response.addHeader("Expires", DateUtils.formatDate(now));
+        response.addHeader("Expires", DateUtils.formatDate(sixSecondsAgo));
         Assert.assertFalse(policy.isResponseCacheable("GET", response));
     }
 
@@ -394,8 +393,8 @@ public class TestResponseCachingPolicy {
     @Test
     public void testResponsesToGETWithQueryParamsAndExplicitCachingAreCacheable() {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
 
@@ -403,8 +402,8 @@ public class TestResponseCachingPolicy {
     public void testResponsesToGETWithQueryParamsAndExplicitCachingAreCacheableEvenWhen1_0QueryCachingDisabled() {
         policy = new ResponseCachingPolicy(0, true, true);
         request = new BasicHttpRequest("GET", "/foo?s=bar");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
 
@@ -427,8 +426,8 @@ public class TestResponseCachingPolicy {
     public void getsWithQueryParametersDirectlyFrom1_0OriginsAreCacheableWithExpires() {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
         response = new BasicHttpResponse(HttpVersion.HTTP_1_0, HttpStatus.SC_OK, "OK");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
 
@@ -437,8 +436,8 @@ public class TestResponseCachingPolicy {
         policy = new ResponseCachingPolicy(0, true, true);
         request = new BasicHttpRequest("GET", "/foo?s=bar");
         response = new BasicHttpResponse(HttpVersion.HTTP_1_0, HttpStatus.SC_OK, "OK");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         Assert.assertFalse(policy.isResponseCacheable(request, response));
     }
 
@@ -454,8 +453,8 @@ public class TestResponseCachingPolicy {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
         final Date now = new Date();
         final Date tenSecondsFromNow = new Date(now.getTime() + 10 * 1000L);
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         response.setHeader("Via", "1.0 someproxy");
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
@@ -466,8 +465,8 @@ public class TestResponseCachingPolicy {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
         final Date now = new Date();
         final Date tenSecondsFromNow = new Date(now.getTime() + 10 * 1000L);
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         response.setHeader("Via", "1.0 someproxy");
         Assert.assertFalse(policy.isResponseCacheable(request, response));
     }
@@ -475,8 +474,8 @@ public class TestResponseCachingPolicy {
     @Test
     public void getsWithQueryParametersFrom1_0OriginsViaExplicitProxiesAreCacheableWithExpires() {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         response.setHeader("Via", "HTTP/1.0 someproxy");
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
@@ -485,8 +484,8 @@ public class TestResponseCachingPolicy {
     public void getsWithQueryParametersFrom1_0OriginsViaExplicitProxiesCanNotBeCacheableEvenWithExpires() {
         policy = new ResponseCachingPolicy(0, true, true);
         request = new BasicHttpRequest("GET", "/foo?s=bar");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         response.setHeader("Via", "HTTP/1.0 someproxy");
         Assert.assertFalse(policy.isResponseCacheable(request, response));
     }
@@ -495,24 +494,24 @@ public class TestResponseCachingPolicy {
     public void getsWithQueryParametersFrom1_1OriginsVia1_0ProxiesAreCacheableWithExpires() {
         request = new BasicHttpRequest("GET", "/foo?s=bar");
         response = new BasicHttpResponse(HttpVersion.HTTP_1_0, HttpStatus.SC_OK, "OK");
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(tenSecondsFromNow));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(tenSecondsFromNow));
         response.setHeader("Via", "1.1 someproxy");
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }
 
     @Test
     public void notCacheableIfExpiresEqualsDateAndNoCacheControl() {
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(now));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(now));
         response.removeHeaders("Cache-Control");
         Assert.assertFalse(policy.isResponseCacheable(request, response));
     }
 
     @Test
     public void notCacheableIfExpiresPrecedesDateAndNoCacheControl() {
-        response.setHeader("Date", formatDate(now));
-        response.setHeader("Expires", formatDate(sixSecondsAgo));
+        response.setHeader("Date", DateUtils.formatDate(now));
+        response.setHeader("Expires", DateUtils.formatDate(sixSecondsAgo));
         response.removeHeaders("Cache-Control");
         Assert.assertFalse(policy.isResponseCacheable(request, response));
     }
@@ -520,7 +519,7 @@ public class TestResponseCachingPolicy {
     @Test
     public void otherStatusCodesAreCacheableWithExplicitCachingHeaders() {
         response.setStatusCode(HttpStatus.SC_NOT_FOUND);
-        response.setHeader("Date", formatDate(now));
+        response.setHeader("Date", DateUtils.formatDate(now));
         response.setHeader("Cache-Control","max-age=300");
         Assert.assertTrue(policy.isResponseCacheable(request, response));
     }

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseProtocolCompliance.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseProtocolCompliance.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseProtocolCompliance.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestResponseProtocolCompliance.java Thu Apr  4 08:57:36 2013
@@ -41,9 +41,9 @@ import org.apache.http.client.ClientProt
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpHead;
 import org.apache.http.client.methods.HttpRequestWrapper;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.entity.InputStreamEntity;
-import org.apache.http.impl.cookie.DateUtils;
 import org.apache.http.message.BasicHttpEntityEnclosingRequest;
 import org.apache.http.message.BasicHttpResponse;
 import org.junit.Before;

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestWarningValue.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestWarningValue.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestWarningValue.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestWarningValue.java Thu Apr  4 08:57:36 2013
@@ -29,7 +29,7 @@ package org.apache.http.impl.client.cach
 import java.util.Date;
 
 import org.apache.http.Header;
-import org.apache.http.impl.cookie.DateUtils;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.message.BasicHeader;
 import org.junit.Assert;
 import org.junit.Test;

Copied: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/DateUtils.java (from r1464365, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/DateUtils.java?p2=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/DateUtils.java&p1=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java&r1=1464365&r2=1464366&rev=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/DateUtils.java Thu Apr  4 08:57:36 2013
@@ -25,7 +25,7 @@
  *
  */
 
-package org.apache.http.impl.cookie;
+package org.apache.http.client.utils;
 
 import java.lang.ref.SoftReference;
 import java.text.DateFormat;
@@ -92,12 +92,9 @@ public final class DateUtils {
      *
      * @param dateValue the date value to parse
      *
-     * @return the parsed date
-     *
-     * @throws DateParseException if the value could not be parsed using any of the
-     * supported date formats
+     * @return the parsed date or null if input could not be parsed
      */
-    public static Date parseDate(final String dateValue) throws DateParseException {
+    public static Date parseDate(final String dateValue) {
         return parseDate(dateValue, null, null);
     }
 
@@ -109,10 +106,9 @@ public final class DateUtils {
      *
      * @return the parsed date
      *
-     * @throws DateParseException if none of the dataFormats could parse the dateValue
+     * @return the parsed date or null if input could not be parsed
      */
-    public static Date parseDate(final String dateValue, final String[] dateFormats)
-        throws DateParseException {
+    public static Date parseDate(final String dateValue, final String[] dateFormats) {
         return parseDate(dateValue, dateFormats, null);
     }
 
@@ -126,15 +122,13 @@ public final class DateUtils {
      * be <code>null</code>. When <code>null</code> is given as a parameter, year
      * <code>2000</code> will be used.
      *
-     * @return the parsed date
-     *
-     * @throws DateParseException if none of the dataFormats could parse the dateValue
+     * @return the parsed date or null if input could not be parsed
      */
     public static Date parseDate(
         String dateValue,
         String[] dateFormats,
         Date startDate
-    ) throws DateParseException {
+    ) {
         Args.notNull(dateValue, "Date value");
         if (dateFormats == null) {
             dateFormats = DEFAULT_PATTERNS;
@@ -160,9 +154,7 @@ public final class DateUtils {
                 return result;
             }
         }
-
-        // we were unable to parse the date
-        throw new DateParseException("Unable to parse the date " + dateValue);
+        return null;
     }
 
     /**

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BasicExpiresHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BasicExpiresHandler.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BasicExpiresHandler.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BasicExpiresHandler.java Thu Apr  4 08:57:36 2013
@@ -26,12 +26,14 @@
  */
 package org.apache.http.impl.cookie;
 
+import java.util.Date;
+
 import org.apache.http.annotation.Immutable;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.MalformedCookieException;
 import org.apache.http.cookie.SetCookie;
 import org.apache.http.util.Args;
 
-
 /**
  *
  * @since 4.0
@@ -53,12 +55,12 @@ public class BasicExpiresHandler extends
         if (value == null) {
             throw new MalformedCookieException("Missing value for expires attribute");
         }
-        try {
-            cookie.setExpiryDate(DateUtils.parseDate(value, this.datepatterns));
-        } catch (final DateParseException dpe) {
+        final Date expiry = DateUtils.parseDate(value, this.datepatterns);
+        if (expiry == null) {
             throw new MalformedCookieException("Unable to parse expires attribute: "
-                + value);
+                    + value);
         }
+        cookie.setExpiryDate(expiry);
     }
 
 }

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BrowserCompatSpec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BrowserCompatSpec.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BrowserCompatSpec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/BrowserCompatSpec.java Thu Apr  4 08:57:36 2013
@@ -34,6 +34,7 @@ import org.apache.http.FormattedHeader;
 import org.apache.http.Header;
 import org.apache.http.HeaderElement;
 import org.apache.http.annotation.NotThreadSafe;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.ClientCookie;
 import org.apache.http.cookie.Cookie;
 import org.apache.http.cookie.CookieOrigin;
@@ -46,6 +47,7 @@ import org.apache.http.message.ParserCur
 import org.apache.http.util.Args;
 import org.apache.http.util.CharArrayBuffer;
 
+
 /**
  * Cookie specification that strives to closely mimic (mis)behavior of
  * common web browser applications such as Microsoft Internet Explorer

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/DateUtils.java Thu Apr  4 08:57:36 2013
@@ -27,19 +27,11 @@
 
 package org.apache.http.impl.cookie;
 
-import java.lang.ref.SoftReference;
-import java.text.DateFormat;
-import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.http.annotation.Immutable;
-import org.apache.http.util.Args;
 
 /**
  * A utility class for parsing and formatting HTTP dates as used in cookies and
@@ -48,44 +40,31 @@ import org.apache.http.util.Args;
  *
  *
  * @since 4.0
+ *
+ * @deprecated (4.3) Use {@link org.apache.http.client.utils.DateUtils}.
  */
+@Deprecated
 @Immutable
 public final class DateUtils {
 
     /**
      * Date format pattern used to parse HTTP date headers in RFC 1123 format.
      */
-    public static final String PATTERN_RFC1123 = "EEE, dd MMM yyyy HH:mm:ss zzz";
+    public static final String PATTERN_RFC1123 = org.apache.http.client.utils.DateUtils.PATTERN_RFC1123;
 
     /**
      * Date format pattern used to parse HTTP date headers in RFC 1036 format.
      */
-    public static final String PATTERN_RFC1036 = "EEE, dd-MMM-yy HH:mm:ss zzz";
+    public static final String PATTERN_RFC1036 = org.apache.http.client.utils.DateUtils.PATTERN_RFC1036;
 
     /**
      * Date format pattern used to parse HTTP date headers in ANSI C
      * <code>asctime()</code> format.
      */
-    public static final String PATTERN_ASCTIME = "EEE MMM d HH:mm:ss yyyy";
-
-    private static final String[] DEFAULT_PATTERNS = new String[] {
-        PATTERN_RFC1123,
-        PATTERN_RFC1036,
-        PATTERN_ASCTIME
-    };
-
-    private static final Date DEFAULT_TWO_DIGIT_YEAR_START;
+    public static final String PATTERN_ASCTIME = org.apache.http.client.utils.DateUtils.PATTERN_ASCTIME;
 
     public static final TimeZone GMT = TimeZone.getTimeZone("GMT");
 
-    static {
-        final Calendar calendar = Calendar.getInstance();
-        calendar.setTimeZone(GMT);
-        calendar.set(2000, Calendar.JANUARY, 1, 0, 0, 0);
-        calendar.set(Calendar.MILLISECOND, 0);
-        DEFAULT_TWO_DIGIT_YEAR_START = calendar.getTime();
-    }
-
     /**
      * Parses a date value.  The formats used for parsing the date value are retrieved from
      * the default http params.
@@ -131,38 +110,15 @@ public final class DateUtils {
      * @throws DateParseException if none of the dataFormats could parse the dateValue
      */
     public static Date parseDate(
-        String dateValue,
-        String[] dateFormats,
-        Date startDate
+        final String dateValue,
+        final String[] dateFormats,
+        final Date startDate
     ) throws DateParseException {
-        Args.notNull(dateValue, "Date value");
-        if (dateFormats == null) {
-            dateFormats = DEFAULT_PATTERNS;
-        }
-        if (startDate == null) {
-            startDate = DEFAULT_TWO_DIGIT_YEAR_START;
+        final Date d = org.apache.http.client.utils.DateUtils.parseDate(dateValue, dateFormats, startDate);
+        if (d == null) {
+            throw new DateParseException("Unable to parse the date " + dateValue);
         }
-        // trim single quotes around date if present
-        // see issue #5279
-        if (dateValue.length() > 1
-            && dateValue.startsWith("'")
-            && dateValue.endsWith("'")
-        ) {
-            dateValue = dateValue.substring (1, dateValue.length() - 1);
-        }
-
-        for (final String dateFormat : dateFormats) {
-            final SimpleDateFormat dateParser = DateFormatHolder.formatFor(dateFormat);
-            dateParser.set2DigitYearStart(startDate);
-            final ParsePosition pos = new ParsePosition(0);
-            final Date result = dateParser.parse(dateValue, pos);
-            if (pos.getIndex() != 0) {
-                return result;
-            }
-        }
-
-        // we were unable to parse the date
-        throw new DateParseException("Unable to parse the date " + dateValue);
+        return d;
     }
 
     /**
@@ -174,7 +130,7 @@ public final class DateUtils {
      * @see #PATTERN_RFC1123
      */
     public static String formatDate(final Date date) {
-        return formatDate(date, PATTERN_RFC1123);
+        return org.apache.http.client.utils.DateUtils.formatDate(date);
     }
 
     /**
@@ -191,79 +147,11 @@ public final class DateUtils {
      * @see SimpleDateFormat
      */
     public static String formatDate(final Date date, final String pattern) {
-        Args.notNull(date, "Date");
-        Args.notNull(pattern, "Pattern");
-        final SimpleDateFormat formatter = DateFormatHolder.formatFor(pattern);
-        return formatter.format(date);
-    }
-
-    /**
-     * Clears thread-local variable containing {@link DateFormat} cache.
-     *
-     * @since 4.3
-     */
-    public static void clearThreadLocal() {
-        DateFormatHolder.clearThreadLocal();
+        return org.apache.http.client.utils.DateUtils.formatDate(date, pattern);
     }
 
     /** This class should not be instantiated. */
     private DateUtils() {
     }
 
-    /**
-     * A factory for {@link SimpleDateFormat}s. The instances are stored in a
-     * threadlocal way because SimpleDateFormat is not threadsafe as noted in
-     * {@link SimpleDateFormat its javadoc}.
-     *
-     */
-    final static class DateFormatHolder {
-
-        private static final ThreadLocal<SoftReference<Map<String, SimpleDateFormat>>>
-            THREADLOCAL_FORMATS = new ThreadLocal<SoftReference<Map<String, SimpleDateFormat>>>() {
-
-            @Override
-            protected SoftReference<Map<String, SimpleDateFormat>> initialValue() {
-                return new SoftReference<Map<String, SimpleDateFormat>>(
-                        new HashMap<String, SimpleDateFormat>());
-            }
-
-        };
-
-        /**
-         * creates a {@link SimpleDateFormat} for the requested format string.
-         *
-         * @param pattern
-         *            a non-<code>null</code> format String according to
-         *            {@link SimpleDateFormat}. The format is not checked against
-         *            <code>null</code> since all paths go through
-         *            {@link DateUtils}.
-         * @return the requested format. This simple dateformat should not be used
-         *         to {@link SimpleDateFormat#applyPattern(String) apply} to a
-         *         different pattern.
-         */
-        public static SimpleDateFormat formatFor(final String pattern) {
-            final SoftReference<Map<String, SimpleDateFormat>> ref = THREADLOCAL_FORMATS.get();
-            Map<String, SimpleDateFormat> formats = ref.get();
-            if (formats == null) {
-                formats = new HashMap<String, SimpleDateFormat>();
-                THREADLOCAL_FORMATS.set(
-                        new SoftReference<Map<String, SimpleDateFormat>>(formats));
-            }
-
-            SimpleDateFormat format = formats.get(pattern);
-            if (format == null) {
-                format = new SimpleDateFormat(pattern, Locale.US);
-                format.setTimeZone(TimeZone.getTimeZone("GMT"));
-                formats.put(pattern, format);
-            }
-
-            return format;
-        }
-
-        public static void clearThreadLocal() {
-            THREADLOCAL_FORMATS.remove();
-        }
-
-    }
-
 }

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/RFC2109Spec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/RFC2109Spec.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/RFC2109Spec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/cookie/RFC2109Spec.java Thu Apr  4 08:57:36 2013
@@ -34,6 +34,7 @@ import java.util.List;
 import org.apache.http.Header;
 import org.apache.http.HeaderElement;
 import org.apache.http.annotation.NotThreadSafe;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.ClientCookie;
 import org.apache.http.cookie.Cookie;
 import org.apache.http.cookie.CookieOrigin;

Copied: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java (from r1464365, httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestDateUtils.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java?p2=httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java&p1=httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestDateUtils.java&r1=1464365&r2=1464366&rev=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestDateUtils.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java Thu Apr  4 08:57:36 2013
@@ -25,11 +25,12 @@
  *
  */
 
-package org.apache.http.impl.cookie;
+package org.apache.http.client.utils;
 
 import java.util.Calendar;
 import java.util.Date;
 
+import org.apache.http.impl.cookie.DateParseException;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -58,6 +59,11 @@ public class TestDateUtils {
     }
 
     @Test
+    public void testMalformedDate() {
+        Assert.assertNull(DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", new String[] {}, null));
+    }
+
+    @Test
     public void testInvalidInput() throws Exception {
         try {
             DateUtils.parseDate(null, null, null);
@@ -66,12 +72,6 @@ public class TestDateUtils {
             // expected
         }
         try {
-            DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", new String[] {}, null);
-            Assert.fail("DateParseException should habe been thrown");
-        } catch (final DateParseException ex) {
-            // expected
-        }
-        try {
             DateUtils.formatDate(null);
             Assert.fail("IllegalArgumentException should habe been thrown");
         } catch (final IllegalArgumentException ex) {

Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestDateUtils.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBasicCookieAttribHandlers.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBasicCookieAttribHandlers.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBasicCookieAttribHandlers.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBasicCookieAttribHandlers.java Thu Apr  4 08:57:36 2013
@@ -33,6 +33,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.Locale;
 
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.CookieAttributeHandler;
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.MalformedCookieException;

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBrowserCompatSpec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBrowserCompatSpec.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBrowserCompatSpec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestBrowserCompatSpec.java Thu Apr  4 08:57:36 2013
@@ -32,6 +32,7 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.http.Header;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.ClientCookie;
 import org.apache.http.cookie.Cookie;
 import org.apache.http.cookie.CookieOrigin;

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestCookieRFC2109Spec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestCookieRFC2109Spec.java?rev=1464366&r1=1464365&r2=1464366&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestCookieRFC2109Spec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/cookie/TestCookieRFC2109Spec.java Thu Apr  4 08:57:36 2013
@@ -31,6 +31,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.http.Header;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.cookie.ClientCookie;
 import org.apache.http.cookie.Cookie;
 import org.apache.http.cookie.CookieOrigin;