XMLスキーマを表すPOJOのオブジェクトツリーがあります。これは、次のjaxb
antスクリプトで作成されました。SAXParseException:値が 'date'の有効な値ではありません
私は属性が不足しているため、スキーマに対するルートPOJOとその子実体を検証します。 (試す/ SO How to validate against schema in JAXB 2.0 without marshalling?質問に触発省略catchブロック、)私の属性の
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;
}
ワン(pojo.childEntity.someAttribute
)さ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;
java.util.Date
オブジェクトから別のPOJO(HibernateにマップされているPOJO)からデータが取り込まれます。
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;
}
}
例外は次のとおりです。
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'.]
JAXBは日付のみを運ばなければならないフィールドの日付と時刻の両方を設定しようとすると、XMLGregorianCalendardは、単に日時コンテナであるようにこれが見えます。
問題は何ですか?エラーの原因は何ですか?直し方?
真実はより複雑です(私はそれは問題ではないと思っていました):私はGregCalendarを日付から埋めます –
@djechelon - 情報が役立つはずです。 –
xmlGregorianCalendarsのlooooooooooooooooooooooooooooooooootsがあるので、XJCにすべてのXGCにxmlSchemaType属性を追加するよう指示する方法はありますか? –