diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java index b02b477825..6caa32627d 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java @@ -681,6 +681,9 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { // ensure all held resources are freed revert(); + // ensure resources associated with package parts are closed + closeParts(); + // Clear this.contentTypeManager.clearAll(); } @@ -1870,6 +1873,10 @@ public abstract class OPCPackage implements RelationshipSource, Closeable { */ public abstract boolean isClosed(); + protected void closeParts() { + partList.closeParts(); + } + @Override public String toString() { return "OPCPackage{" + diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/PackagePartCollection.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/PackagePartCollection.java index b9fb281997..96a8ad13e6 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/PackagePartCollection.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/PackagePartCollection.java @@ -112,8 +112,6 @@ public final class PackagePartCollection implements Serializable { return packagePartLookup.size(); } - - /** * Get an unused part index based on the namePattern, which doesn't exist yet * and has the lowest positive index @@ -141,4 +139,11 @@ public final class PackagePartCollection implements Serializable { .mapToInt(indexFromName) .collect(SparseBitSet::new, SparseBitSet::set, (s1,s2) -> s1.or(s2)).nextClearBit(1); } + + // used to ensure resources are closed when they are no longer needed + void closeParts() { + for (PackagePart part : packagePartLookup.values()) { + part.close(); + } + } } diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java index 22ef9023d9..0ae478a6cd 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java @@ -595,12 +595,15 @@ public final class ZipPackage extends OPCPackage { } } } + + // ensure resources associated with package parts are closed + closeParts(); } /** - * Create a unique identifier to be use as a temp file name. + * Create a unique identifier to be used as a temp file name. * - * @return A unique identifier use to be use as a temp file name. + * @return A unique identifier to be used as a temp file name. */ private synchronized String generateTempFileName(File directory) { File tmpFilename; diff --git a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java index 3ca7adbe0b..8774043a14 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java +++ b/poi-ooxml/src/main/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java @@ -134,14 +134,12 @@ public class ZipPackagePart extends PackagePart { } @Override - @NotImplemented public void close() { - throw new InvalidOperationException("Method not implemented !"); + // do nothing } @Override - @NotImplemented public void flush() { - throw new InvalidOperationException("Method not implemented !"); + // do nothing } }