问题描述
我想从验证xml中获取所有错误。实际上,我的方法在捕获第一个错误后停止:
public List<String> validation(File file) {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
List<String> statut = new ArrayList<>();
try {
assert xsd != null;
Schema schema = schemaFactory.newSchema(xsd);
Validator validator = schema.newValidator();
validator.validate(new StreamSource(new File(file.getPath() + file.getname())));
statut.add(file.getname() + " is valid");
} catch (SAXException | IOException e) {
statut.add(file.getname() + " not valid :\n");
statut.add(e.getMessage());
}
return statut;
}
如何获取所有异常检测?
解决方法
您可以使用Validator.setErrorHandler(ErrorHandler)
注册自己的错误处理程序。
public abstract void setErrorHandler(ErrorHandler errorHandler)
设置
ErrorHandler
以接收在validate
方法调用期间遇到的错误。 错误处理程序可用于在验证期间自定义错误处理过程。设置ErrorHandler
后,在验证过程中发现的错误将首先发送到ErrorHandler。通过从处理程序中抛出
来继续验证SAXException
,错误处理程序可以立即中止进一步的验证。或者,例如,它可以在屏幕上显示错误,然后尝试通过正常返回ErrorHandler
如果从
Throwable
抛出任何ErrorHandler
,则validate方法的调用者将被抛出相同的Throwable
对象。在未首先向
SAXException
报告之前,Validator不允许抛出ErrorHandler
。
在您自己的错误处理程序中,您可以汇总异常,然后在验证之后根据需要/需要进行处理。
特别是,如果遇到错误,您可以继续进行验证,使您能够在处理程序中捕获所有错误。