Guideline: Use java.xml.datatype.XMLGregorianCalendar instead of java.util.Date and java.util.Calendar.
XMLGregorianCalendar supports the following XML schema calendar types: xs:date, xs:time, xs:dateTime, xs:gYearMonth, xs:gMonthDay, xs:gYear, xs:gMonth, and xs:gDay. It is statically mapped to xs:anySimpleType, the common schema type from which all the XML schema calendar types are dervived. .NET maps xs:anySimpleType to System.string.
java.util.Date and java.util.Calendar map to xs:dateTime, but don’t provide as complete XML support as XMLGregorianCalendar does.
Guideline: Use the annotation @XmlSchemaType for a strongly typed binding of XMLGregorianCalendar to one of the XML schema calendar types.
Example: XmlGregorianCalendar without @XmlSchemaType
//-- Java code fragment public class PurchaseOrder { public javax.xml.datatype.XMLGregorianCalendar orderDate; } //-- Schema fragment <xs:complexType name="purchaseOrder"> <xs:sequence> <xs:element name="orderDate" type="xs:anySimpleType" minOccurs="0"/> </xs:sequence> </xs:complexType> //-- .NET auto generated code from schema public partial class purchaseOrder { private string orderDateField; public string orderDate { get { return this.orderDateField; } set { this.orderDateField = value; } } } //-- C# code fragment purchaseOrder tmpP = new purchaseOrder(); tmpP.orderDate = System.Xml.XmlConvert.ToString( System.DateTime.Now, System.Xml.XmlDateTimeSerializerMode.RoundtripKind);
Example: XMLGregorianCalendar with @XmlSchemaType
//-- Java code fragment public class PurchaseOrder { @XmlSchemaType(name="dateTime") public javax.xml.datatype.XMLGregorianCalendar orderDate; } //-- Schema fragment <xs:complexType name="purchaseOrder"> <xs:sequence> <xs:element name="orderDate" type="xs:dateTime" minOccurs="0"/> </xs:sequence> </xs:complexType> //-- .NET auto generated code from schema public partial class purchaseOrder : object, System.Runtime.Serialization.IExtensibleDataObject { private System.Runtime.Serialization.ExtensionDataObject extensionDataField; private System.DateTime orderDateField; public System.Runtime.Serialization.ExtensionDataObject ExtensionData { get { return this.extensionDataField; } set { this.extensionDataField = value; } } public System.DateTime orderDate { get { return this.orderDateField; } set { this.orderDateField = value; } } } //-- C# code fragment purchaseOrder tmpP = new purchaseOrder(); tmpP.orderDate = System.DateTime.Now;