Nota: Ich bin der EclipseLink JAXB (MOXy) und ein Mitglied der JAXB 2.X ( JSR-222 ) Expertengruppe.
Dieses Verhalten variiert ein wenig zwischen den JAXB-Implementierungen. MOXy zum Beispiel löst die folgende Ausnahme aus, wenn der Wert falsch ist:
Exception in thread "main" javax.xml.bind.UnmarshalException
- with linked exception:
[Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])]
at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:225)
at forum254.Demo.main(Demo.java:18)
Caused by: Exception [EclipseLink-3003] (Eclipse Persistence Services - 2.4.0.qualifier): org.eclipse.persistence.exceptions.ConversionException
Exception Description: Incorrect date format: [2011-02-50] (expected [YYYY-MM-DD])
at org.eclipse.persistence.exceptions.ConversionException.incorrectDateFormat(ConversionException.java:103)
at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertStringToXMLGregorianCalendar(XMLConversionManager.java:689)
at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObjectToXMLGregorianCalendar(XMLConversionManager.java:278)
at org.eclipse.persistence.internal.oxm.XMLConversionManager.convertObject(XMLConversionManager.java:249)
at org.eclipse.persistence.oxm.XMLField.convertValueBasedOnSchemaType(XMLField.java:712)
Abhilfe
Um bei jeder JAXB-Implementierung eine Fehlermeldung zu erhalten, können Sie ein XML-Schema für den Unmarshaller festlegen, um eine Validierung durchzuführen:
Oder Sie können eine XmlAdapter
um die Konvertierung selbst zu steuern (und gegebenenfalls eine Ausnahme zu machen):