You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/05/25 11:26:54 UTC

svn commit: r541595 - in /cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml: XMLDecoder.java XMLEncoder.java XMLUtil.java

Author: aadamchik
Date: Fri May 25 02:26:52 2007
New Revision: 541595

URL: http://svn.apache.org/viewvc?view=rev&rev=541595
Log:
CAY-792: Date has issues with different locales when using XMLEncoder/XMLDecoder - applied patch with some cleanup and backwards compatibility checks

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLDecoder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLEncoder.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLUtil.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLDecoder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLDecoder.java?view=diff&rev=541595&r1=541594&r2=541595
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLDecoder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLDecoder.java Fri May 25 02:26:52 2007
@@ -22,6 +22,7 @@
 
 import java.io.Reader;
 import java.lang.reflect.Constructor;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -245,7 +246,21 @@
 
             // handle dates using hardcoded format....
             if (Date.class.isAssignableFrom(objectClass)) {
-                return new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy").parse(text);
+                try {
+                    return new SimpleDateFormat(XMLUtil.DEFAULT_DATE_FORMAT).parse(text);
+                }
+                catch (ParseException e) {
+                    // handle pre-3.0 default data format for backwards compatibilty
+                    
+                    try {
+                        return new SimpleDateFormat("E MMM dd hh:mm:ss z yyyy").parse(text);
+                    }
+                    catch (ParseException eOld) {
+                        
+                        // rethrow the original exception
+                        throw e;
+                    }
+                }
             }
 
             // handle all other primitive types...

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLEncoder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLEncoder.java?view=diff&rev=541595&r1=541594&r2=541595
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLEncoder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLEncoder.java Fri May 25 02:26:52 2007
@@ -20,7 +20,9 @@
 package org.apache.cayenne.xml;
 
 import java.io.StringWriter;
+import java.text.SimpleDateFormat;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Iterator;
 
 import javax.xml.transform.OutputKeys;
@@ -227,7 +229,15 @@
             node.setAttribute("type", object.getClass().getName());
         }
 
-        node.appendChild(document.createTextNode(object.toString()));
+        // Dates need special handling
+        if (object instanceof Date) {
+            SimpleDateFormat sdf = new SimpleDateFormat(XMLUtil.DEFAULT_DATE_FORMAT);
+            node.appendChild(document.createTextNode(sdf.format(object)));
+        }
+        else {
+            node.appendChild(document.createTextNode(object.toString()));
+        }
+
         pop();
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLUtil.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLUtil.java?view=diff&rev=541595&r1=541594&r2=541595
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLUtil.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/xml/XMLUtil.java Fri May 25 02:26:52 2007
@@ -41,6 +41,9 @@
  * @author Andrus Adamchik
  */
 class XMLUtil {
+    
+    // note that per CAY-792, to be locale-safe the format must not contain literal parts
+    static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss zzz"; 
 
     static DocumentBuilderFactory sharedFactory;