Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Special Schema Types/Date and Time Types"

From Eclipsepedia

Jump to: navigation, search
m (New page: JAXB and Date/Time Properties In this post I will describe how JAXB handles date/time information. This post will also cover how the @XmlSchemaType annotation can be used to customize the...)
 
m
Line 1: Line 1:
 +
{{EclipseLink_UserGuide
 +
|info=y
 +
|toc=y
 +
|eclipselink=y
 +
|eclipselinktype=MOXy
 +
|api=y
 +
|apis= *
 +
}}
 +
=Date and Time Types=
 +
 
JAXB and Date/Time Properties
 
JAXB and Date/Time Properties
 
In this post I will describe how JAXB handles date/time information.  This post will also cover how the @XmlSchemaType annotation can be used to customize the XML representation.
 
In this post I will describe how JAXB handles date/time information.  This post will also cover how the @XmlSchemaType annotation can be used to customize the XML representation.
Line 182: Line 192:
 
     * java.sql.Time
 
     * java.sql.Time
 
     * java.sql.Timestamp
 
     * java.sql.Timestamp
 +
 +
 +
{{EclipseLink_MOXy
 +
|previous= [[EclipseLink/UserGuide/MOXy/Simple_Values/Special_Schema_Types|Special Schema Types]]
 +
|up=    [[EclipseLink/UserGuide/MOXy/Simple_Values/Special_Schema_Types|Special Schema Types]]
 +
|next=      [[EclipseLink/UserGuide/MOXy/Simple_Values/Binary_Types|Binary Types]]
 +
|version=2.2.0 Draft
 +
}}

Revision as of 13:30, 5 April 2011

EclipseLink MOXy

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

Elug api package icon.png Key API

Contents

Date and Time Types

JAXB and Date/Time Properties In this post I will describe how JAXB handles date/time information. This post will also cover how the @XmlSchemaType annotation can be used to customize the XML representation.

XML Schema (date.xsd)

The following XML schema will be used for this post. Note that the date-of-birth element is of type xsd:date.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

<?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 - XMLGregorianCalendar Property


From this XML schema we can generate a class model using the following XJC call:

1

xjc -d out -p blog.date date.xsd

This will result in a Customer class that looks like the following. There are a couple of interesting things to note:

  1. The dateOfBirth property is of type javax.xml.datatype.XMLGregorianCalendar.  
  2. The use of @XmlSchemaType. 

Some Java data types (like XMLGregorianCalendar) have multiple XML representations (like xsd:date, xsd:time, xsd:dateTime, etc.) and @XmlSchemaType is used to choose the desired representation.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

package blog.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; 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;
   }

}

User Defined - Date (or Calendar) Property

Even though the JAXB XML schema to Java compiler (XJC) generates a property of type XMLGregorianCalendar by default, you are free to use java.util.Date and java.util.Calendar as well.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

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;
   }

}

EclipseLink JAXB (MOXy) Extension

EclipseLink JAXB (MOXy) also supports the following types which are not covered in the JAXB specification (JSR-222):

   * java.sql.Date
   * java.sql.Time
   * java.sql.Timestamp


Eclipselink-logo.gif
Version: 2.2.0 Draft
Other versions...