Im using JAXWS 2.1.7, using some classes to run through JAXWS's 'apt' to generate the WSDL. For dates, I use
@XmlSchemaType(name="time")
private Date wakeupTime;
and this generates a schema with xs:time, but when this all comes out in XML, the value is something like
<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>
I want JUST the time portion to come! I think I want to use a custom converter to say that xs:time + java.util.Date should be printed and parsed in such-and-sucha manner, but I cant see that I can pass a bindings file to the apt routine. I can't (for historical & other reasons) use XMLGregorianCalendar
- it has to be a java.util.Date
. How do I specify a custom binding for the apt tool in jaxb
OK, found it! Read this link: http://weblogs.java.net/blog/2005/04/22/xmladapter-jaxb-ri-ea
and use a javax.xml.bind.annotation.adapters.XmlAdapter. i.e.
public class TimeFromDateAdapter extends XmlAdapter<XMLGregorianCalendar, Date>
{
public Date unmarshal(XMLGregorianCalendar value)
{
Calendar cal = value.toGregorianCalendar();
Date d = cal.getTime();
return d;
}
public XMLGregorianCalendar marshal(Date value)
{
Calendar cal = Calendar.getInstance();
cal.setTime(value);
try
{
XMLGregorianCalendar xmlcal = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);
return xmlcal;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
}
and then :
@XmlSchemaType(name="time")
@XmlJavaTypeAdapter(mypackage.TimeFromDateAdapter.class)
private Date wakeupTime;
and away you go.