JavaScript Birt-Try-catch有效,但仍有错误

JavaScript Birt Try catch works but still errors

本文关键字:有错误 Birt-Try-catch 有效 JavaScript      更新时间:2023-09-26

我正在修改一个现有的Birt报告,该报告正在使用JavaScript解析XML。当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中,错误也会被抛出到日志中?

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

在您的情况下,添加这一行应该会阻止Xerces进行日志记录:

parser.setErrorHandler(null);