How to annotate a JAXB property to use xsd: time rather than xsd: datetime?

I have a JAXB class:

public class Game { private Date startTime; @XmlElement public Date getStartTime() { return startTime; } public void setStartTime(Date startTime) { this.startTime = startTime; } } 

which leads to .xsd , where startTime is of type xsd:datetime . I want it to be xsd:time . xsd:time displayed on XmlGregorianCalendar , but the reverse is displayed on xsd:anySimpleType , which is not very useful.

I tried various arguments @XmlElement(type=...) no avail. Any pointers would be greatly appreciated.

If that matters, this is the type used by JAX-WS.

+6
java types jax-ws xsd jaxb
source share
1 answer

If you are generating a schema from 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); } } 
+6
source share

All Articles