【发布时间】:2012-06-20 01:46:57
【问题描述】:
我有一些带有 JAXB 注释的类,我创建了一些实例,我需要根据我的 XSD 文件验证它们。当对象无效时,我应该能够获得错误的详细信息。
到目前为止我还没有运气,我知道这个类 ValidationEventHandler 但显然我可以将它与 Unmarshaller 类一起使用,问题是我必须验证对象而不是原始 XML。
我有这个代码:
MyClass myObject = new MyClass();
JAXBContext jaxbContext = JAXBContext.newInstance("x.y.z");
JAXBSource jaxbSource = new JAXBSource(jaxbContext, myObject);
SchemaFactory factory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaFile = new StreamSource(getClass().getClassLoader()
.getResourceAsStream("mySchema.xsd"));
Schema schema = factory.newSchema(schemaFile);
Validator validator = schema.newValidator();
validator.validate(jaxbSource);
这段代码可以工作,它会验证对象并抛出异常消息,如下所示:
cvc-pattern-valid: 值 '12345678901' 不是 facet-valid 为类型 'id' 模式化 '\d{10}'。]
问题是我需要特定的详细信息,使用这样的字符串我必须解析所有消息。
【问题讨论】:
-
这里有一个可能的选项:stackoverflow.com/questions/11921190/…
-
找到另一个展示如何获取实际无效 DOM 元素的 awnser stackoverflow.com/questions/8077437/…