Updated Branches: refs/heads/master 6b5bcf651 -> 7d139086f
WICKET-4839 ConverterLocator should create a new instance for all date based converters Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/7d139086 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/7d139086 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/7d139086 Branch: refs/heads/master Commit: 7d139086fe0cd036d90fd7a32209776c1653ec5c Parents: cdc0a87 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Fri Nov 2 17:04:44 2012 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Fri Nov 2 17:04:44 2012 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/ConverterLocator.java | 34 ++++++++++++--- 1 files changed, 28 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/7d139086/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java index e2d9cc6..5e48a83 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java +++ b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java @@ -173,11 +173,6 @@ public class ConverterLocator implements IConverterLocator set(Long.class, LongConverter.INSTANCE); set(Short.TYPE, ShortConverter.INSTANCE); set(Short.class, ShortConverter.INSTANCE); - set(Date.class, new DateConverter()); - set(Calendar.class, new CalendarConverter()); - set(java.sql.Date.class, new SqlDateConverter()); - set(java.sql.Time.class, new SqlTimeConverter()); - set(java.sql.Timestamp.class, new SqlTimestampConverter()); set(BigDecimal.class, new BigDecimalConverter()); } @@ -194,7 +189,34 @@ public class ConverterLocator implements IConverterLocator public final <C> IConverter<C> get(Class<C> c) { @SuppressWarnings("unchecked") - IConverter<C> converter = (IConverter<C>)classToConverter.get(c.getName()); + final IConverter<C> converter; + + // Date based converters work with thread unsafe DateFormats and + // a new instance should be created for each usage + if (Date.class.equals(c)) + { + converter = (IConverter<C>) new DateConverter(); + } + else if (java.sql.Date.class.equals(c)) + { + converter = (IConverter<C>) new SqlDateConverter(); + } + else if (java.sql.Time.class.equals(c)) + { + converter = (IConverter<C>) new SqlTimeConverter(); + } + else if (java.sql.Timestamp.class.equals(c)) + { + converter = (IConverter<C>) new SqlTimestampConverter(); + } + else if (Calendar.class.equals(c)) + { + converter = (IConverter<C>) new CalendarConverter(); + } + else + { + converter = (IConverter<C>)classToConverter.get(c.getName()); + } return converter; }
