The simple deserializer provides most of the stuff.
We just need to override makeValue().
Object result;
boolean bc = false;
// validate fixed portion of format
if ( source != null ) {
if (source.length() < 10)
throw new NumberFormatException(
Messages.getMessage("badDate00"));
if (source.charAt(0) == '+")
source = source.substring(1);
if (source.charAt(0) == '-") {
source = source.substring(1);
bc = true;
}
if (source.charAt(4) != '-" || source.charAt(7) != '-")
throw new NumberFormatException(
Messages.getMessage("badDate00"));
}
synchronized (calendar) {
// convert what we have validated so far
try {
result = zulu.parse(source == null ? null :
(source.substring(0,10)) );
} catch (Exception e) {
throw new NumberFormatException(e.toString());
}
// support dates before the Christian era
if (bc) {
calendar.setTime((Date)result);
calendar.set(Calendar.ERA, GregorianCalendar.BC);
result = calendar.getTime();
}
if (javaType == java.util.Date.class) {
return result;
} else if (javaType == java.sql.Date.class) {
result = new java.sql.Date(((Date)result).getTime());
} else {
calendar.setTime((Date)result);
result = calendar;
}
}
return result;