Browse Source

close input streams for parts

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1896461 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_5_2_0
PJ Fanning 2 years ago
parent
commit
42a2794ae7
19 changed files with 120 additions and 66 deletions
  1. 16
    1
      poi-ooxml/src/main/java/org/apache/poi/ooxml/util/PackageHelper.java
  2. 4
    1
      poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java
  3. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java
  4. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/CalculationChain.java
  5. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java
  6. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java
  7. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java
  8. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/SharedStringsTable.java
  9. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/SingleXmlCells.java
  10. 11
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/model/StylesTable.java
  11. 3
    2
      poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFPicture.java
  12. 3
    2
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPicture.java
  13. 13
    11
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCache.java
  14. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCacheDefinition.java
  15. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCacheRecords.java
  16. 17
    36
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java
  17. 3
    1
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTable.java
  18. 6
    2
      poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
  19. 17
    0
      poi-ooxml/src/test/java/org/apache/poi/xssf/model/TestStylesTable.java

+ 16
- 1
poi-ooxml/src/main/java/org/apache/poi/ooxml/util/PackageHelper.java View File

@@ -43,10 +43,25 @@ import org.apache.poi.util.IOUtils;
public final class PackageHelper {

public static OPCPackage open(InputStream is) throws IOException {
return open(is, false);
}

/**
* @param stream
* @param closeStream whether to close the stream (default is false)
* @since POI 5.2.0
* @return OPCPackage
* @throws IOException
*/
public static OPCPackage open(InputStream stream, boolean closeStream) throws IOException {
try {
return OPCPackage.open(is);
return OPCPackage.open(stream);
} catch (InvalidFormatException e){
throw new POIXMLException(e);
} finally {
if (closeStream) {
stream.close();
}
}
}


+ 4
- 1
poi-ooxml/src/main/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java View File

@@ -22,6 +22,7 @@ package org.apache.poi.xddf.usermodel.chart;
import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
@@ -147,7 +148,9 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
protected XDDFChart(PackagePart part) throws IOException, XmlException {
super(part);

chartSpace = ChartSpaceDocument.Factory.parse(part.getInputStream(), DEFAULT_XML_OPTIONS).getChartSpace();
try (InputStream stream = part.getInputStream()) {
chartSpace = ChartSpaceDocument.Factory.parse(stream, DEFAULT_XML_OPTIONS).getChartSpace();
}
}

/**

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java View File

@@ -77,7 +77,9 @@ public class XSSFBSharedStringsTable implements SharedStrings {
* Like POIXMLDocumentPart constructor
*/
XSSFBSharedStringsTable(PackagePart part) throws IOException, SAXException {
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

private void readFrom(InputStream inputStream) throws IOException {

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/CalculationChain.java View File

@@ -46,7 +46,9 @@ public class CalculationChain extends POIXMLDocumentPart {
*/
public CalculationChain(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

public void readFrom(InputStream is) throws IOException {

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java View File

@@ -76,7 +76,9 @@ public class CommentsTable extends POIXMLDocumentPart implements Comments {
*/
public CommentsTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}
public void readFrom(InputStream is) throws IOException {

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/ExternalLinksTable.java View File

@@ -56,7 +56,9 @@ public class ExternalLinksTable extends POIXMLDocumentPart {
*/
public ExternalLinksTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

public void readFrom(InputStream is) throws IOException {

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/MapInfo.java View File

@@ -63,7 +63,9 @@ public class MapInfo extends POIXMLDocumentPart {
*/
public MapInfo(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

public void readFrom(InputStream is) throws IOException {

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/SharedStringsTable.java View File

@@ -108,7 +108,9 @@ public class SharedStringsTable extends POIXMLDocumentPart implements SharedStri
*/
public SharedStringsTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

/**

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/SingleXmlCells.java View File

@@ -56,7 +56,9 @@ public class SingleXmlCells extends POIXMLDocumentPart {
*/
public SingleXmlCells(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

public void readFrom(InputStream is) throws IOException {

+ 11
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/model/StylesTable.java View File

@@ -155,7 +155,17 @@ public class StylesTable extends POIXMLDocumentPart implements Styles {
*/
public StylesTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

/**
* @since POI 5.2.0
*/
public StylesTable(InputStream stream) throws IOException {
super();
readFrom(stream);
}

public void setWorkbook(XSSFWorkbook wb) {

+ 3
- 2
poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFPicture.java View File

@@ -19,6 +19,7 @@ package org.apache.poi.xssf.streaming;

import java.awt.Dimension;
import java.io.IOException;
import java.io.InputStream;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -218,8 +219,8 @@ public final class SXSSFPicture implements Picture {
* @return image dimension in pixels
*/
protected static Dimension getImageDimension(PackagePart part, int type){
try {
return ImageUtils.getImageDimension(part.getInputStream(), type);
try (InputStream stream = part.getInputStream()) {
return ImageUtils.getImageDimension(stream, type);
} catch (IOException e){
//return a "singulariry" if ImageIO failed to read the image
LOG.atWarn().withThrowable(e).log("Failed to read image");

+ 3
- 2
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPicture.java View File

@@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel;

import java.awt.Dimension;
import java.io.IOException;
import java.io.InputStream;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -239,8 +240,8 @@ public final class XSSFPicture extends XSSFShape implements Picture {
* @return image dimension in pixels
*/
protected static Dimension getImageDimension(PackagePart part, int type){
try {
return ImageUtils.getImageDimension(part.getInputStream(), type);
try (InputStream stream = part.getInputStream()) {
return ImageUtils.getImageDimension(stream, type);
} catch (IOException e){
//return a "singulariry" if ImageIO failed to read the image
LOG.atWarn().withThrowable(e).log("Failed to read image");

+ 13
- 11
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCache.java View File

@@ -16,11 +16,6 @@
==================================================================== */
package org.apache.poi.xssf.usermodel;

import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;

import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.util.Beta;
@@ -28,6 +23,11 @@ import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCache;

import java.io.IOException;
import java.io.InputStream;

import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;

public class XSSFPivotCache extends POIXMLDocumentPart {

private CTPivotCache ctPivotCache;
@@ -55,16 +55,18 @@ public class XSSFPivotCache extends POIXMLDocumentPart {
@Beta
protected XSSFPivotCache(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}
@Beta
protected void readFrom(InputStream is) throws IOException {
try {
XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS);
//Removing root element
options.setLoadReplaceDocumentElement(null);
ctPivotCache = CTPivotCache.Factory.parse(is, options);
try {
XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS);
//Removing root element
options.setLoadReplaceDocumentElement(null);
ctPivotCache = CTPivotCache.Factory.parse(is, options);
} catch (XmlException e) {
throw new IOException(e.getLocalizedMessage());
}

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCacheDefinition.java View File

@@ -65,7 +65,9 @@ public class XSSFPivotCacheDefinition extends POIXMLDocumentPart{
@Beta
protected XSSFPivotCacheDefinition(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}
@Beta

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotCacheRecords.java View File

@@ -52,7 +52,9 @@ public class XSSFPivotCacheRecords extends POIXMLDocumentPart {
@Beta
protected XSSFPivotCacheRecords(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}
@Beta

+ 17
- 36
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java View File

@@ -16,21 +16,9 @@
==================================================================== */
package org.apache.poi.xssf.usermodel;

import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;

import javax.xml.namespace.QName;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DataConsolidateFunction;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Sheet;
@@ -41,26 +29,17 @@ import org.apache.poi.util.Beta;
import org.apache.poi.util.Internal;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCacheSource;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColFields;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataField;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataFields;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTField;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTItems;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTLocation;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageField;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageFields;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCacheDefinition;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotField;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFields;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotTableDefinition;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotTableStyle;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRowFields;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheetSource;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STAxis;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataConsolidateFunction;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STItemType;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.STSourceType;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;

import javax.xml.namespace.QName;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;

public class XSSFPivotTable extends POIXMLDocumentPart {

@@ -95,13 +74,15 @@ public class XSSFPivotTable extends POIXMLDocumentPart {
@Beta
protected XSSFPivotTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}
@Beta
public void readFrom(InputStream is) throws IOException {
try {
XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS);
try {
XmlOptions options = new XmlOptions(DEFAULT_XML_OPTIONS);
//Removing root element
options.setLoadReplaceDocumentElement(null);
pivotTableDefinition = CTPivotTableDefinition.Factory.parse(is, options);

+ 3
- 1
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFTable.java View File

@@ -81,7 +81,9 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
*/
public XSSFTable(PackagePart part) throws IOException {
super(part);
readFrom(part.getInputStream());
try (InputStream stream = part.getInputStream()) {
readFrom(stream);
}
}

/**

+ 6
- 2
poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java View File

@@ -297,7 +297,11 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
* input format
*/
public XSSFWorkbook(InputStream is) throws IOException {
this(PackageHelper.open(is));
this(is, false);
}

private XSSFWorkbook(InputStream is, boolean closeStream) throws IOException {
this(PackageHelper.open(is, closeStream));
}

/**
@@ -353,7 +357,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Date1904Su
* @since POI 4.0.0
*/
public XSSFWorkbook(PackagePart part) throws IOException {
this(part.getInputStream());
this(part.getInputStream(), true);
}

/**

+ 17
- 0
poi-ooxml/src/test/java/org/apache/poi/xssf/model/TestStylesTable.java View File

@@ -17,6 +17,9 @@

package org.apache.poi.xssf.model;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

@@ -28,6 +31,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;

import org.apache.poi.ss.usermodel.BuiltinFormats;
@@ -91,6 +96,18 @@ public final class TestStylesTable {
}
}

@Test
void testLoadStream() throws IOException {
try (OPCPackage pkg = XSSFTestDataSamples.openSamplePackage(testFile)) {
ArrayList<PackagePart> parts = pkg.getPartsByContentType(XSSFRelation.STYLES.getContentType());
assertEquals(1, parts.size());
try (InputStream stream = parts.get(0).getInputStream()) {
StylesTable st = new StylesTable(stream);
doTestExisting(st);
}
}
}

@Test
void testLoadSaveLoad() throws IOException {
try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook(testFile)) {

Loading…
Cancel
Save