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

From Eclipsepedia

Jump to: navigation, search
m
m (Date and Time Types)
Line 8: Line 8:
 
}}
 
}}
 
=Date and Time Types=
 
=Date and Time Types=
 +
You can use the '''@XMLSchemaType''' annotation to customize the XML representation of date and time information.
  
JAXB and Date/Time Properties
+
EclipseLink JAXB (MOXy) also supports the following types which are not covered in the JAXB specification (JSR-222):
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.
+
* java.sql.Date
 +
* java.sql.Time
 +
* java.sql.Timestamp
  
XML Schema (date.xsd)
+
==Sample Schema==
 +
This example shows how JAXB handles date and time information. In this sample XML schema, notice that the '''date-of-birth''' element is of type '''xsd:date'''.
  
The following XML schema will be used for this post.  Note that the date-of-birth element is of type xsd:date.
+
<source lang="xml">
 
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
 
 
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
Line 50: Line 37:
 
</xsd:schema>
 
</xsd:schema>
  
Generated Model - XMLGregorianCalendar Property
+
</source>
  
 +
==Generated Model==
 +
- XMLGregorianCalendar Property
  
From this XML schema we can generate a class model using the following XJC call:
 
  
1
+
By using this XJC call, you can generate a class model from the sample schema. For example:
+
<tt>
 
xjc -d out -p blog.date date.xsd
 
xjc -d out -p blog.date date.xsd
 +
</tt>
  
This will result in a Customer class that looks like the following.  There are a couple of interesting things to note:
+
This will generate the following '''Customer''' class:
 
+
<source lang="java">
  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;
 
package blog.date;
 
   
 
   
Line 124: Line 78:
 
   
 
   
 
}
 
}
 +
</source>
 +
 +
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.
 +
  
 
User Defined - Date (or Calendar) Property
 
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.
 
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.
 
+
<source lang="java">
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;
 
package blog.date;
Line 184: Line 119:
 
   
 
   
 
}
 
}
 
+
</source>
 
EclipseLink JAXB (MOXy) Extension
 
EclipseLink JAXB (MOXy) Extension
  

Revision as of 13:37, 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

You can use the @XMLSchemaType annotation to customize the XML representation of date and time information.

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

Sample Schema

This example shows how JAXB handles date and time information. In this sample XML schema, notice that the date-of-birth element is 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

- XMLGregorianCalendar Property


By using this XJC call, you can generate a class model from the sample schema. For example: xjc -d out -p blog.date date.xsd

This will generate the following Customer class:

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

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.


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.

 
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...