ich einen Objektbaum von POJOs, die ein XML-Schema darstellt. Dies wurde mit dem folgende jaxb
Ant-Skript erstellt.SAXParseException: Wert ist kein gültiger Wert für ‚date‘
Ich möchte für fehlende Attribute die Wurzel POJO und seine Kinder Einheiten gegen das Schema validieren.
Mein Code ist folgende: (versuchen Sie/weggelassen catch-Block, inspiriert von SO How to validate against schema in JAXB 2.0 without marshalling? Frage)
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;
}
Einer meiner Attribute (pojo.childEntity.someAttribute
) 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;
Es wird von einem java.util.Date
Objekt aus einer anderen POJO (eine, die mit Hibernate abgebildet wird) füllen.
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;
}
}
Die 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'.]
Das sieht aus wie JAXB sowohl Datum und Zeit für ein Feld zu setzen versucht, die nur das Datum tragen muss, und XMLGregorianCalendard ist einfach ein Datetime-Container.
Die Frage ist: was den Fehler verursacht? Wie repariert man?
Die Wahrheit ist komplexer (ich dachte, es wäre egal): Ich bevölkere den GregCalendar von einem Datum –
@djechelon - Ich habe meine Antwort mit aktualisiert Informationen, die helfen sollten. –
Ok, da ich looooooooooooooooooooooooooooooooots von XmlGregorianCalendars habe, gibt es eine Möglichkeit, XJC mitzuteilen, dass das xmlSchemaType-Attribut allen XGCs hinzugefügt werden soll? –