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后,在验证过程中发现的错误将首先发送到ErrorHandler。

通过从处理程序中抛出SAXException,错误处理程序可以立即中止进一步的验证。或者,例如,它可以在屏幕上显示错误,然后尝试通过正常返回ErrorHandler

来继续验证

如果从Throwable抛出任何ErrorHandler,则validate方法的调用者将被抛出相同的Throwable对象。

在未首先向SAXException报告之前,Validator不允许抛出ErrorHandler

在您自己的错误处理程序中,您可以汇总异常,然后在验证之后根据需要/需要进行处理。

特别是,如果遇到错误,您可以继续进行验证,使您能够在处理程序中捕获所有错误。