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]