java - Java - 如何从 xml 验证文件中捕获所有异常/错误
问题描述
我想从我的验证 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
设置了 an 时,验证过程中发现的错误将首先发送到 ErrorHandler。
SAXException
错误处理程序可以通过从处理程序中抛出来立即中止进一步的验证。或者例如,它可以在屏幕上打印一个错误并尝试通过正常返回来继续验证ErrorHandler
如果
Throwable
从 中抛出任何对象ErrorHandler
,则 validate 方法的调用者将被抛出相同的Throwable
对象。Validator 不允许在
SAXException
未先向ErrorHandler
.
在您自己的错误处理程序中,您可以聚合异常,然后在验证后根据需要/需要进行处理。
具体来说,它允许您在遇到错误时继续验证,使您能够在处理程序中捕获它们。
推荐阅读
- python - urlunparse 与 urlparse 不一致
- javascript - 如何使用 JavaScript 在 HTML 表格中显示 JSON 数据
- sql-server - SSIS 读取没有列名的文件
- css - 是否可以在 CSS 网格列中获取固定对象?
- python - 在 pandas 中选择六列中的任何一列都不全为零的行
- python - pytest 函数中参数的顺序(它们的命名?)在哪里记录?
- amazon-web-services - 如何将存储桶名称绑定到调用模块创建的资源
- algorithm - 为什么对排序数组进行快速排序会给出 n1 = 0 和 n2 = n - 1?
- github - 如何将作业名称传递到 github 操作的输入中?
- reactjs - 反应如何返回一个变量,以便它呈现而不给出未定义的错误