I have a JAXB class like this:
public class Game {
    private Date startTime;
    @XmlElement
    public Date getStartTime() {
        return startTime;
    }
    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }
}
which results in an .xsd where startTime has type xsd:datetime. I want it to be xsd:time. xsd:time maps to XmlGregorianCalendar, but the reverse mapping maps to xsd:anySimpleType which isn't very helpful.
I've tried various arguments to @XmlElement(type=...) to no avail. Any pointers would be greatly appreciated.
If it makes a difference, this is a type used by JAX-WS.
If you are generating the schema from the Java classes here is what you should change:
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);
    }
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With