【发布时间】:2011-06-01 16:31:51
【问题描述】:
我有这个 EventFilter 实现,它应该过滤 <InterestingElement> 开始元素事件:
class InterestingElementFilter implements EventFilter {
@Override
public boolean accept(XMLEvent event)
{
if (event.isStartElement()) {
StartElement startElement = event.asStartElement();
String name = startElement.getName().getLocalPart();
if (name.equals("InterestingElement")) {
return true;
}
}
return false;
}
}
然后我创建一个过滤阅读器:
XMLEventReader interestingElementReader = xmlInputFactory.createFilteredReader(xmlEventReader, new InterestingElementFilter());
调用时
startElementReader.peek();
我明白了:
java.lang.StackOverflowError
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipSpaces(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.seekCloseOfStartTag(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(Unknown Source)
at javax.xml.stream.util.EventReaderDelegate.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
at com.sun.xml.internal.stream.EventFilterSupport.peek(Unknown Source)
如果有人知道问题所在,我将不胜感激。
【问题讨论】:
-
你最终发现了什么?如果它仍然是一个谜,您可能想要显示更多堆栈 - 或总结,例如,......“随后是 2000 多个 EventFilterSupport.peek()”调用。从简短的摘录中不清楚过度递归在哪里。