首页 > 解决方案 > 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;
    }

如何检测到所有异常?

标签: javaxmlxsd

解决方案


您可以使用Validator.setErrorHandler(ErrorHandler)注册自己的错误处理程序。

public abstract void setErrorHandler(ErrorHandler errorHandler)

设置接收在方法调用ErrorHandler期间遇到的错误。validate错误处理程序可用于在验证期间自定义错误处理过程。当ErrorHandler设置了 an 时,验证过程中发现的错误将首先发送到 ErrorHandler。

SAXException错误处理程序可以通过从处理程序中抛出来立即中止进一步的验证。或者例如,它可以在屏幕上打印一个错误并尝试通过正常返回来继续验证ErrorHandler

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

Validator 不允许在SAXException未先向ErrorHandler.

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

具体来说,它允许您在遇到错误时继续验证,使您能够在处理程序中捕获它们。


推荐阅读