Joda Time and XStream
10/12/10 00:41
I got a mail requesting the code for the XStream and
Joda Time converter. It appears that this is still an
issue with XStream. I didn’t have to have the code
for this as I wrote it for the Norwegian Research
Council, but that was some time back, but that is
good as I could write it again with a newer Joda Time
version.
Here it is as a test class (need to split into some modules, but basically this is what does the trick:
(Seems like my blog software don’t want to pretty format this code...)
package test;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Assert;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.SingleValueConverter;
public class WeightTest {
@Test
public void test_joda_time_xstream() {
XStream xStream = getXStream();
Convert test = new Convert();
String xml = xStream.toXML(test);
System.out.println(xml);
Convert testAfter = (Convert) xStream.fromXML(xml);
Assert.assertEquals(test.localDate, testAfter.localDate);
Assert.assertEquals(test.dateTime, testAfter.dateTime);
}
private XStream getXStream() {
XStream xStream = new XStream();
SingleValueConverter localDateConverter = new SingleValueConverter() {
@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(LocalDate.class);
}
@Override
public String toString(Object arg0) {
return arg0.toString();
}
@Override
public Object fromString(String arg0) {
String[] parts = arg0.split("-");
return new LocalDate(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
}
};
xStream.registerConverter(localDateConverter);
SingleValueConverter datetimeConverter = new SingleValueConverter() {
@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(DateTime.class);
}
@Override
public String toString(Object arg0) {
return arg0.toString();
}
@Override
public Object fromString(String arg0) {
return ISODateTimeFormat.dateTimeParser().parseDateTime(arg0);
}
};
xStream.registerConverter(datetimeConverter);
return xStream;
}
static class Convert {
public LocalDate localDate = new LocalDate();
public DateTime dateTime = new DateTime();
}
}
Here it is as a test class (need to split into some modules, but basically this is what does the trick:
(Seems like my blog software don’t want to pretty format this code...)
package test;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Assert;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.SingleValueConverter;
public class WeightTest {
@Test
public void test_joda_time_xstream() {
XStream xStream = getXStream();
Convert test = new Convert();
String xml = xStream.toXML(test);
System.out.println(xml);
Convert testAfter = (Convert) xStream.fromXML(xml);
Assert.assertEquals(test.localDate, testAfter.localDate);
Assert.assertEquals(test.dateTime, testAfter.dateTime);
}
private XStream getXStream() {
XStream xStream = new XStream();
SingleValueConverter localDateConverter = new SingleValueConverter() {
@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(LocalDate.class);
}
@Override
public String toString(Object arg0) {
return arg0.toString();
}
@Override
public Object fromString(String arg0) {
String[] parts = arg0.split("-");
return new LocalDate(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
}
};
xStream.registerConverter(localDateConverter);
SingleValueConverter datetimeConverter = new SingleValueConverter() {
@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(DateTime.class);
}
@Override
public String toString(Object arg0) {
return arg0.toString();
}
@Override
public Object fromString(String arg0) {
return ISODateTimeFormat.dateTimeParser().parseDateTime(arg0);
}
};
xStream.registerConverter(datetimeConverter);
return xStream;
}
static class Convert {
public LocalDate localDate = new LocalDate();
public DateTime dateTime = new DateTime();
}
}
|