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

jfr*_*z42 20 java xml dom xml-parsing

我正在编写一些故意将坏字符串传递给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);
Run Code Online (Sandbox Code Playgroud)

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

[Fatal Error] :1:1: Premature end of file.
Run Code Online (Sandbox Code Playgroud)

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

我正在使用Java 1.6SE.

phi*_*hag 28

安装你自己的ErrorHandler:

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;
    }
});
Run Code Online (Sandbox Code Playgroud)