java binding jaxb jax-ws apt

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.