mrglavas    2004/02/12 15:26:06

  Modified:    java/src/org/apache/xerces/parsers AbstractDOMParser.java
                        DOMParserImpl.java
  Log:
  Fixing behaviour for interrupts and abort. We were

  throwing a RuntimeException to stop parsing but

  this bubbled up to the user. Instead throw a

  unique instance of RuntimeException and consume

  it in the parse methods.
  
  Revision  Changes    Path
  1.105     +14 -9     
xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java
  
  Index: AbstractDOMParser.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/AbstractDOMParser.java,v
  retrieving revision 1.104
  retrieving revision 1.105
  diff -u -r1.104 -r1.105
  --- AbstractDOMParser.java    10 Feb 2004 19:14:06 -0000      1.104
  +++ AbstractDOMParser.java    12 Feb 2004 23:26:06 -0000      1.105
  @@ -195,6 +195,11 @@
       protected static final String PSVI_DOCUMENT_CLASS_NAME =
       "org.apache.xerces.dom.PSVIDocumentImpl";
       
  +    /**
  +     * If the user stops the process, this exception will be thrown.
  +     */
  +    public static final RuntimeException abort = new RuntimeException();
  +    
       // debugging
       
       private static final boolean DEBUG_EVENTS = false;
  @@ -628,7 +633,7 @@
                   short code = fDOMFilter.acceptNode (comment);
                   switch (code) {
                       case LSParserFilter.FILTER_INTERRUPT:{
  -                        throw new RuntimeException ("The normal processing of the 
document was interrupted.");
  +                        throw abort;
                       }
                       case LSParserFilter.FILTER_REJECT:{
                           // REVISIT: the constant FILTER_REJECT should be changed 
when new
  @@ -710,7 +715,7 @@
                   short code = fDOMFilter.acceptNode (pi);
                   switch (code) {
                       case LSParserFilter.FILTER_INTERRUPT:{
  -                        throw new RuntimeException ("The normal processing of the 
document was interrupted.");
  +                        throw abort;
                       }
                       case LSParserFilter.FILTER_REJECT:{
                           // fall through to SKIP since PI has no children.
  @@ -1012,7 +1017,7 @@
                       switch (code) {
                           case LSParserFilter.FILTER_INTERRUPT :
                               {
  -                                throw new RuntimeException("The normal processing 
of the document was interrupted.");
  +                                throw abort;
                               }
                           case LSParserFilter.FILTER_REJECT :
                               {
  @@ -1295,7 +1300,7 @@
                       short code = fDOMFilter.acceptNode (fCurrentNode);
                       switch (code) {
                           case LSParserFilter.FILTER_INTERRUPT:{
  -                            throw new RuntimeException ("The normal processing of 
the document was interrupted.");
  +                            throw abort;
                           }
                           case LSParserFilter.FILTER_REJECT:{
                               Node parent = fCurrentNode.getParentNode ();
  @@ -1387,7 +1392,7 @@
                       short code = fDOMFilter.acceptNode (fCurrentCDATASection);
                       switch (code) {
                           case LSParserFilter.FILTER_INTERRUPT:{
  -                            throw new RuntimeException ("The normal processing of 
the document was interrupted.");
  +                            throw abort;
                           }
                           case LSParserFilter.FILTER_REJECT:{
                               // fall through to SKIP since CDATA section has no 
children.
  @@ -1499,7 +1504,7 @@
                       short code = fDOMFilter.acceptNode (fCurrentNode);
                       switch (code) {
                           case LSParserFilter.FILTER_INTERRUPT:{
  -                            throw new RuntimeException ("The normal processing of 
the document was interrupted.");
  +                            throw abort;
                           }
                           case LSParserFilter.FILTER_REJECT:{
                               Node parent = fCurrentNode.getParentNode ();
  @@ -2548,7 +2553,7 @@
                       short code = fDOMFilter.acceptNode (child);
                       switch (code) {
                           case LSParserFilter.FILTER_INTERRUPT:{
  -                            throw new RuntimeException ("The normal processing of 
the document was interrupted.");
  +                            throw abort;
                           }
                           case LSParserFilter.FILTER_REJECT:{
                               // fall through to SKIP since Comment has no children.
  @@ -2572,7 +2577,7 @@
        * @see org.w3c.dom.ls.LSParser#abort()
        */
       public void abort () {
  -        throw new RuntimeException ();
  +        throw abort;
       }
       
       
  
  
  
  1.15      +32 -25    xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java
  
  Index: DOMParserImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xerces/java/src/org/apache/xerces/parsers/DOMParserImpl.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DOMParserImpl.java        30 Jan 2004 00:16:27 -0000      1.14
  +++ DOMParserImpl.java        12 Feb 2004 23:26:06 -0000      1.15
  @@ -853,17 +853,21 @@
               fBusy = false;
           } catch (Exception e){
               fBusy = false;
  -            if (fErrorHandler != null) {
  -                DOMErrorImpl error = new DOMErrorImpl ();
  -                error.fException = e;
  -                error.fMessage = e.getMessage ();
  -                error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  -                fErrorHandler.getErrorHandler ().handleError (error);
  +            // Consume this exception if the user 
  +            // issued an interrupt or an abort.
  +            if (e != abort) {
  +                if (fErrorHandler != null) {
  +                    DOMErrorImpl error = new DOMErrorImpl ();
  +                    error.fException = e;
  +                    error.fMessage = e.getMessage ();
  +                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                    fErrorHandler.getErrorHandler ().handleError (error);
  +                }
  +                if (DEBUG) {
  +                    e.printStackTrace ();
  +                }
  +                throw new LSException(LSException.PARSE_ERR, e.getMessage());
               }
  -            if (DEBUG) {
  -                e.printStackTrace ();
  -            }
  -            throw new LSException(LSException.PARSE_ERR, e.getMessage());
           }
           return getDocument ();
       }
  @@ -890,19 +894,22 @@
               fBusy = false;
           } catch (Exception e) {
               fBusy = false;
  -            if (fErrorHandler != null) {
  -                DOMErrorImpl error = new DOMErrorImpl ();
  -                error.fException = e;
  -                error.fMessage = e.getMessage ();
  -                error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  -                fErrorHandler.getErrorHandler ().handleError (error);
  -            }
  -            if (DEBUG) {
  -                            e.printStackTrace ();
  -                        }
  -            throw new LSException(LSException.PARSE_ERR, e.getMessage());         
  +            // Consume this exception if the user 
  +            // issued an interrupt or an abort.
  +            if (e != abort) {
  +                if (fErrorHandler != null) {
  +                   DOMErrorImpl error = new DOMErrorImpl ();
  +                   error.fException = e;
  +                   error.fMessage = e.getMessage ();
  +                   error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
  +                   fErrorHandler.getErrorHandler().handleError (error);
  +                }
  +                if (DEBUG) {
  +                   e.printStackTrace ();
  +                }
  +                throw new LSException(LSException.PARSE_ERR, e.getMessage());
  +            }   
           }
  -        
           return getDocument ();
       }
       
  @@ -990,8 +997,8 @@
       public void abort () {
           // If parse operation is in progress then reset it
           if ( fBusy ) {
  -             fBusy = false;
  -            throw new RuntimeException("Stopped at user request");
  +            fBusy = false;
  +            throw abort;
           }
           return; // If not busy then this is noop
       }
  
  
  

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

Reply via email to