Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EclipseLink/UserGuide/MOXy/Simple Values/Special Schema Types/Date and Time Types
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Contents
Mapping Dates and Times
You can use the @XmlSchemaType annotation to customize the XML representation of date and time information. Additionally, EclipseLink MOXy supports the following types which are not covered in the JAXB specification (JSR-222):
- java.sql.Date
- java.sql.Time
- java.sql.Timestamp
Example
The following XML schema contains a date-of-birth element of type xsd:date:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer"> <xsd:complexType> <xsd:sequence> <xsd:element name="date-of-birth" type="xsd:date" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>
Generated Model
The JAXB XML Schema to Java compiler (XJC) can be used to generate a class model from the sample schema. For example:
> xjc -d output-dir -p example date.xsd
will generate the following Customer class:
package example; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "", propOrder = {"dateOfBirth"}) @XmlRootElement(name = "customer") public class Customer { @XmlElement(name = "date-of-birth") @XmlSchemaType(name = "date") protected XMLGregorianCalendar dateOfBirth; public XMLGregorianCalendar getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(XMLGregorianCalendar value) { this.dateOfBirth = value; } }
Notice that:
- The dateOfBirth property is of type javax.xml.datatype.XMLGregorianCalendar
- The dateOfBirth property uses the @XmlSchemaType annotation
Some Java data types (like XMLGregorianCalendar) have multiple XML representations (like xsd:date, xsd:time or xsd:dateTime). Use @XmlSchemaType to select the appropriate representation.
Using a Different Date (or Calendar) Property
By default, the JAXB XML schema to Java compiler (XJC) generates a property of type XMLGregorianCalendar. However, you can easily change his to java.util.Date or java.util.Calendar, as shown here:
package blog.date; import java.util.Date; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSchemaType; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "customer") public class Customer { @XmlElement(name = "date-of-birth") @XmlSchemaType(name = "date") protected Date dateOfBirth; public Date getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(Date value) { this.dateOfBirth = value; } }