Uploaded image for project: 'Xerces2-J'
  1. Xerces2-J
  2. XERCESJ-1033

Empty CDATA section is not retrievable (child is null)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 2.6.2
    • None
    • DOM (Level 3 Core)
    • None
    • JDK 1.4.2

    Description

      If a CDATA section is empty, ie <![CDATA[]]>, it is not possible to retrieve this node (eg by getFirstChild()). Instead, null is returned.
      From org.w3c.dom.Node javadoc, getFirstChild() only returns null if there is no child. And if there is a CDATA section child, getNodeValue returns "content of the CDATA Section", so in this case by getFirstChild().getNodeValue() an empty string must be returned. In fact, by this call, a NullPointerException gets thrown.

      XML-test-document:
      ----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----
      <test><![CDATA[]]></test>
      ----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----

      Java-test-program:
      ----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----
      import javax.xml.parsers.DocumentBuilder;
      import javax.xml.parsers.DocumentBuilderFactory;

      import org.w3c.dom.Document;
      import org.w3c.dom.Element;
      import org.w3c.dom.Node;

      public class XercesTester {

      public static void main(String[] args) {
      try{
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder parser = factory.newDocumentBuilder();
      Document doc = parser.parse("c:/test.xml");
      Element testNode = doc.getDocumentElement();
      System.out.println("Test Root Node: " + testNode.getNodeName());
      System.out.println("Node Value of Root Node: " + testNode.getNodeValue());
      Node cDataNode = testNode.getFirstChild();
      if (cDataNode == null)

      { System.out.println("CDATA Node is null - everything stopped, xml implementation failed!"); }

      else

      { System.out.println("CDATA Node: " + cDataNode.getNodeName()); System.out.println("Node Value of CDATA Node: ---" + cDataNode.getNodeValue() + "---"); }

      } catch (Exception e)

      { e.printStackTrace(); }

      }
      }
      ----cut---cut---cut---cut---cut---cut---cut---cut---cut---cut---cut----

      Attachments

        1. bug_1033_patch.txt
          0.8 kB
          Nathan Beyer

        Activity

          People

            Unassigned Unassigned
            dbeutner Detlev Beutner
            Votes:
            2 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated: