JavaScript Birt Try catch 可以工作,但仍然出错

标签 javascript xml try-catch birt

我正在修改一个使用 JavaScript 解析 XML 的现有 Birt 报告。当 XML 没有格式错误时,解析工作正常。现在我正在测试它,以便如果 bum 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 中?

最佳答案

记录异常和抛出异常是两个不同的事情,库组件(在本例中为 xerces)记录描述遇到的错误的消息然后抛出异常是很常见的,无论异常是否被捕获或不是通过调用程序。

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

parser.setErrorHandler(null);

关于JavaScript Birt Try catch 可以工作,但仍然出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23369731/

相关文章:

javascript - Bootstrap Tour 不记得我离开的地方

javascript - 将流与 baconjs 结合起来

php - 来自xml的php utf-8解码返回问号

c# - 使用SelectSingleNode和Xpath时忽略空白

c# - 如果我在 Try block 中返回值,Finally 语句中的代码会触发吗?

javascript - 使用 await async 获取数据而不使用 try catch

javascript - 如何获得星级评定的值(value),jQuery

javascript - 当我按下按钮时调用函数

xml - 在数据库中存储 XML 是 "bad"吗?

r - tryCatch 未捕获 RStudio 中 install.packages 产生的错误