One thing I did run into is I was having issues with getting a valid XMLGregorianCalendar Date when the date only included the date and timezone (no year). It could have been user error. When you make the update you might want to check the various formats that the date could be in and verify. Here is a list (might not contain all of possible formats), that I used, and because of the issue I ran into I ended up using JodaTime formatters to handle it as you can see below...
/**
* Formatter that handles all of the following formats
* "2013-08-04T11:57:00.1-00:00"
* "2013-08-04T11:57:00.01"
* "2013-08-04T11:57:00.001Z"
* "2013-08-04T11:57:00-00:00"
* "2013-08-04T11:57:00"
* "2013-08-04T11:57:00Z"
* "2013-08-04T11:57-00:00"
* "2013-08-04T11:57"
* "2013-08-04T11:57Z"
* "2013-08-04T11:57:22-00:00"
* "2013-08-04T11:57:22"
* "2013-08-04T11:57:22Z"
* "2013-08-04T11:57:22.1-00:00"
* "2013-08-04T11:57:22.01"
* "2013-08-04T11:57:22.001Z"
* "2013-08-04Z"
* "2013-08-04"
* "2013-08-04-00:00"
* "2013-08Z"
* "2013-08"
* "2013-08-00:00"
* "2013Z"
* "2013"
* "2013-00:00"
**/
protected static DateTimeFormatter DDMS_COMBINEDDATETYPE_FORMATTER = null;
static {
DateTimeParser[] parsers = {
ISODateTimeFormat.dateTimeParser().getParser(),
new DateTimeFormatterBuilder()
.append(ISODateTimeFormat.date())
.appendOptional(
new DateTimeFormatterBuilder().appendTimeZoneOffset("Z", true, 2, 4)
.toFormatter().getParser()).toParser(),
new DateTimeFormatterBuilder()
.append(ISODateTimeFormat.yearMonth())
.appendOptional(
new DateTimeFormatterBuilder().appendTimeZoneOffset("Z", true, 2, 4)
.toFormatter().getParser()).toParser(),
new DateTimeFormatterBuilder()
.append(ISODateTimeFormat.year())
.appendOptional(
new DateTimeFormatterBuilder().appendTimeZoneOffset("Z", true, 2, 4)
.toFormatter().getParser()).toParser()};
DDMS_COMBINEDDATETYPE_FORMATTER = new DateTimeFormatterBuilder().append(null, parsers)
.toFormatter();
}