4 Stimmen

JaxB Anbindung XMLGregorianCalendar

JaxB, wenn die Bindung ein falsches Datumsformat zu XMLGregorianCalendar ist nicht werfen Ausnahme. Stattdessen wird null zugewiesen. Was könnte das Problem sein?

@XmlAttribute(name = "travelEndDate", required = true)
@XmlSchemaType(name = "date")
protected XMLGregorianCalendar travelEndDate;

<xs:complexType name="SearchCriteria">
<xs:attribute name="travelStartDate" type="xs:date" use="required"/>
<xs:attribute name="travelEndDate" type="xs:date" use="required"/>
</xs:complexType>

4voto

bdoughan Punkte 144925

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):

1voto

powerMicha Punkte 2683

Vielleicht ist dieser Link für Sie hilfreich:

http://eskatos.wordpress.com/2007/11/24/jaxb-custom-binding-for-joda-time/

Es beschreibt die Behandlung von Datumsangaben in XML mit benutzerdefinierten Java Datentypen (hier: JodaTime)

0voto

zengr Punkte 37400

Verwenden Sie dies, wird es die Ausnahme zu fangen:

try {
   String date = "your date here"
   XMLGregorianCalendar xmlGCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(date);
    } catch (DatatypeConfigurationException ex) {
       //DO STUFF
      }

Aktualisierung:

Nachdem Sie den Code hinzugefügt haben, bin ich mir nicht sicher, wie Sie dies erkennen können. Ich denke, Sie müssen dafür eine Nullprüfung durchführen und tun, was immer Sie wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X