Author: mrglavas
Date: Sun Nov 2 13:05:02 2008
New Revision: 709933
URL: http://svn.apache.org/viewvc?rev=709933&view=rev
Log:
Fixing JIRA Issue #1335:
http://issues.apache.org/jira/browse/XERCESJ-1335
With an LSParserFilter, the rejection and skipping of nodes on startElement()
malfunctioned
if an element in the subtree has the same name as the filtered node. This
occurred because
the DOM parser used the name of the element to determine when it had reached
the end of the
subtree. So that recursive structures are processed correctly we now use the
element's depth.
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java?rev=709933&r1=709932&r2=709933&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/AbstractDOMParser.java
Sun Nov 2 13:05:02 2008
@@ -260,10 +260,10 @@
/** Base uri stack*/
protected final Stack fBaseURIStack = new Stack ();
- /** LSParserFilter: the QNAME of rejected element*/
- protected final QName fRejectedElement = new QName ();
+ /** LSParserFilter: tracks the element depth within a rejected subtree. */
+ protected int fRejectedElementDepth = 0;
- /** LSParserFilter: store qnames of skipped elements*/
+ /** LSParserFilter: store depth of skipped elements */
protected Stack fSkippedElemStack = null;
/** LSParserFilter: true if inside entity reference */
@@ -927,6 +927,7 @@
}
if (!fDeferNodeExpansion) {
if (fFilterReject) {
+ ++fRejectedElementDepth;
return;
}
Element el = createElementNode (element);
@@ -1034,15 +1035,20 @@
case LSParserFilter.FILTER_REJECT :
{
fFilterReject = true;
- fRejectedElement.setValues(element);
+ fRejectedElementDepth = 0;
return;
}
case LSParserFilter.FILTER_SKIP :
{
- fSkippedElemStack.push(element.clone());
+ fSkippedElemStack.push(Boolean.TRUE);
return;
}
- default : {}
+ default :
+ {
+ if (!fSkippedElemStack.isEmpty()) {
+ fSkippedElemStack.push(Boolean.FALSE);
+ }
+ }
}
}
}
@@ -1299,14 +1305,13 @@
if (fDOMFilter != null) {
if (fFilterReject) {
- if (element.equals (fRejectedElement)) {
+ if (fRejectedElementDepth-- == 0) {
fFilterReject = false;
}
return;
}
- if (!fSkippedElemStack.isEmpty ()) {
- if (fSkippedElemStack.peek ().equals (element)) {
- fSkippedElemStack.pop ();
+ if (!fSkippedElemStack.isEmpty()) {
+ if (fSkippedElemStack.pop() == Boolean.TRUE) {
return;
}
}
Modified:
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
URL:
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java?rev=709933&r1=709932&r2=709933&view=diff
==============================================================================
---
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
(original)
+++
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/parsers/DOMParserImpl.java
Sun Nov 2 13:05:02 2008
@@ -291,7 +291,7 @@
if (fSkippedElemStack != null) {
fSkippedElemStack.removeAllElements();
}
- fRejectedElement.clear();
+ fRejectedElementDepth = 0;
fFilterReject = false;
fSchemaType = null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]