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

Implementation of org.w3c.dom.ls.DOMParser changes structure of XML document

XMLWordPrintable

    • b49
    • x86, sparc
    • linux, solaris_2.6, solaris_9, windows_xp

        Name: apR10229 Date: 09/24/2003


        Filed By : SPB JCK team (###@###.###)
        JDK : java full version "1.5.0-beta-b20"
        JCK : 1.5
        Platform[s] : Solaris
        switch/Mode :
        JCK test owner : http://javaweb.eng/jct/sqe/JCK-tck/usr/owners.jto
        Failing Test [s] : N/A


        Problem description
        ===================
        If DOMParser uses a filter, skipping one element, that has two children, then it
        constructs wrong DOM structure. For example, if we shall skip element node <ELEMENT1>, using
        FILTER_SKIP flag, for following XML:

        <ROOT><ELEMENT1><CHILD1/><CHILD2/></ELEMENT1></ROOT>

        after parsing we'll get:

        <ROOT><CHILD1><CHILD2/></CHILD1></ROOT>

        This behavior isn't described in the Java API Spec.
            
        Minimized test:
        ===============
        ------- Test.java -------
        import java.io.*;
        import org.w3c.dom.ls.*;
        import org.w3c.dom.*;
        import javax.xml.parsers.*;
        import org.xml.sax.*;
        import org.w3c.dom.traversal.*;

        public class Test {
            public static void main(String[] argv) {
                String xml = "<?xml version=\"1.0\"?><ROOT><ELEMENT1><CHILD1/><CHILD2/></ELEMENT1></ROOT>";
                System.out.println("Before parsing: "+xml);
                DocumentBuilder parser = null;
                Document doc = null;
                try {
                    parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
                    doc = parser.parse(new StringBufferInputStream(xml));
                } catch (Throwable e) {
                    e.printStackTrace();
                }
                DOMImplementationLS implLS = (DOMImplementationLS) doc.getImplementation().getFeature("LS","3.0");
                DOMParser dp = implLS.createDOMParser(DOMImplementationLS.MODE_SYNCHRONOUS,null);
                DOMInput src = implLS.createDOMInput();
                src.setStringData(xml);
                dp.setFilter(
                    new DOMParserFilter() {
                        public short startElement(Element elt) {
        if (elt.getTagName().equals("ELEMENT1")) {
        return FILTER_SKIP;
        }
        return FILTER_ACCEPT;
                        }
                        public short acceptNode(Node enode) {
        return FILTER_ACCEPT;
        }
        public int getWhatToShow() {
        return NodeFilter.SHOW_ALL;
        }
        }
                );
                Document parsedDoc = dp.parse(src);
                DOMSerializer ser = implLS.createDOMSerializer();
                System.out.println("After parsing: "+ser.writeToString(parsedDoc));
            }
        }

        ------- end-of-Test.java -------

        Minimized test output:
        ======================
        Before parsing: <?xml version="1.0"?><ROOT><ELEMENT1><CHILD1/><CHILD2/></ELEMENT1></ROOT>
        After parsing: <?xml version="1.0"?><ROOT><CHILD1><CHILD2/></CHILD1></ROOT>


        JCK test source location:
        ==========================
        /java/re/jck/1.5/promoted/latest/JCK-runtime-15/tests

        Specific Machine Info:
        =====================
        SunOS orion 5.9 Generic_112233-03 sun4u sparc SUNW,Ultra-Enterprise

        ======================================================================

              rmandavasunw Ramesh Mandava (Inactive)
              pavsunw Pav Pav (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: