You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Libor Valenta (JIRA)" <xe...@xml.apache.org> on 2006/03/17 08:42:16 UTC

[jira] Created: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Parsed document is not fully initialized until getFirstChild() is called
------------------------------------------------------------------------

         Key: XERCESJ-1147
         URL: http://issues.apache.org/jira/browse/XERCESJ-1147
     Project: Xerces2-J
        Type: Bug
    Versions: 2.8.0    
 Environment: java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

Saxon: saxonb8-7j
    Reporter: Libor Valenta


I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 

Here is simple code to demostrate the problem Test .java:

import org.w3c.dom.Document;
import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.StringReader;
import java.io.StringWriter;

public class Test {

  // this will call test1() which DOES call getFirstChild() before document is returned
  static String XSL1 = "<?xml version=\"1.0\"?>\n" +
          "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
          "  <xsl:template match=\"/\">\n" +
          "    <xsl:copy-of select=\"test:test1()\"/>\n" +
          "  </xsl:template>\n" +
          "</xsl:stylesheet>";

  // this will call test2() which DOES NOT call getFirstChild() before document is returned
  static String XSL2 = "<?xml version=\"1.0\"?>\n" +
          "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
          "  <xsl:template match=\"/\">\n" +
          "    <xsl:copy-of select=\"test:test2()\"/>\n" +
          "  </xsl:template>\n" +
          "</xsl:stylesheet>";

  public static void main(String[] args) throws Exception {
    transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
    transform(XSL2);  // Result is: 
  }

  private static void transform(String xsl) throws TransformerException {
    Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
    StringWriter out = new StringWriter();
    transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
    System.out.println("Result is: " + out);
  }

  public static Document test1() throws Exception {
    DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));

    // next call has some side-effect that make things work, synchronizeChildren() ?
    // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
    document.getFirstChild();

    return document;
  }

  public static Document test2() throws Exception {
    DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
    return document;
  }
}

I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Updated: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1147?page=all ]

Michael Glavassevich updated XERCESJ-1147:
------------------------------------------

    Component: DOM (Level 3 Core)

> Parsed document is not fully initialized until getFirstChild() is called
> ------------------------------------------------------------------------
>
>          Key: XERCESJ-1147
>          URL: http://issues.apache.org/jira/browse/XERCESJ-1147
>      Project: Xerces2-J
>         Type: Bug

>   Components: DOM (Level 3 Core)
>     Versions: 2.8.0
>  Environment: java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
> Saxon: saxonb8-7j
>     Reporter: Libor Valenta

>
> I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 
> Here is simple code to demostrate the problem Test .java:
> import org.w3c.dom.Document;
> import org.xml.sax.InputSource;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> import java.io.StringReader;
> import java.io.StringWriter;
> public class Test {
>   // this will call test1() which DOES call getFirstChild() before document is returned
>   static String XSL1 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test1()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   // this will call test2() which DOES NOT call getFirstChild() before document is returned
>   static String XSL2 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test2()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   public static void main(String[] args) throws Exception {
>     transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
>     transform(XSL2);  // Result is: 
>   }
>   private static void transform(String xsl) throws TransformerException {
>     Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
>     StringWriter out = new StringWriter();
>     transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
>     System.out.println("Result is: " + out);
>   }
>   public static Document test1() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     // next call has some side-effect that make things work, synchronizeChildren() ?
>     // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
>     document.getFirstChild();
>     return document;
>   }
>   public static Document test2() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     return document;
>   }
> }
> I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Commented: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
    [ http://issues.apache.org/jira/browse/XERCESJ-1147?page=comments#action_12434270 ] 
            
Michael Glavassevich commented on XERCESJ-1147:
-----------------------------------------------

Your guess is as good as mine. The JDK development/maintenance operates independently of this project. If you're looking for a fix there you'll need to pursue it with Sun.

> Parsed document is not fully initialized until getFirstChild() is called
> ------------------------------------------------------------------------
>
>                 Key: XERCESJ-1147
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1147
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (Level 3 Core)
>    Affects Versions: 2.8.0
>         Environment: java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
> Saxon: saxonb8-7j
>            Reporter: Libor Valenta
>         Assigned To: Michael Glavassevich
>             Fix For: 2.8.1
>
>
> I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 
> Here is simple code to demostrate the problem Test .java:
> import org.w3c.dom.Document;
> import org.xml.sax.InputSource;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> import java.io.StringReader;
> import java.io.StringWriter;
> public class Test {
>   // this will call test1() which DOES call getFirstChild() before document is returned
>   static String XSL1 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test1()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   // this will call test2() which DOES NOT call getFirstChild() before document is returned
>   static String XSL2 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test2()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   public static void main(String[] args) throws Exception {
>     transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
>     transform(XSL2);  // Result is: 
>   }
>   private static void transform(String xsl) throws TransformerException {
>     Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
>     StringWriter out = new StringWriter();
>     transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
>     System.out.println("Result is: " + out);
>   }
>   public static Document test1() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     // next call has some side-effect that make things work, synchronizeChildren() ?
>     // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
>     document.getFirstChild();
>     return document;
>   }
>   public static Document test2() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     return document;
>   }
> }
> I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Assigned: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1147?page=all ]

Michael Glavassevich reassigned XERCESJ-1147:
---------------------------------------------

    Assignee: Michael Glavassevich

> Parsed document is not fully initialized until getFirstChild() is called
> ------------------------------------------------------------------------
>
>                 Key: XERCESJ-1147
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1147
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (Level 3 Core)
>    Affects Versions: 2.8.0
>         Environment: java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
> Saxon: saxonb8-7j
>            Reporter: Libor Valenta
>         Assigned To: Michael Glavassevich
>
> I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 
> Here is simple code to demostrate the problem Test .java:
> import org.w3c.dom.Document;
> import org.xml.sax.InputSource;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> import java.io.StringReader;
> import java.io.StringWriter;
> public class Test {
>   // this will call test1() which DOES call getFirstChild() before document is returned
>   static String XSL1 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test1()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   // this will call test2() which DOES NOT call getFirstChild() before document is returned
>   static String XSL2 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test2()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   public static void main(String[] args) throws Exception {
>     transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
>     transform(XSL2);  // Result is: 
>   }
>   private static void transform(String xsl) throws TransformerException {
>     Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
>     StringWriter out = new StringWriter();
>     transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
>     System.out.println("Result is: " + out);
>   }
>   public static Document test1() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     // next call has some side-effect that make things work, synchronizeChildren() ?
>     // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
>     document.getFirstChild();
>     return document;
>   }
>   public static Document test2() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     return document;
>   }
> }
> I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Commented: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Posted by "Libor Valenta (JIRA)" <xe...@xml.apache.org>.
    [ http://issues.apache.org/jira/browse/XERCESJ-1147?page=comments#action_12434232 ] 
            
Libor Valenta commented on XERCESJ-1147:
----------------------------------------

Is there any chance to get it in some JDK update?

> Parsed document is not fully initialized until getFirstChild() is called
> ------------------------------------------------------------------------
>
>                 Key: XERCESJ-1147
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1147
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (Level 3 Core)
>    Affects Versions: 2.8.0
>         Environment: java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
> Saxon: saxonb8-7j
>            Reporter: Libor Valenta
>         Assigned To: Michael Glavassevich
>             Fix For: 2.8.1
>
>
> I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 
> Here is simple code to demostrate the problem Test .java:
> import org.w3c.dom.Document;
> import org.xml.sax.InputSource;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> import java.io.StringReader;
> import java.io.StringWriter;
> public class Test {
>   // this will call test1() which DOES call getFirstChild() before document is returned
>   static String XSL1 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test1()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   // this will call test2() which DOES NOT call getFirstChild() before document is returned
>   static String XSL2 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test2()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   public static void main(String[] args) throws Exception {
>     transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
>     transform(XSL2);  // Result is: 
>   }
>   private static void transform(String xsl) throws TransformerException {
>     Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
>     StringWriter out = new StringWriter();
>     transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
>     System.out.println("Result is: " + out);
>   }
>   public static Document test1() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     // next call has some side-effect that make things work, synchronizeChildren() ?
>     // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
>     document.getFirstChild();
>     return document;
>   }
>   public static Document test2() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     return document;
>   }
> }
> I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org


[jira] Resolved: (XERCESJ-1147) Parsed document is not fully initialized until getFirstChild() is called

Posted by "Michael Glavassevich (JIRA)" <xe...@xml.apache.org>.
     [ http://issues.apache.org/jira/browse/XERCESJ-1147?page=all ]

Michael Glavassevich resolved XERCESJ-1147.
-------------------------------------------

    Fix Version/s: 2.8.1
       Resolution: Fixed

Seems like Saxon is casting a Xerces' DOM node directly to a NodeList. Because this bypasses the synchronizeChildren() call in ParentNode.getChildNodes() the children may not be expanded yet if getLength() or item() are called on the NodeList. This should be fixed now.

> Parsed document is not fully initialized until getFirstChild() is called
> ------------------------------------------------------------------------
>
>                 Key: XERCESJ-1147
>                 URL: http://issues.apache.org/jira/browse/XERCESJ-1147
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: DOM (Level 3 Core)
>    Affects Versions: 2.8.0
>         Environment: java version "1.5.0_06"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
> Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
> Saxon: saxonb8-7j
>            Reporter: Libor Valenta
>         Assigned To: Michael Glavassevich
>             Fix For: 2.8.1
>
>
> I have problems with Xerces bundled with JDK 1.5 as well as Xerces-J 2.8.0, I was usin XSLT 2.0 transformer Saxon 8.7 to access document produced by java extension. Problems go away when I call document.getFirstChild(); before returning document for the transformation, the side-effect of getFirstChild() makes me believe that there is something wrong with implementation of the Document. 
> Here is simple code to demostrate the problem Test .java:
> import org.w3c.dom.Document;
> import org.xml.sax.InputSource;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.stream.StreamResult;
> import javax.xml.transform.stream.StreamSource;
> import java.io.StringReader;
> import java.io.StringWriter;
> public class Test {
>   // this will call test1() which DOES call getFirstChild() before document is returned
>   static String XSL1 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test1()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   // this will call test2() which DOES NOT call getFirstChild() before document is returned
>   static String XSL2 = "<?xml version=\"1.0\"?>\n" +
>           "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"2.0\" xmlns:test=\"Test\">\n" +
>           "  <xsl:template match=\"/\">\n" +
>           "    <xsl:copy-of select=\"test:test2()\"/>\n" +
>           "  </xsl:template>\n" +
>           "</xsl:stylesheet>";
>   public static void main(String[] args) throws Exception {
>     transform(XSL1);  // Result is: <?xml version="1.0" encoding="UTF-8"?><y/>
>     transform(XSL2);  // Result is: 
>   }
>   private static void transform(String xsl) throws TransformerException {
>     Transformer transformer = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(xsl)));
>     StringWriter out = new StringWriter();
>     transformer.transform(new StreamSource(new StringReader("<x/>")), new StreamResult(out));
>     System.out.println("Result is: " + out);
>   }
>   public static Document test1() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     // next call has some side-effect that make things work, synchronizeChildren() ?
>     // likely bug in com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl
>     document.getFirstChild();
>     return document;
>   }
>   public static Document test2() throws Exception {
>     DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
>     Document document = documentBuilder.parse(new InputSource(new StringReader("<y/>")));
>     return document;
>   }
> }
> I do not know how Saxon is using the document, but whatever it does, it should behave same way for test1() and test2()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org