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

Reply via email to