diff --git a/base/src/org/compiere/model/MAttachment.java b/base/src/org/compiere/model/MAttachment.java
index 698c1f74de..acfd441494 100644
--- a/base/src/org/compiere/model/MAttachment.java
+++ b/base/src/org/compiere/model/MAttachment.java
@@ -59,6 +59,11 @@ import org.xml.sax.SAXException;
* One Attachment can have multiple entries
*
* @author Jorg Janke
+ *
+ * @author Silvano Trinchero
+ *
BF [ 2992291] MAttachment.addEntry not closing streams if an exception occur
+ * http://sourceforge.net/tracker/?func=detail&aid=2992291&group_id=176962&atid=879332
+ *
* @version $Id: MAttachment.java,v 1.4 2006/07/30 00:58:37 jjanke Exp $
*/
public class MAttachment extends X_AD_Attachment
@@ -254,22 +259,40 @@ public class MAttachment extends X_AD_Attachment
//
String name = file.getName();
byte[] data = null;
+
+ // F3P: BF [2992291] modified to be able to close streams in "finally" block
+
+ FileInputStream fis = null;
+ ByteArrayOutputStream os = null;
+
try
{
- FileInputStream fis = new FileInputStream (file);
- ByteArrayOutputStream os = new ByteArrayOutputStream();
+ fis = new FileInputStream (file);
+ os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024*8]; // 8kB
int length = -1;
while ((length = fis.read(buffer)) != -1)
os.write(buffer, 0, length);
- fis.close();
- data = os.toByteArray();
- os.close();
+
+ data = os.toByteArray();
}
catch (IOException ioe)
{
log.log(Level.SEVERE, "(file)", ioe);
}
+ finally
+ {
+ if(fis != null)
+ {
+ try { fis.close(); } catch (IOException ex) { log.log(Level.SEVERE, "(file)", ex); };
+ }
+
+ if(os != null)
+ {
+ try { os.close(); } catch (IOException ex) { log.log(Level.SEVERE, "(file)", ex); };
+ }
+ }
+
return addEntry (name, data);
} // addEntry