StAXSource から DOMResult に変換することで、StAX を使用して XML コンテンツを読み取り、その一部を DOM フラグメントに解析しています。ただし、いずれかの要素がデフォルトの XML 名前空間 (xmlns="") を再定義すると、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 のデフォルト実装のバグと考えるべきですか?