Hi all
I tried to serialize a dateTime where I have a Calendar with date "0001-01-01"
When Axis serializes it would use UTC. All ok.
As im located central europe my date is CET and it creates the UTC -1 Hour.
Now I get the value: "0001-12-31T23:00:00.000Z"
Should it not add additionally the sign "-" in front of, so that I would receive "-0001-12-31T23:00:00.000Z"?
The problem is in deserialisation where I get the date "0002-01-01".
XSD-Type in WSDL
<complexType name="DateRange">
<attribute name="start" type="dateTime" use="required"/>
<attribute name="end" type="dateTime" use="required"/>
</complexType>
Using Axis 1.2.1 (but same behavior in higher versions, see CalendarSerializer in CVS).
The DateSerializer checks with an internal calendar for BC or AD, but I do not understand how
there the calendar should go BC..., perhaps when the computer time is BC?
Should the CalendarSerializer not check the value (should be a java.util.Calendar) if it is
BC or AD and add a "-"?
Thanks
Patrick
-------
public class CalendarSerializer implements SimpleValueSerializer {
public String getValueAsString(Object value, SerializationContext context) {
Date date = value instanceof Date ? (Date) value :
((Calendar) value).getTime();
// Serialize including convert to GMT
synchronized (zulu) {
// Sun JDK bug http://developer.java.sun.com/developer/bugParade/bugs/4229798.html
return zulu.format(date);
}
}
}
public class DateSerializer implements SimpleValueSerializer {
private static Calendar calendar = Calendar.getInstance();
public String getValueAsString(Object value, SerializationContext context) {
StringBuffer buf = new StringBuffer();
synchronized (calendar) {
if(value instanceof Calendar) {
value = ((Calendar)value).getTime();
}
if (calendar.get(Calendar.ERA) == GregorianCalendar.BC) {
buf.append("-");
calendar.setTime((Date)value);
calendar.set(Calendar.ERA, GregorianCalendar.AD);
value = calendar.getTime();
}
buf.append(zulu.format((Date)value));
}
return buf.toString();
}
}
