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

Posted

技术标签:

【中文标题】如何防止将 XML 解析错误写入 System.err (stderr)?【英文标题】:How to prevent XML parsing errors being written to System.err (stderr)? 【发布时间】:2011-12-03 05:51:31 【问题描述】:

我正在编写一些单元测试,它们故意将错误的字符串传递给 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】:

安装你自己的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;
    
);

【讨论】:

以上是关于如何防止将 XML 解析错误写入 System.err (stderr)?的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试写入文件时,将 JSON 转换为 XML 错误

Java中XML文件的读取与写入

如何锁定 Access 数据库以防止写入

如何转义xml中的特殊字符

如何将解析和更改的 DOM 文档保存在 xml 文件中?

如何在 C# 摘要中包含 html 标记,以便将其作为文本处理(不解析为 XML)?