如何防止XML解析错误被写入System.err(stderr)?

2022-09-02 03:46:16

我正在编写一些单元测试,这些测试故意将错误的字符串传递给Java DOM XML解析器。

例如:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

String message_xml = ""; // Empty string, not valid XML!!!
ByteArrayInputStream input = new ByteArrayInputStream(message_xml.getBytes());
Document doc = db.parse(input);

这是正确地抛出一个SAXParseException(这是我的单元测试所期望的)。但它也在Java控制台中向System.err(stderr)写入一条消息:

[Fatal Error] :1:1: Premature end of file.

有没有办法将 XML 解析器配置为不写入 stderr?

我使用的是Java 1.6SE。


答案 1

安装您自己的错误处理程序

db.setErrorHandler(new ErrorHandler() {
    @Override
    public void warning(SAXParseException e) throws SAXException {
        ;
    }

    @Override
    public void fatalError(SAXParseException e) throws SAXException {
        throw e;
    }

    @Override
    public void error(SAXParseException e) throws SAXException {
        throw e;
    }
});

答案 2