我正在使用StAX來讀取XML內容並通過從StAXSource轉換爲DOMResult將其中的一部分解析爲DOM片段。但是,如果任何元素重新定義默認的XML名稱空間(xmlns =「」),則會導致NullPointerException。最少的代碼來演示情況:從Stax轉換爲DOM會導致NullPointerException
String xml =
"<?xml version=\"1.0\"?>"+
"<document>"+
" <element xmlns=\"\" />"+
"</document>";
StringReader reader = new StringReader(xml);
XMLInputFactory xif = XMLInputFactory.newFactory();
XMLStreamReader xsr = xif.createXMLStreamReader(reader);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
StAXSource source = new StAXSource(xsr);
DOMResult result = new DOMResult();
t.transform(source,result);
堆棧跟蹤的開頭是:
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.NamespaceMappings.pushNamespace(NamespaceMappings.java:233)
at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.startPrefixMapping(ToXMLSAXHandler.java:362)...
在我的理解中輸入XML是有效的。 Woodstox實現可以毫無問題地轉換XML,但是如果有方法配置或者解決與Java捆綁的默認實現的問題,我不希望爲我的應用添加更多的依賴關係。有什麼辦法嗎?或者這應該被認爲是Java默認實現中的錯誤?