XMLGregorianCalendar was found to do very lax parsing of values. It accepts a lot of values that are not correct dates according to the spec. Most notably, it accept the year "0000" which should have been rejected. Further, it isn't able to handle some of the correct test cases, like years outside the int range and the "24:00:00"
time. Also, it isn't able to normalize dates to their canonical value; XMLGregorianCalendar.normalize() simply normalizes the timezone to UTC.
Conclusion: without any improvements to XMLGregorianCalendar, this class is unusable to validate xsd:dateTime instances.