You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2006/09/30 23:36:30 UTC
svn commit: r451674 - in
/xerces/java/branches/stax-dev/src/org/apache/xerces/stax:
AsyncSAXParser.java SAXXMLStreamReaderImpl.java StAXSAXHandler.java
Author: mrglavas
Date: Sat Sep 30 14:36:30 2006
New Revision: 451674
URL: http://svn.apache.org/viewvc?view=rev&rev=451674
Log:
Fixing JIRA Issue #1182:
http://issues.apache.org/jira/browse/XERCESJ-1182
There was a race condition which allowed the XMLStreamReader constructor to
return before the start document event is produced. I've fixed that as well
as significantly simplifying the thread handling. There was a boolean that
was used to track which thread was running. Since only one thread is running
at a time we don't need it.
Modified:
xerces/java/branches/stax-dev/src/org/apache/xerces/stax/AsyncSAXParser.java
xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java
xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java
Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/AsyncSAXParser.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/AsyncSAXParser.java?view=diff&rev=451674&r1=451673&r2=451674
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/AsyncSAXParser.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/AsyncSAXParser.java Sat Sep 30 14:36:30 2006
@@ -32,10 +32,6 @@
XMLReader xr;
private InputSource is;
- // The flag which represents the status of AsyncSAXParser. If true,
- // the SAXParser is executing parsing work
- private boolean runningFlag;
-
// The buffer which records the Characters and Space
private char[] charactersBuf;
@@ -50,8 +46,7 @@
public AsyncSAXParser(XMLReader xr, InputSource is) {
this.xr = xr;
- this.is = is;
- this.runningFlag = false;
+ this.is = is;
}
/**
@@ -68,25 +63,6 @@
ex = e;
// throw new RuntimeException(e.getMessage(), e);
}
- }
-
- /**
- * Set the status of SAXParser
- *
- * @param flag
- */
- public synchronized void setRunningFlag(boolean flag) {
- runningFlag = flag;
-
- }
-
- /**
- * Get the status of SAXParser
- *
- * @return
- */
- public synchronized boolean getRunningFlag(){
- return runningFlag;
}
/**
Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java?view=diff&rev=451674&r1=451673&r2=451674
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/SAXXMLStreamReaderImpl.java Sat Sep 30 14:36:30 2006
@@ -89,7 +89,7 @@
* @param xif
*/
public SAXXMLStreamReaderImpl(XMLReader xr, InputSource is, XMLInputFactory xif)
- throws XMLStreamException {
+ throws XMLStreamException {
this.xif = xif;
this.curAttrs = new ArrayList();
@@ -112,14 +112,16 @@
dc = new NamespaceContextImpl();
- asp.start();
synchronized (asp) {
- while (asp.getRunningFlag() == true)
- asp.wait();
+ asp.start();
+ asp.wait();
+ if (asp.ex != null) {
+ throw new XMLStreamException(asp.ex.getMessage(), asp.ex);
+ }
}
}
- catch(Exception e) {
- throw new XMLStreamException("Error occurs during the SAX parsing process", e);
+ catch (InterruptedException e) {
+ throw new XMLStreamException("Error occured during the SAX parsing process", e);
}
}
@@ -150,10 +152,7 @@
* @throws XMLStreamException if there is a fatal error detecting the next state
*/
public boolean hasNext() throws XMLStreamException {
-
- if (curType == XMLStreamConstants.END_DOCUMENT)
- return false;
- return true;
+ return (curType != XMLStreamConstants.END_DOCUMENT);
}
/**
@@ -175,25 +174,19 @@
throw new XMLStreamException(asp.ex.getMessage(), asp.ex);
}
- synchronized(asp) {
- asp.setRunningFlag(true);
+ synchronized (asp) {
asp.notify();
try {
- while (asp.getRunningFlag() == true) {
- if(asp.ex != null) {
- asp.interrupt();
- throw new XMLStreamException(asp.ex.getMessage(), asp.ex);
- }
- asp.wait();
+ asp.wait();
+ if (asp.ex != null) {
+ throw new XMLStreamException(asp.ex.getMessage(), asp.ex);
}
-
return curType;
}
- catch (Exception e) {
- asp.interrupt();
+ catch (InterruptedException e) {
throw new XMLStreamException(
- "Error occurs when processing SAXSource", e);
+ "Error occured when processing SAXSource", e);
}
}
}
Modified: xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java
URL: http://svn.apache.org/viewvc/xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java?view=diff&rev=451674&r1=451673&r2=451674
==============================================================================
--- xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java (original)
+++ xerces/java/branches/stax-dev/src/org/apache/xerces/stax/StAXSAXHandler.java Sat Sep 30 14:36:30 2006
@@ -47,22 +47,16 @@
public void characters(char[] ch, int start, int length) throws SAXException {
try {
+ reader.setCurType(XMLStreamConstants.CHARACTERS);
+
+ if (reader.isCoalescing) {
+ buf.append(ch, start, length);
+ return;
+ }
+ asp.setCharacters(ch, start, length);
synchronized (asp) {
- reader.setCurType(XMLStreamConstants.CHARACTERS);
-
- if (reader.isCoalescing) {
- buf.append(ch, start, length);
- }
- else {
- asp.setCharacters(ch, start, length);
-
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
- }
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -70,14 +64,10 @@
}
}
- public void endDocument() throws SAXException{
+ public void endDocument() throws SAXException {
try {
- synchronized (asp) {
- checkCoalescing();
-
- reader.setCurType(XMLStreamConstants.END_DOCUMENT);
- asp.setRunningFlag(false);
- }
+ checkCoalescing();
+ reader.setCurType(XMLStreamConstants.END_DOCUMENT);
}
catch (Exception e) {
throw new SAXException(e.getMessage(), e);
@@ -86,21 +76,17 @@
public synchronized void endElement(String uri, String localName, String qName) throws SAXException {
try {
+ checkCoalescing();
+ reader.setCurType(XMLStreamConstants.END_ELEMENT);
+ asp.setElementName(uri, localName, (qName != null && qName.length() > 0) ? qName : localName);
+
synchronized (asp) {
- checkCoalescing();
-
- reader.setCurType(XMLStreamConstants.END_ELEMENT);
- asp.setElementName(uri, localName, (qName != null && qName.length() > 0) ? qName : localName);
-
- while (asp.getRunningFlag() == false) {
- asp.notify();
- asp.wait();
- }
-
- NamespaceContextImpl nci = (NamespaceContextImpl)reader.getNamespaceContext();
- nci.onEndElement();
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
+
+ NamespaceContextImpl nci = (NamespaceContextImpl)reader.getNamespaceContext();
+ nci.onEndElement();
}
catch (Exception e) {
throw new SAXException(e.getMessage(), e);
@@ -109,18 +95,14 @@
public synchronized void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
try {
+ checkCoalescing();
+
+ reader.setCurType(XMLStreamConstants.SPACE);
+ asp.setCharacters(ch, start, length);
+
synchronized (asp) {
- checkCoalescing();
-
- reader.setCurType(XMLStreamConstants.SPACE);
- asp.setCharacters(ch, start, length);
-
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -130,14 +112,10 @@
public synchronized void notationDecl(String name, String publicId, String systemId) throws SAXException {
try {
+ reader.setCurType(XMLStreamConstants.NOTATION_DECLARATION);
synchronized (asp) {
- reader.setCurType(XMLStreamConstants.NOTATION_DECLARATION);
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -149,14 +127,9 @@
try {
reader.setCurType(XMLStreamConstants.PROCESSING_INSTRUCTION);
asp.setPI(data, target);
-
synchronized (asp) {
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -167,14 +140,9 @@
public synchronized void startDocument() throws SAXException {
try {
reader.setCurType(XMLStreamConstants.START_DOCUMENT);
-
synchronized (asp) {
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -185,22 +153,18 @@
public synchronized void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
try {
+ checkCoalescing();
+
+ reader.setCurType(XMLStreamConstants.START_ELEMENT);
+ reader.initialElementAttrs(attributes);
+
+ NamespaceContextImpl nci = (NamespaceContextImpl)reader.getNamespaceContext();
+ nci.onStartElement();
+ asp.setElementName(uri, localName, (qName != null && qName.length() > 0) ? qName : localName);
+
synchronized (asp) {
- checkCoalescing();
-
- reader.setCurType(XMLStreamConstants.START_ELEMENT);
- reader.initialElementAttrs(attributes);
-
- NamespaceContextImpl nci = (NamespaceContextImpl)reader.getNamespaceContext();
- nci.onStartElement();
- asp.setElementName(uri, localName, (qName != null && qName.length() > 0) ? qName : localName);
-
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -212,14 +176,10 @@
public synchronized void unparsedEntityDecl(String name, String publicId,
String systemId, String notationName) throws SAXException {
try {
+ reader.setCurType(XMLStreamConstants.ENTITY_DECLARATION);
synchronized (asp) {
- reader.setCurType(XMLStreamConstants.ENTITY_DECLARATION);
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -252,18 +212,12 @@
public synchronized void skippedEntity(String name) throws SAXException{
try {
+ reader.setCurType(XMLStreamConstants.ENTITY_REFERENCE);
+ asp.setEntityName(name);
+ asp.setCharacters(null, 0, 0);
synchronized (asp) {
- checkCoalescing();
-
- reader.setCurType(XMLStreamConstants.ENTITY_REFERENCE);
- asp.setEntityName(name);
- asp.setCharacters(null, 0, 0);
- while (!asp.getRunningFlag()) {
- asp.notify();
- asp.wait();
- }
-
- asp.setRunningFlag(false);
+ asp.notify();
+ asp.wait();
}
}
catch (Exception e) {
@@ -276,13 +230,10 @@
char[] chs = buf.toString().toCharArray();
asp.setCharacters(chs, 0, chs.length);
buf.setLength(0);
-
- while (!asp.getRunningFlag()) {
+ synchronized (asp) {
asp.notify();
asp.wait();
}
-
- asp.setRunningFlag(false);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org