我有一个unmarshaller以及一个MySchema.xsd文件。如何在进行反编组时对XML进行验证?
StreamSource sources = new StreamSource(getClass().getClassLoader().getResourceAsStream("/xmlValidation.xsd"));
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
unmarshaller.setSchema(sf.newSchema(sources));
做出unmarshaller.setEventHandler()函数,调用指定自定义验证事件处理程序,基本上是格式化错误提示字符串,通过:
final String errorString = new String();
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent validationevent) {
if(validationevent.getSeverity()!= ValidationEvent.WARNING){
errorString.format("Line:Col[" + validationevent.getLocator().getLineNumber()
+ ":" + validationevent.getLocator().getColumnNumber()
+ "]:" + validationevent.getMessage());
return false;
}
return true;
}
});
上面的代码似乎工作确定(我可以得到java对象,当输入字符串被验证,并且错误提示字符串被格式化为例外)
问题是,当输入xml格式不正确时,它也会抛出一个SaxParseException。
在此先感谢。 安德鲁
我搜索更多的,我必须使用javax.xml.validation.Validator中google.Seems,这可以从javax.xml创建.validation.Schema来验证它。 (我不确定,但Iwill会在测试结束后返回)ValidationEventHandler是否也可以捕获SaxParseException? – yzandrew 2011-03-23 03:57:50