我正在使用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默认实现中的错误?