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;