src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java

Print this page

        

@@ -1,26 +1,26 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  */
 
 /*
- * Copyright 2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
-
 package com.sun.org.apache.xerces.internal.impl;
 
 import com.sun.xml.internal.stream.XMLBufferListener;
 import com.sun.xml.internal.stream.XMLEntityStorage;
 import com.sun.xml.internal.stream.XMLInputFactoryImpl;

@@ -401,10 +401,13 @@
     protected String fElementRawname ;
     protected boolean fShouldSkip = false;
     protected boolean fAdd = false ;
     protected boolean fSkip = false;
 
+    //indicates whether the parsing process should be stopped
+    private boolean stopProcess = false;
+
     /** Reusable Augmentations. */
     private Augmentations fTempAugmentations = null;
     //
     // Constructors
     //

@@ -505,13 +508,15 @@
                     break;
                 default :
                     throw new InternalError("processing event: " + event);
 
             }
-            //System.out.println("here in before calling next");
+
+            if (stopProcess) {
+                break;
+            }
             event = next();
-            //System.out.println("here in after calling next");
         } while (event!=XMLStreamConstants.END_DOCUMENT && complete);
 
         if(event == XMLStreamConstants.END_DOCUMENT) {
             fDocumentHandler.endDocument(null);
             return false;

@@ -519,11 +524,35 @@
 
         return true;
 
     } // scanDocument(boolean):boolean
 
+    /**
+     * Stops the parsing process.
+     */
+    @Override
+    public boolean stop() {
+        return stopProcess = true;
+    }
 
+    /**
+     * Resumes parsing after it was stopped by calling the stop method.
+     */
+    @Override
+    public boolean resume() {
+        //resume only if the process was stopped.
+        if (stopProcess) {
+            stopProcess = false;
+            try {
+                scanDocument(true);
+                return true;
+            } catch (IOException | XNIException ex) {
+                //can not resume the parsing process, do nothing.
+            }
+        }
+        return false;
+    }
 
     public com.sun.org.apache.xerces.internal.xni.QName getElementQName(){
         if(fScannerLastState == XMLEvent.END_ELEMENT){
             fElementQName.setValues(fElementStack.getLastPoppedElement());
         }

@@ -653,10 +682,11 @@
         fInScanContent = false;
         //skipping algorithm
         fShouldSkip = false;
         fAdd = false;
         fSkip = false;
+        stopProcess = false;
 
         fEntityStore = fEntityManager.getEntityStore();
         dtdGrammarUtil = null;
 
         if (fSecurityManager != null) {