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 {