我正在修改一个使用 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/