How to Customize JAXB Bindings for Dates

schema.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="Root">
    <xs:sequence>
      <xs:element name="Element" type="xs:date" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

schema.xjb

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" schemaLocation="schema.xsd">
  <jaxb:globalBindings>
    <jaxb:javaType name="java.util.Date" xmlType="xs:date" /> <!-- the default is javax.xml.datatype.XMLGregorianCalendar -->
  </jaxb:globalBindings>
</jaxb:bindings>

DateConverter.java

import java.util.Calendar;
import java.util.Date;

import javax.xml.bind.DatatypeConverter;

public final class DateConverter {

  public static Date parseDate(final String source) {
    return DatatypeConverter.parseDate(source).getTime();
  }

  public static String printDate(final Date date) {
    final Calendar cal = Calendar.getInstance();

    cal.setTime(date);

    return DatatypeConverter.printDate(cal);
  }

  private DateConverter() {
  }

}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s