You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by rf...@apache.org on 2011/09/29 06:29:11 UTC

svn commit: r1177159 - in /incubator/wink/trunk/wink-common/src: main/java/org/apache/wink/common/internal/registry/ main/java/org/apache/wink/common/internal/utils/ test/java/org/apache/wink/common/internal/providers/header/

Author: rfeng
Date: Thu Sep 29 04:29:10 2011
New Revision: 1177159

URL: http://svn.apache.org/viewvc?rev=1177159&view=rev
Log:
Enhance the Date conversion for headers/parameters

Modified:
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ValueConvertor.java
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/utils/HttpDateParser.java
    incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/header/DateHeaderDelegateTest.java

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ValueConvertor.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ValueConvertor.java?rev=1177159&r1=1177158&r2=1177159&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ValueConvertor.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/registry/ValueConvertor.java Thu Sep 29 04:29:10 2011
@@ -25,6 +25,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.sql.Date;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -39,6 +40,7 @@ import javax.ws.rs.core.PathSegment;
 
 import org.apache.wink.common.internal.i18n.Messages;
 import org.apache.wink.common.internal.utils.GenericsUtils;
+import org.apache.wink.common.internal.utils.HttpDateParser;
 import org.apache.wink.common.internal.utils.UriHelper;
 
 /**
@@ -257,6 +259,10 @@ public abstract class ValueConvertor {
             if (value == null) {
                 return null;
             }
+            if (constructor.getDeclaringClass() == Date.class) {
+                // The constructor of Date doesn't handle the HTTP date formats
+                return HttpDateParser.parseHttpDate(value);
+            }
             try {
                 return constructor.newInstance(value);
             } catch (IllegalArgumentException e) {

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/utils/HttpDateParser.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/utils/HttpDateParser.java?rev=1177159&r1=1177158&r2=1177159&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/utils/HttpDateParser.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/utils/HttpDateParser.java Thu Sep 29 04:29:10 2011
@@ -48,6 +48,13 @@ public final class HttpDateParser {
      * @throws IllegalArgumentException if parsing fails
      */
     public static Date parseHttpDate(String date) {
+        
+        // http://www.squid-cache.org/mail-archive/squid-users/200307/0122.html
+        // Some IE browsers send If-Modified-Since header with a length extension such as: Thu, 01 Sep 2011 00:48:38 GMT; length=347987
+        int index = date.indexOf(';');
+        if (index != -1) {
+            date = date.substring(0, index).trim();
+        }
 
         int indexOfComma = date.indexOf(',');
         try {

Modified: incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/header/DateHeaderDelegateTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/header/DateHeaderDelegateTest.java?rev=1177159&r1=1177158&r2=1177159&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/header/DateHeaderDelegateTest.java (original)
+++ incubator/wink/trunk/wink-common/src/test/java/org/apache/wink/common/internal/providers/header/DateHeaderDelegateTest.java Thu Sep 29 04:29:10 2011
@@ -44,13 +44,13 @@ public class DateHeaderDelegateTest {
      * The date example for format pattern for RFC 1036 - <EEEE, dd-MMM-yy
      * HH:mm:ss zzz>
      */
-    private static final String RFC1036_DATE                = "Sunday, 06-Nov-94 08:49:37 GMT";
+    private static final String RFC1036_DATE                = "Sunday, 06-Nov-94 08:49:37 GMT; length=347987";
 
     /**
      * The date example for format pattern for ANSI C asctime() - <EEE MMM d
      * HH:mm:ss yyyy>
      */
-    private static final String ANSI_C_ASCTIME_DATE         = "Sun Nov 6 08:49:37 1994";
+    private static final String ANSI_C_ASCTIME_DATE         = "Sun Nov 6 08:49:37 1994; length=347987";
 
     @Test
     public void testParseHeaderDelegate() throws ParseException {