Как аннотировать свойство JAXB для использования xsd: time вместо xsd: datetime? - PullRequest
6 голосов
/ 11 ноября 2009

У меня есть такой класс JAXB:

public class Game {
    private Date startTime;

    @XmlElement
    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
}

, что приводит к .xsd, где startTime имеет тип xsd:datetime. Я хочу, чтобы это было xsd:time. xsd:time отображается на XmlGregorianCalendar, но обратное отображение отображается на xsd:anySimpleType, что не очень полезно.

Я пробовал различные аргументы @XmlElement(type=...) безрезультатно. Любые указатели будут с благодарностью.

Если это имеет значение, этот тип используется JAX-WS.

1 Ответ

6 голосов
/ 11 ноября 2009

Если вы генерируете схему из классов Java, вот что вы должны изменить:

public class Game {
    private XMLGregorianCalendar startTime;

    @XmlElement
    @XmlSchemaType(name = "time")
    public XMLGregorianCalendar getStartTimeForSchema() {
      return startTime;
    }

    public void setStartTimeForSchema(XMLGregorianCalendar startTime) {
      this.startTime = startTime;
    }

    @XmlTransient
    public Date getStartTime() {
      return startTime.toGregorianCalendar().getTime();
    }

    @XmlTransient
    public void setStartTime(Date startTime) {
    GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
      gc.setTime(startTime);
      DatatypeFactory dataTypeFactory = null;
      try {
        dataTypeFactory = DatatypeFactory.newInstance();
      } catch (DatatypeConfigurationException ex) {
        // log
      }
      this.startTime = dataTypeFactory.newXMLGregorianCalendar(gc);
    }
}
...