Как мне настроить привязку даты / времени с помощью JAXWS и APT? - PullRequest
3 голосов
/ 31 мая 2010

Я использую JAXWS 2.1.7, использую некоторые классы для запуска через 'apt' JAXWS для генерации WSDL. Для дат я использую

@XmlSchemaType(name="time")  
private Date wakeupTime;

и это генерирует схему с xs: time, но когда все это появляется в XML, значение выглядит как

<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>

Я хочу, чтобы время пришло! Я думаю, что я хочу использовать собственный конвертер, чтобы сказать, что xs: time + java.util.Date должен быть напечатан и проанализирован таким-то образом, но я не вижу, что могу передать файл привязок в подпрограмму apt. Я не могу (по историческим и другим причинам) использовать XMLGregorianCalendar - это должно быть java.util.Date. Как указать пользовательскую привязку для инструмента apt в jaxb

1 Ответ

8 голосов
/ 01 июня 2010

ОК, нашел это! Прочитайте эту ссылку: http://weblogs.java.net/blog/2005/04/22/xmladapter-jaxb-ri-ea
и используйте javax.xml.bind.annotation.adapters.XmlAdapter. т.е.

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;
    }
  }
}

и затем:
@XmlSchemaType (имя = "время")
@XmlJavaTypeAdapter (mypackage.TimeFromDateAdapter.class)
приватная дата wakeupTime;

и уходи.

...