6

我有一个这样的 JAXB 类:

public class Game {
    private Date startTime;

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

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

这导致.xsdstartTime 的类型为xsd:datetime。我希望它是xsd:timexsd:time映射到XmlGregorianCalendar,但反向映射映射到xsd:anySimpleTypewhich 不是很有帮助。

我尝试了各种说法@XmlElement(type=...)都无济于事。任何指针将不胜感激。

如果有所不同,这是 JAX-WS 使用的类型。

4

1 回答 1

6

如果您从 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);
    }
}
于 2009-11-11T12:14:01.203 回答