我希望我能正确解释这一点。我正在使用 Javolution 库来读取和写入 XML 配置文件。我正在使用 XMLStreamReader/Writer。在阅读过程中,我希望读取标签并将其属性存储在 LinkedHashMap 中。但是,我抛出了一个异常,这对我来说似乎没有任何意义,因为它什么时候被抛出以及代码中当前正在发生什么。
使用 Eclipse 调试器,将属性的键和值添加到我的地图时会引发异常。
public class Element {
private HashMap<String, String> attributes = new LinkedHashMap<String, String>();
...
public void setAttribute(String key, String value) {
...
attributes.put(key, value);
}
}
在添加键和值之后,this
立即捕获来自 Javolution 的异常:
javolution.xml.stream.XMLStreamException: Local name cannot be null
两者都不key
为value
空。当它们被添加到地图时,我无法进一步进入代码以查看异常被抛出的位置,没有堆栈跟踪,没有任何文件/行号显示在任何地方以解释异常的位置或什至是如何抛出的。
从对 Javolution 旧实现的快速谷歌搜索中,我可以看到这个特殊的异常仅使用 XMLStreamWriterImpl 类型的几个方法引发。我在每次使用这些方法时都设置了断点,但是调试器直到在代码中很晚才发现它们被使用(并且我的 localName 变量在声明时被初始化)。
有人对我如何确定为什么抛出此异常有任何建议吗?
堆栈跟踪:
Java HotSpot(TM) 64-Bit Server VM[localhost:3999]
Thread [main] (Suspended)
XMLImplMain$Element.setAttribute(String, String) line: 827
XMLImplMain.translate(Element) line: 133
XMLImplMain.translate(Element) line: 140
XMLImplMain.translate(Element) line: 140
XMLImplMain.loadXML(String) line: 118
Bootstrap.main(String[]) line: 32
Thread [EventWriter] (Running)