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: [email protected]
For additional commands, e-mail: [email protected]