Updated Branches: refs/heads/wicket-1.5.x ac6e57484 -> f5e22ae3b
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/f5e22ae3 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/f5e22ae3 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/f5e22ae3 Branch: refs/heads/wicket-1.5.x Commit: f5e22ae3bde1e2a292b25a4ea3e052b3dffaefff Parents: ac6e574 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:05: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/f5e22ae3/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 ebbe7df..c4e9bdd 100644 --- a/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java +++ b/wicket-core/src/main/java/org/apache/wicket/ConverterLocator.java @@ -168,11 +168,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()); } @@ -189,7 +184,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; }
