Updated Branches: refs/heads/master c3ede367d -> f9bcd82ce
WICKET-4694 ClassCastException in SqlDateConverter Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/f9bcd82c Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f9bcd82c Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f9bcd82c Branch: refs/heads/master Commit: f9bcd82ceef6f1a0c1b4c81c2525eb170106f51e Parents: c3ede36 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Aug 6 13:20:00 2012 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Aug 6 13:20:00 2012 +0300 ---------------------------------------------------------------------- .../util/convert/converter/SqlDateConverter.java | 33 ++++++++++++++- 1 files changed, 32 insertions(+), 1 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/f9bcd82c/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java ---------------------------------------------------------------------- diff --git a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java index 99340cd..c86c508 100644 --- a/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java +++ b/wicket-util/src/main/java/org/apache/wicket/util/convert/converter/SqlDateConverter.java @@ -18,6 +18,8 @@ package org.apache.wicket.util.convert.converter; import java.sql.Date; import java.text.DateFormat; +import java.text.Format; +import java.text.ParsePosition; import java.util.Locale; import org.apache.wicket.util.string.Strings; @@ -41,7 +43,8 @@ public class SqlDateConverter extends AbstractConverter<Date> } else { - return new Date(parse(getDateFormat(locale), value, locale).getTime()); + java.util.Date date = parseDate(getDateFormat(locale), value, locale); + return new Date(date.getTime()); } } @@ -80,4 +83,32 @@ public class SqlDateConverter extends AbstractConverter<Date> { return Date.class; } + + /** + * Parses a value using one of the java.util.text format classes. + * + * @param format + * The format to use + * @param value + * The object to parse + * @param locale + * The locale to use to parse. + * @return The object + * @throws org.apache.wicket.util.convert.ConversionException + * Thrown if parsing fails + */ + @SuppressWarnings("unchecked") + private java.util.Date parseDate(final Format format, final Object value, final Locale locale) + { + final ParsePosition position = new ParsePosition(0); + final String stringValue = value.toString(); + final java.util.Date result = (java.util.Date)format.parseObject(stringValue, position); + + if (position.getIndex() != stringValue.length()) + { + throw newConversionException("Cannot parse '" + value + "' using format " + format, + value, locale).setFormat(format); + } + return result; + } }
