close resources

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1747092 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2016-06-06 23:34:17 +00:00
parent b8e38304f2
commit 60d35b92c6

View File

@ -70,18 +70,24 @@ public abstract class POIDocument {
/** /**
* Constructs from an old-style OPOIFS * Constructs from an old-style OPOIFS
*
* @param fs the filesystem the document is read from
*/ */
protected POIDocument(OPOIFSFileSystem fs) { protected POIDocument(OPOIFSFileSystem fs) {
this(fs.getRoot()); this(fs.getRoot());
} }
/** /**
* Constructs from an old-style OPOIFS * Constructs from an old-style OPOIFS
*
* @param fs the filesystem the document is read from
*/ */
protected POIDocument(NPOIFSFileSystem fs) { protected POIDocument(NPOIFSFileSystem fs) {
this(fs.getRoot()); this(fs.getRoot());
} }
/** /**
* Constructs from the default POIFS * Constructs from the default POIFS
*
* @param fs the filesystem the document is read from
*/ */
protected POIDocument(POIFSFileSystem fs) { protected POIDocument(POIFSFileSystem fs) {
this(fs.getRoot()); this(fs.getRoot());
@ -180,49 +186,46 @@ public abstract class POIDocument {
DirectoryNode dirNode = directory; DirectoryNode dirNode = directory;
NPOIFSFileSystem encPoifs = null; NPOIFSFileSystem encPoifs = null;
if (encryptionInfo != null) { String step = "getting";
try { try {
if (encryptionInfo != null) {
step = "getting encrypted";
InputStream is = encryptionInfo.getDecryptor().getDataStream(directory); InputStream is = encryptionInfo.getDecryptor().getDataStream(directory);
encPoifs = new NPOIFSFileSystem(is); try {
is.close(); encPoifs = new NPOIFSFileSystem(is);
dirNode = encPoifs.getRoot(); dirNode = encPoifs.getRoot();
} catch (Exception e) { } finally {
logger.log(POILogger.ERROR, "Error getting encrypted property set with name " + setName, e); is.close();
}
}
//directory can be null when creating new documents
if (dirNode == null || !dirNode.hasEntry(setName)) {
return null; return null;
} }
}
//directory can be null when creating new documents
if (dirNode == null || !dirNode.hasEntry(setName))
return null;
DocumentInputStream dis;
try {
// Find the entry, and get an input stream for it // Find the entry, and get an input stream for it
dis = dirNode.createDocumentInputStream( dirNode.getEntry(setName) ); step = "getting";
} catch(IOException ie) { DocumentInputStream dis = dirNode.createDocumentInputStream( dirNode.getEntry(setName) );
// Oh well, doesn't exist try {
logger.log(POILogger.WARN, "Error getting property set with name " + setName + "\n" + ie); // Create the Property Set
return null; step = "creating";
} return PropertySetFactory.create(dis);
} finally {
try { dis.close();
// Create the Property Set }
PropertySet set = PropertySetFactory.create(dis); } catch (Exception e) {
// Tidy up if needed logger.log(POILogger.WARN, "Error "+step+" property set with name " + setName, e);
if (encPoifs != null) { return null;
encPoifs.close(); } finally {
if (encPoifs != null) {
try {
encPoifs.close();
} catch(IOException e) {
logger.log(POILogger.WARN, "Error closing encrypted property poifs", e);
}
} }
// Return the properties
return set;
} catch(IOException ie) {
// Must be corrupt or something like that
logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + ie);
} catch(org.apache.poi.hpsf.HPSFException he) {
// Oh well, doesn't exist
logger.log(POILogger.WARN, "Error creating property set with name " + setName + "\n" + he);
} }
return null;
} }
/** /**