Author: niallp
Date: Thu Jul 12 07:25:21 2007
New Revision: 555641

URL: http://svn.apache.org/viewvc?view=rev&rev=555641
Log:
BEANUTILS-271 - DateLocaleConverter does not always throw an Exception for 
invalid dates - thanks to Nico Hoogervorst

Modified:
    
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.java
    
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java

Modified: 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.java?view=diff&rev=555641&r1=555640&r2=555641
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/locale/converters/DateLocaleConverter.java
 Thu Jul 12 07:25:21 2007
@@ -17,11 +17,13 @@
 
 package org.apache.commons.beanutils.locale.converters;
 
+import org.apache.commons.beanutils.ConversionException;
 import org.apache.commons.beanutils.locale.BaseLocaleConverter;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
 
 import java.text.ParseException;
+import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
 import java.text.DateFormat;
 import java.text.DateFormatSymbols;
@@ -268,7 +270,17 @@
  
 
          // Parse the Date
-         return formatter.parse((String) value);
+        ParsePosition pos = new ParsePosition(0);
+        String strValue = value.toString();
+        Object parsedValue = formatter.parseObject(strValue, pos);
+        if (pos.getErrorIndex() > -1) {
+            throw new ConversionException("Error parsing date '" + value + "' 
at position="+ pos.getErrorIndex());
+        }
+        if (pos.getIndex() < strValue.length()) {
+            throw new ConversionException("Date '" + value + "' contains 
unparsed characters from position=" + pos.getIndex());
+        }
+
+        return parsedValue;
      }
    
      /**

Modified: 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java?view=diff&rev=555641&r1=555640&r2=555641
==============================================================================
--- 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java
 (original)
+++ 
jakarta/commons/proper/beanutils/trunk/src/test/org/apache/commons/beanutils/locale/converters/DateLocaleConverterTestCase.java
 Thu Jul 12 07:25:21 2007
@@ -409,5 +409,26 @@
 
     }
 
+    /**
+     * Test invalid date
+     */
+    public void testInvalidDate() {
+
+        converter = new DateLocaleConverter(defaultLocale);
+
+        try {
+            converter.convert("01/10/2004", "dd-MM-yyyy");
+        } catch (ConversionException e) {
+            assertEquals("Parse Error", "Error parsing date '01/10/2004' at 
position=2", e.getMessage());
+        }
+
+        try {
+            converter.convert("01-10-2004X", "dd-MM-yyyy");
+        } catch (ConversionException e) {
+            assertEquals("Parse Length", "Date '01-10-2004X' contains unparsed 
characters from position=10", e.getMessage());
+        }
+
+    }
+
 }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to