2011-10-07 11 views
18

我正在編寫一些故意將錯誤字符串傳遞給Java DOM XML解析器的單元測試。如何防止將XML分析錯誤寫入System.err(stderr)?

E.g.

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的(錯誤):

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

有什麼辦法來配置XML解析器不能寫入標準錯誤?

我正在使用Java 1.6SE。

+0

嘗試配置包的記錄器?但爲什麼這很重要 - 他們是單元測試。 –

回答

24

安裝自己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; 
    } 
});