-
Bug
-
Resolution: Fixed
-
P3
-
None
-
None
-
b147
When a DOM to be transformed contains Text Nodes of value ‘null’, it causes an exception during XALAN XSLT transformation.
Such a situation would not occur if the JDK's Xerces parser is used to parse XML input and I've also not encountered other parsers which would create text nodes of value null. However, using the DOM API, it is possible to construct such an item and hence it should be handled.
I've added sample code [1] to produce an NPE [2].
[1] Sample code:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class TestTransformWithNullText {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
// create a small DOM
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new ByteArrayInputStream("<?xml version=\"1.0\"?><DOCROOT/>".getBytes()));
// insert a bad element
Element e = doc.createElement("ERROR");
e.appendChild(doc.createTextNode(null));
doc.getDocumentElement().appendChild(e);
// transform
ByteArrayOutputStream bos = new ByteArrayOutputStream();
TransformerFactory.newInstance().newTransformer().transform(
new DOMSource(doc.getDocumentElement()), new StreamResult(bos));
System.out.println(bos);
}
}
[2] Exception encountered:
Exception in thread "main" javax.xml.transform.TransformerException: java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:789)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:376)
at com.sap.cl.xml.test.transform.TestTransformWithNullText.main(TestTransformWithNullText.java:33)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(java.xml@9.0.0.1-internal/ToUnknownStream.java:342)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(java.xml@9.0.0.1-internal/TransformerImpl.java:718)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:780)
... 2 more
---------
java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(java.xml@9.0.0.1-internal/ToUnknownStream.java:342)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(java.xml@9.0.0.1-internal/TransformerImpl.java:718)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:780)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:376)
at com.sap.cl.xml.test.transform.TestTransformWithNullText.main(TestTransformWithNullText.java:33)
Such a situation would not occur if the JDK's Xerces parser is used to parse XML input and I've also not encountered other parsers which would create text nodes of value null. However, using the DOM API, it is possible to construct such an item and hence it should be handled.
I've added sample code [1] to produce an NPE [2].
[1] Sample code:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class TestTransformWithNullText {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
// create a small DOM
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse(new ByteArrayInputStream("<?xml version=\"1.0\"?><DOCROOT/>".getBytes()));
// insert a bad element
Element e = doc.createElement("ERROR");
e.appendChild(doc.createTextNode(null));
doc.getDocumentElement().appendChild(e);
// transform
ByteArrayOutputStream bos = new ByteArrayOutputStream();
TransformerFactory.newInstance().newTransformer().transform(
new DOMSource(doc.getDocumentElement()), new StreamResult(bos));
System.out.println(bos);
}
}
[2] Exception encountered:
Exception in thread "main" javax.xml.transform.TransformerException: java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:789)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:376)
at com.sap.cl.xml.test.transform.TestTransformWithNullText.main(TestTransformWithNullText.java:33)
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(java.xml@9.0.0.1-internal/ToUnknownStream.java:342)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(java.xml@9.0.0.1-internal/TransformerImpl.java:718)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:780)
... 2 more
---------
java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(java.xml@9.0.0.1-internal/ToUnknownStream.java:342)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:244)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:230)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(java.xml@9.0.0.1-internal/DOM2TO.java:94)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(java.xml@9.0.0.1-internal/TransformerImpl.java:718)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:780)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(java.xml@9.0.0.1-internal/TransformerImpl.java:376)
at com.sap.cl.xml.test.transform.TestTransformWithNullText.main(TestTransformWithNullText.java:33)