You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2020/04/01 23:23:55 UTC

svn commit: r1876018 - in /poi: site/src/documentation/content/xdocs/ trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/

Author: kiwiwings
Date: Wed Apr  1 23:23:55 2020
New Revision: 1876018

URL: http://svn.apache.org/viewvc?rev=1876018&view=rev
Log:
#64301 - Allow try-with-resources with OPCPackage.revert()

Modified:
    poi/site/src/documentation/content/xdocs/changes.xml
    poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
    poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java

Modified: poi/site/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/changes.xml?rev=1876018&r1=1876017&r2=1876018&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/changes.xml (original)
+++ poi/site/src/documentation/content/xdocs/changes.xml Wed Apr  1 23:23:55 2020
@@ -85,6 +85,7 @@
             <action type="fix" fixes-bug="63624" context="XWPF">setText in XWPFTableCell updates the xml and also updates the runs and iruns</action>
             <action type="fix" fixes-bug="github-170" context="XWPF">XWPFTableCell does not process bodyElements when handle paragraph</action>
             <action type="fix" fixes-bug="github-171" context="XWPF">XWPFNumbering.addAbstractNum will definitely throw an exception</action>
+            <action type="fix" fixes-bug="64301" context="OPC">Allow try-with-resources with OPCPackage.revert()</action>
         </actions>
     </release>
 

Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java?rev=1876018&r1=1876017&r2=1876018&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/OPCPackage.java Wed Apr  1 23:23:55 2020
@@ -32,11 +32,16 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.poi.ooxml.util.PackageHelper;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException;
@@ -210,7 +215,7 @@ public abstract class OPCPackage impleme
            throw e;
        }
    }
-   
+
 	/**
 	 * Open a package.
 	 *
@@ -230,7 +235,7 @@ public abstract class OPCPackage impleme
 		if (path == null || path.trim().isEmpty()) {
 			throw new IllegalArgumentException("'path' must be given");
 		}
-		
+
 		File file = new File(path);
 		if (file.exists() && file.isDirectory()) {
 			throw new IllegalArgumentException("path must not be a directory");
@@ -383,7 +388,7 @@ public abstract class OPCPackage impleme
 		try {
 			// Content type manager
 			pkg.contentTypeManager = new ZipContentTypeManager(null, pkg);
-			
+
 			// Add default content types for .xml and .rels
 			pkg.contentTypeManager.addContentType(
 					PackagingURIHelper.createPartName(
@@ -421,7 +426,7 @@ public abstract class OPCPackage impleme
 
 	/**
 	 * Close the open, writable package and save its content.
-	 * 
+	 *
 	 * If your package is open read only, then you should call {@link #revert()}
 	 *  when finished with the package.
 	 *
@@ -432,8 +437,12 @@ public abstract class OPCPackage impleme
 	 */
 	@Override
     public void close() throws IOException {
+		if (isClosed()) {
+			return;
+		}
+
 		if (this.packageAccess == PackageAccess.READ) {
-			logger.log(POILogger.WARN, 
+			logger.log(POILogger.WARN,
 			        "The close() method is intended to SAVE a package. This package is open in READ ONLY mode, use the revert() method instead !");
 			revert();
 			return;
@@ -707,11 +716,11 @@ public abstract class OPCPackage impleme
 	/**
 	 * Load the parts of the archive if it has not been done yet. The
 	 * relationships of each part are not loaded.
-	 * 
+	 *
 	 * Note - Rule M4.1 states that there may only ever be one Core
 	 *  Properties Part, but Office produced files will sometimes
 	 *  have multiple! As Office ignores all but the first, we relax
-	 *  Compliance with Rule M4.1, and ignore all others silently too. 
+	 *  Compliance with Rule M4.1, and ignore all others silently too.
 	 *
 	 * @return All this package's parts.
 	 * @throws InvalidFormatException if the package is not valid.
@@ -1477,16 +1486,16 @@ public abstract class OPCPackage impleme
 		}
 
 		this.throwExceptionIfReadOnly();
-		
+
 		// You shouldn't save the the same file, do a close instead
-		if(targetFile.exists() && 
+		if(targetFile.exists() &&
 		        targetFile.getAbsolutePath().equals(this.originalPackagePath)) {
 		    throw new InvalidOperationException(
 		            "You can't call save(File) to save to the currently open " +
 		            "file. To save to the current file, please just call close()"
 		    );
 		}
-		
+
 		// Do the save
 		try (FileOutputStream fos = new FileOutputStream(targetFile)) {
 			this.save(fos);
@@ -1649,9 +1658,14 @@ public abstract class OPCPackage impleme
      *      e.g. "/ppt/slides/slide#.xml"
      * @return the next available part name index
      * @throws InvalidFormatException if the nameTemplate is null or doesn't contain
-     *      the index char (#) or results in an invalid part name 
+     *      the index char (#) or results in an invalid part name
      */
     public int getUnusedPartIndex(final String nameTemplate) throws InvalidFormatException {
         return partList.getUnusedPartIndex(nameTemplate);
     }
+
+	/**
+	 * Has close been called already?
+	 */
+	public abstract boolean isClosed();
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java?rev=1876018&r1=1876017&r2=1876018&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java Wed Apr  1 23:23:55 2020
@@ -564,4 +564,11 @@ public final class ZipPackage extends OP
     public ZipEntrySource getZipArchive() {
         return zipArchive;
     }
+
+    @Override
+    public boolean isClosed() {
+        // if zipArchive == null, it might be created on the fly
+        // so only return true, if a zip archive was initialized before
+        return zipArchive != null && zipArchive.isClosed();
+    }
 }

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?rev=1876018&r1=1876017&r2=1876018&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java Wed Apr  1 23:23:55 2020
@@ -78,7 +78,6 @@ import org.apache.poi.EncryptedDocumentE
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.ooxml.util.DocumentHelper;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException;
 import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
@@ -431,8 +430,6 @@ public class TestSignatureInfo {
                 boolean b = si.verifySignature();
                 assertFalse("signature should be broken", b);
             }
-            thrown.expectMessage("Fail to save: an error occurs while saving the package : Zip File is close");
-            thrown.expect(OpenXML4JRuntimeException.class);
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org