如何注释JAXB属性以使用xsd:time而不是xsd:datetime?

Dra*_*mon 6 java xsd types jax-ws jaxb

我有一个像这样的JAXB类:

public class Game {
    private Date startTime;

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

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致.xsdstartTime具有类型xsd:datetime.我想要它xsd:time.xsd:time映射到XmlGregorianCalendar,但反向映射映射xsd:anySimpleType不是很有用.

我试过各种各样的论据@XmlElement(type=...)无济于事.任何指针都将非常感激.

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

Dav*_*itz 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);
    }
}
Run Code Online (Sandbox Code Playgroud)