This is an automated email from the ASF dual-hosted git repository.
fanningpj pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/poi.git
The following commit(s) were added to refs/heads/trunk by this push:
new c0e6a9bed0 close package parts when closing OPCPackage (#880)
c0e6a9bed0 is described below
commit c0e6a9bed0770dd5412bb08023d0df0d66aae5ea
Author: PJ Fanning <[email protected]>
AuthorDate: Thu Aug 14 10:58:46 2025 +0100
close package parts when closing OPCPackage (#880)
* close package parts when closing OPCPackage
* Update ZipPackagePart.java
---
.../src/main/java/org/apache/poi/openxml4j/opc/OPCPackage.java | 7 +++++++
.../java/org/apache/poi/openxml4j/opc/PackagePartCollection.java | 9 +++++++--
.../src/main/java/org/apache/poi/openxml4j/opc/ZipPackage.java | 7 +++++--
.../main/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java | 6 ++----
4 files changed, 21 insertions(+), 8 deletions(-)
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
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]