Calling createTextNode with null, e.g.:
Text text = document.createTextNode(null);
Causes Xalan 2.1.0 with Xerces 1.4 to throw a NullPointerException when trying to transform a Document containing it. This also happens with Xalan 2.0.1 and Xerces 1.3.1.
1. Is this a known problem?
2. Is it valid to create a Text node with a null value?
This code, which creats a simple Document containing a single Element with a single "null" Text node:
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
class TestXalan {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
TransformerFactory tFactory = TransformerFactory.newInstance();
Templates stylesheet = tFactory.newTemplates(new StreamSource(args[0]));
// build document with null Text node
Element element = document.createElement("test");
Text text = document.createTextNode(null);
element.appendChild(text);
document.appendChild(element);
Source source = new DOMSource(document);
Result result = new DOMResult();
stylesheet.newTransformer().transform(source, result);
}
}
Supplying it this stub stylesheet
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
Causes this Exception:
Exception in thread "main" javax.xml.transform.TransformerException
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1269)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:504)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1174)
at TestXalan.main(TestXalan.java:49)
---------
java.lang.NullPointerException
at org.apache.xml.utils.TreeWalker.dispatachChars(TreeWalker.java:284)
at org.apache.xml.utils.TreeWalker.startNode(TreeWalker.java:428)
at org.apache.xalan.transformer.TreeWalker2Result.startNode(TreeWalker2Result.java:247)
at org.apache.xml.utils.TreeWalker.traverse(TreeWalker.java:192)
at org.apache.xalan.transformer.TreeWalker2Result.traverse(TreeWalker2Result.java:114)
at org.apache.xalan.templates.ElemCopyOf.execute(ElemCopyOf.java:202)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2251)
at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2134)
at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1246)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:504)
at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1174)
at TestXalan.main(TestXalan.java:49)