我正在修改使用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中?
答案 0 :(得分:3)
记录异常并抛出异常是两个截然不同的事情,对于库组件(在这种情况下为xerces)来说,记录描述遇到的错误的消息然后抛出异常是很常见的,无论异常是否被捕获或不是通过调用程序。
在您的情况下,添加此行应防止Xerces记录:
parser.setErrorHandler(null);