JavaScript Birt Try catch有效但仍然有错误

时间:2014-04-29 16:02:21

标签: javascript xml try-catch birt

我正在修改使用JavaScript解析XML的现有Birt报告。当XML没有格式错误时,解析工作正常。现在我正在对它进行测试,以便在传递XML时,它会返回完整的消息。这是代码:

var xml = fullString.substring(fullString.indexOf("query") + 5);
importPackage(Packages.org.apache.xerces.parsers);
importPackage(Packages.org.xml.sax);
importPackage(Packages.java.io);

var entry = "";

try{
    var parser = new DOMParser();
    parser.parse(new InputSource(new StringReader(xml)));
    var nodelist = parser.getDocument().getElementsByTagName('parsererror');
    if(nodelist.length !== 0){
        entry = fullString;
    }else{
        nodelist = parser.getDocument().getElementsByTagName('ProprietaryTag');
        for(var i = 0; i < nodelist.length; i++){
            entry = entry + nodelist.item(i).getFirstChild().getNodeValue() + " ";
        }
    }
}catch(err){
    entry = fullString;
}

奇怪的是页面渲染和工作,但日志仍然得到以下

2014-04-29 11:57:30,676 ERROR [STDERR] (http-0.0.0.0-58880-13) [Fatal Error] :1:94: Element type "asdfwefe" must be followed by either attribute specifications, ">" or "/>".

哪个是正确的错误,但我对其他语言的try / catch的理解是它应该阻止它。为什么错误会被抛到日志中,即使它是在try catch中?

1 个答案:

答案 0 :(得分:3)

记录异常并抛出异常是两个截然不同的事情,对于库组件(在这种情况下为xerces)来说,记录描述遇到的错误的消息然后抛出异常是很常见的,无论异常是否被捕获或不是通过调用程序。

在您的情况下,添加此行应防止Xerces记录:

parser.setErrorHandler(null);