SAXParseException: der Wert ist kein Gültiger Wert für 'Datum'

Habe ich ein Objekt-Baum von POJOs, stellt ein XML-Schema. Dies wurde mit den folgenden jaxb ant-Skript.

Möchte ich überprüfen das root-POJO und seine Kinder, Personen, die gegen das schema für die fehlenden Attribute an.

Mein code ist der folgende: (try/catch-block weggelassen, inspiriert durch SO Frage Wie Validierung gegen schema bei JAXB 2.0 ohne marshalling?)

public boolean validateAgainstSchema(Pojo pojo)
{
        JAXBContext jc;
        jc = JAXBContext.newInstance(Pojo.class);
        SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = sf.newSchema(new ClassPathResource("schema.xsd").getFile());

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setSchema(schema);
        marshaller.marshal(schema, new DefaultHandler());
        return true;
}

Eines meiner Attribute (pojo.childEntity.someAttribute) ist ein date

XSD

<xsd:attribute name="some_date" use="required">
  <xsd:simpleType>
    <xsd:restriction base="xsd:date" />
  </xsd:simpleType>
</xsd:attribute>

Java

@XmlAttribute(name = "someDate", required = true)
protected XMLGregorianCalendar someDate;

Wird es bevölkern, von einem java.util.Date Objekt aus einem anderen POJO (wird abgebildet mit Hibernate).

private static final XMLGregorianCalendar dateToCalendar(Date date)
{
    if (date == null)
        return null;
    try
    {
        GregorianCalendar c = new GregorianCalendar();
        c.setTime(date);

        return DatatypeFactory.newInstance()
                .newXMLGregorianCalendar(c);
    }
    catch (DatatypeConfigurationException e)
    {
        e.printStackTrace();
        return null;
    }

}

Ausnahme ist:

javax.xml.bind.MarshalException
 - with linked exception:
[org.xml.sax.SAXParseException: cvc-datatype-valid.1.2.1: '2001-05-11T00:00:00.000+02:00' is not a valid value for 'date'.]

Dieser sieht aus wie JAXB versucht, um sowohl das Datum und die Zeit für ein Feld, das sich tragen muss nur das Datum, und XMLGregorianCalendard ist einfach eine datetime-container.

Die Frage ist: was verursacht den Fehler? Wie zu beheben?

InformationsquelleAutor usr-local-ΕΨΗΕΛΩΝ | 2013-07-03

Schreibe einen Kommentar