Author: mrglavas
Date: Tue Sep 19 13:20:53 2006
New Revision: 447948

URL: http://svn.apache.org/viewvc?view=rev&rev=447948
Log:
Fixing a bug Ron Gavlin reported on the j-users list. When processing schema 
documents

we mark the DOM nodes we've processed as "hidden" so that we don't revisit 
them. For

input from Xerces' DOM implementation we were marking the nodes directly. If 
the same

DOM was fed again to the schema loader the nodes were still marked as hidden 
and so

weren't being processed. We should never mutate a user supplied DOM. I've 
modified the 

code so that we always use the hidden node Hashtable if the input is anything 
other than 

the schema opti DOM.

Modified:
    
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
    xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
    xerces/java/trunk/src/org/apache/xerces/util/DOMUtil.java

Modified: 
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java?view=diff&rev=447948&r1=447947&r2=447948
==============================================================================
--- 
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
 (original)
+++ 
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDElementTraverser.java
 Tue Sep 19 13:20:53 2006
@@ -403,7 +403,7 @@
                         childName.equals(SchemaSymbols.ELT_UNIQUE)) {
                     // need to set <key>/<unique> to hidden before traversing 
it,
                     // because it has global scope
-                    DOMUtil.setHidden(child);
+                    DOMUtil.setHidden(child, fSchemaHandler.fHiddenNodes);
                     fSchemaHandler.fUniqueOrKeyTraverser.traverse(child, 
element, schemaDoc, grammar);
                     if(DOMUtil.getAttrValue(child, 
SchemaSymbols.ATT_NAME).length() != 0 ) {
                         fSchemaHandler.checkForDuplicateNames(

Modified: 
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java?view=diff&rev=447948&r1=447947&r2=447948
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java 
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java 
Tue Sep 19 13:20:53 2006
@@ -245,9 +245,8 @@
     private Hashtable fLocationPairs = null;
     private static final Hashtable EMPTY_TABLE = new Hashtable();
     
-    //this hashtable is keyded on by DOM node objects. 
-    //The table stores the hidden nodes
-    private Hashtable fHiddenNodes = null;
+    // Records which nodes are hidden when the input is a DOMInputSource.
+    Hashtable fHiddenNodes = null;
     
     // convenience methods
     private String null2EmptyString(String ns) {

Modified: xerces/java/trunk/src/org/apache/xerces/util/DOMUtil.java
URL: 
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/util/DOMUtil.java?view=diff&rev=447948&r1=447947&r2=447948
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/util/DOMUtil.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/util/DOMUtil.java Tue Sep 19 
13:20:53 2006
@@ -317,12 +317,12 @@
 
     // set this Node as being hidden, overloaded method
     public static void setHidden(Node node, Hashtable hiddenNodes) {
-        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl)
+        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl) {
             ((org.apache.xerces.impl.xs.opti.NodeImpl)node).setReadOnly(true, 
false);
-        else if (node instanceof org.apache.xerces.dom.NodeImpl)
-            ((org.apache.xerces.dom.NodeImpl)node).setReadOnly(true, false);
-        else
+        }
+        else {
                hiddenNodes.put(node, "");
+        }
     } // setHidden(node):void
     
     // set this Node as being visible
@@ -335,12 +335,12 @@
 
     // set this Node as being visible, overloaded method
     public static void setVisible(Node node, Hashtable hiddenNodes) {
-        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl)
-            ((org.apache.xerces.impl.xs.opti.NodeImpl)node).setReadOnly(false, 
false);
-        else if (node instanceof org.apache.xerces.dom.NodeImpl)
-            ((org.apache.xerces.dom.NodeImpl)node).setReadOnly(false, false);
-        else
-               hiddenNodes.remove(node);
+        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl) {
+            ((org.apache.xerces.impl.xs.opti.NodeImpl)node).setReadOnly(false, 
false);   
+        }
+        else {
+            hiddenNodes.remove(node);
+        }
     } // setVisible(node):void
     
     // is this node hidden?
@@ -354,12 +354,12 @@
 
     // is this node hidden? overloaded method
     public static boolean isHidden(Node node, Hashtable hiddenNodes) {
-        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl)
+        if (node instanceof org.apache.xerces.impl.xs.opti.NodeImpl) {
             return 
((org.apache.xerces.impl.xs.opti.NodeImpl)node).getReadOnly();
-        else if (node instanceof org.apache.xerces.dom.NodeImpl)
-            return ((org.apache.xerces.dom.NodeImpl)node).getReadOnly();
-        else
-               return hiddenNodes.containsKey(node);
+        }
+        else {
+            return hiddenNodes.containsKey(node);
+        }
     } // isHidden(Node):boolean
     
     /** Finds and returns the first child node with the given name. */



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to