Joda Time and XStream

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

}
|