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;
        }
 

Reply via email to