Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8169772

[JAXP] XALAN: Transformation of DOM with null valued text node causes NPE

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 9
    • None
    • xml
    • None

      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)

            clanger Christoph Langer
            clanger Christoph Langer
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: