Решение вашей проблемы скрыто в генерации классов.
Вы должны сгенерировать ваши классы со следующей привязкой:
<jaxb:globalBindings generateMixedExtensions="true">
<jaxb:javaType
name="java.util.Calendar"
xmlType="xs:dateTime"
parseMethod="com.test.DataTypeBinder.unmarshalDateTime"
printMethod="com.test.DataTypeBinder.marshalDateTime" />
</jaxb:globalBindings>
и включить в путь к классу следующий класс:
public class DataTypeBinder {
private static DateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
private static DateFormat date = new SimpleDateFormat("yyyy-MM-dd");
public static Calendar unmarshalDate(String value) {
if (value == null || value.length() == 0) {
return null;
}
Date d = null;
try {
d = date.parse(value);
} catch (Exception e) {
e.printStackTrace();
return null;
}
Calendar c = Calendar.getInstance();
c.setTime(d);
return c;
}
public static String marshalDate(Calendar value) {
if (value == null) {
return null;
}
return date.format(value.getTime());
}
public static Calendar unmarshalDateTime(String value) {
if (value == null || value.length() == 0) {
return null;
}
Date d = null;
try {
d = dateTime.parse(value);
} catch (Exception e) {
e.printStackTrace();
return null;
}
Calendar c = Calendar.getInstance();
c.setTime(d);
return c;
}
}
Тогда JAXB собирается включить в ваши сгенерированные классы следующее объявление типа:
@XmlElement(type = String.class)
@XmlJavaTypeAdapter(Adapter1 .class)
@XmlSchemaType(name = "dateTime")
protected Calendar transactionDate;