java - ¿Cómo personalizo los enlaces de fecha/hora usando JAXWS y APT?
binding jaxb (1)
Estoy usando JAXWS 2.1.7, usando algunas clases para ejecutar el ''apt'' de JAXWS para generar el WSDL. Para las fechas, yo uso
@XmlSchemaType(name="time")
private Date wakeupTime;
y esto genera un esquema con xs: tiempo, pero cuando todo esto sale en XML, el valor es algo así como
<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>
¡SOLO QUIERO que llegue la parte del tiempo! Creo que quiero usar un convertidor personalizado para decir que xs: time + java.util.Date debería imprimirse y analizarse de esa manera, pero no veo que pueda pasar un archivo de enlaces a la rutina apt. No puedo (por razones históricas y de otro tipo) usar XMLGregorianCalendar
, tiene que ser un java.util.Date
. ¿Cómo especifico un enlace personalizado para la herramienta apt en jaxb
OK, lo encontré! Lee este enlace: http://weblogs.java.net/blog/2005/04/22/xmladapter-jaxb-ri-ea
y use un javax.xml.bind.annotation.adapters.XmlAdapter. es decir
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;
}
}
}
y entonces :
@XmlSchemaType (name = "time")
@XmlJavaTypeAdapter (mypackage.TimeFromDateAdapter.class)
private Date wakeupTime;
y lejos tu vas.