< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java

Print this page
rev 1063 : 8172974: [JAXP] XALAN: Wrong result when transforming namespace unaware StAX Input

@@ -1,36 +1,26 @@
 /*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-/*
- * $Id: XSLTCDTMManager.java,v 1.2 2005/08/16 22:32:54 jeffsuttor Exp $
- */
-package com.sun.org.apache.xalan.internal.xsltc.dom;
 
-import javax.xml.stream.XMLEventReader;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.Source;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.stax.StAXSource;
+package com.sun.org.apache.xalan.internal.xsltc.dom;
 
 import com.sun.org.apache.xml.internal.dtm.DTM;
 import com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBase;
 import com.sun.org.apache.xml.internal.dtm.DTMException;
 import com.sun.org.apache.xml.internal.dtm.DTMWSFilter;

@@ -39,55 +29,53 @@
 import com.sun.org.apache.xml.internal.res.XMLMessages;
 import com.sun.org.apache.xml.internal.utils.SystemIDResolver;
 import com.sun.org.apache.xalan.internal.xsltc.trax.DOM2SAX;
 import com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX;
 import com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX;
-
+import javax.xml.stream.XMLEventReader;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.transform.stax.StAXSource;
+import jdk.xml.internal.JdkXmlUtils;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXNotRecognizedException;
 import org.xml.sax.SAXNotSupportedException;
 import org.xml.sax.XMLReader;
 
 /**
- * The default implementation for the DTMManager.
+ * The XSLTC DTMManager implementation.
  */
-public class XSLTCDTMManager extends DTMManagerDefault
-{
-
-    /** Set this to true if you want a dump of the DTM after creation */
-    private static final boolean DUMPTREE = false;
-
-    /** Set this to true if you want basic diagnostics */
-    private static final boolean DEBUG = false;
+public class XSLTCDTMManager extends DTMManagerDefault {
 
     /**
-     * Constructor DTMManagerDefault
+     * Constructor XSLTCDTMManager
      *
      */
-    public XSLTCDTMManager()
-    {
+    public XSLTCDTMManager() {
         super();
     }
 
     /**
      * Obtain a new instance of a <code>DTMManager</code>.
      * This static method creates a new factory instance.
      * The current implementation just returns a new XSLTCDTMManager instance.
      */
-    public static XSLTCDTMManager newInstance()
-    {
+    public static XSLTCDTMManager newInstance() {
         return new XSLTCDTMManager();
     }
 
     /**
      * Creates a new instance of the XSLTC DTM Manager service.
      * Creates a new instance of the default class
      * <code>com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager</code>.
      */
-      public static XSLTCDTMManager createNewDTMManagerInstance() {
-         return newInstance();
-      }
+    public static XSLTCDTMManager createNewDTMManagerInstance() {
+        return newInstance();
+    }
 
     /**
      * Get an instance of a DTM, loaded with the content from the
      * specified source.  If the unique flag is true, a new instance will
      * always be returned.  Otherwise it is up to the DTMManager to return a

@@ -169,20 +157,20 @@
      * @param newNameTable true if we want to use a separate ExpandedNameTable
      *                     for this DTM.
      *
      * @return a non-null DTM reference.
      */
-  public DTM getDTM(Source source, boolean unique,
-                    DTMWSFilter whiteSpaceFilter, boolean incremental,
-                    boolean doIndexing, boolean buildIdIndex,
-                    boolean newNameTable)
-  {
-    return getDTM(source, unique, whiteSpaceFilter, incremental,
-                  doIndexing, false, 0, buildIdIndex, newNameTable);
-  }
+    public DTM getDTM(Source source, boolean unique,
+                      DTMWSFilter whiteSpaceFilter, boolean incremental,
+                      boolean doIndexing, boolean buildIdIndex,
+                      boolean newNameTable)
+    {
+        return getDTM(source, unique, whiteSpaceFilter, incremental,
+                      doIndexing, false, 0, buildIdIndex, newNameTable);
+    }
 
-  /**
+    /**
      * Get an instance of a DTM, loaded with the content from the
      * specified source.  If the unique flag is true, a new instance will
      * always be returned.  Otherwise it is up to the DTMManager to return a
      * new instance or an instance that it already created and may be being used
      * by someone else.

@@ -210,16 +198,16 @@
     public DTM getDTM(Source source, boolean unique,
                       DTMWSFilter whiteSpaceFilter, boolean incremental,
                       boolean doIndexing, boolean hasUserReader, int size,
                       boolean buildIdIndex)
     {
-      return getDTM(source, unique, whiteSpaceFilter, incremental,
-                    doIndexing, hasUserReader, size,
-                    buildIdIndex, false);
-  }
+        return getDTM(source, unique, whiteSpaceFilter, incremental,
+                      doIndexing, hasUserReader, size,
+                      buildIdIndex, false);
+    }
 
-  /**
+    /**
      * Get an instance of a DTM, loaded with the content from the
      * specified source.  If the unique flag is true, a new instance will
      * always be returned.  Otherwise it is up to the DTMManager to return a
      * new instance or an instance that it already created and may be being used
      * by someone else.

@@ -244,20 +232,22 @@
      * @param newNameTable true if we want to use a separate ExpandedNameTable
      *                     for this DTM.
      *
      * @return a non-null DTM reference.
      */
-  public DTM getDTM(Source source, boolean unique,
-                    DTMWSFilter whiteSpaceFilter, boolean incremental,
-                    boolean doIndexing, boolean hasUserReader, int size,
-                    boolean buildIdIndex, boolean newNameTable)
-  {
-        if(DEBUG && null != source) {
-            System.out.println("Starting "+
-                         (unique ? "UNIQUE" : "shared")+
-                         " source: "+source.getSystemId());
+    public DTM getDTM(Source source, boolean unique,
+                      DTMWSFilter whiteSpaceFilter, boolean incremental,
+                      boolean doIndexing, boolean hasUserReader, int size,
+                      boolean buildIdIndex, boolean newNameTable)
+    {
+        /* Uncomment for debugging
+        if (null != source) {
+            System.out.println("Starting " +
+                (unique ? "UNIQUE" : "shared") +
+                " source: " + source.getSystemId());
         }
+        */
 
         int dtmPos = getFirstFreeDTMID();
         int documentID = dtmPos << IDENT_DTM_NODE_BITS;
 
         if ((null != source) && source instanceof StAXSource) {

@@ -296,21 +286,18 @@
                 }
                 else if (staxStream2SAX != null) {
                     staxStream2SAX.setContentHandler(dtm);
                     staxStream2SAX.parse();
                 }
-
-            }
-            catch (RuntimeException re) {
+            } catch (RuntimeException re) {
                 throw re;
-            }
-            catch (Exception e) {
+            } catch (Exception e) {
                 throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e);
             }
 
             return dtm;
-        }else if ((null != source) && source instanceof DOMSource) {
+        } else if ((null != source) && source instanceof DOMSource) {
             final DOMSource domsrc = (DOMSource) source;
             final org.w3c.dom.Node node = domsrc.getNode();
             final DOM2SAX dom2sax = new DOM2SAX(node);
 
             SAXImpl dtm;

@@ -332,22 +319,18 @@
 
             dom2sax.setContentHandler(dtm);
 
             try {
                 dom2sax.parse();
-            }
-            catch (RuntimeException re) {
+            } catch (RuntimeException re) {
                 throw re;
-            }
-            catch (Exception e) {
+            } catch (Exception e) {
                 throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e);
             }
 
             return dtm;
-        }
-        else
-        {
+        } else {
             boolean isSAXSource = (null != source)
                                   ? (source instanceof SAXSource) : true;
             boolean isStreamSource = (null != source)
                                   ? (source instanceof StreamSource) : false;
 

@@ -409,15 +392,12 @@
 
                 if(!hasUserReader || null == reader.getErrorHandler()) {
                     reader.setErrorHandler(dtm);
                 }
 
-                try {
-                    reader.setProperty("http://xml.org/sax/properties/lexical-handler", dtm);
-                }
-                catch (SAXNotRecognizedException e){}
-                catch (SAXNotSupportedException e){}
+                JdkXmlUtils.setXMLReaderPropertyIfSupport(reader,
+                    "http://xml.org/sax/properties/lexical-handler", dtm, false);
 
                 try {
                     reader.parse(xmlSource);
                 }
                 catch (RuntimeException re) {

@@ -429,14 +409,14 @@
                     if (!hasUserReader) {
                         releaseXMLReader(reader);
                     }
                 }
 
-                if (DUMPTREE) {
-                    System.out.println("Dumping SAX2DOM");
-                    dtm.dumpDTM(System.err);
-                }
+                /* Uncomment for debugging
+                System.out.println("Dumping SAX2DOM");
+                dtm.dumpDTM(System.err);
+                */
 
                 return dtm;
             }
             else {
                 // It should have been handled by a derived class or the caller
< prev index next >