You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/07/20 08:05:14 UTC

[13/19] james-project git commit: JAMES-2472 Upgrade commons-io

JAMES-2472 Upgrade commons-io


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8b94fa51
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8b94fa51
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8b94fa51

Branch: refs/heads/master
Commit: 8b94fa51a15740136386f0927f27c3e0b6ac5b0c
Parents: e9a25d0
Author: benwa <bt...@linagora.com>
Authored: Wed Jul 18 10:38:10 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Fri Jul 20 10:03:53 2018 +0200

----------------------------------------------------------------------
 .../james/mailbox/maildir/MaildirFolder.java    | 234 +++++++------------
 .../maildir/mail/MaildirMessageMapper.java      |  19 +-
 .../maildir/mail/model/MaildirMessage.java      |  10 +-
 .../mailbox/store/StoreMessageManager.java      | 225 +++++++++---------
 .../james/transport/mailets/ClamAVScan.java     | 140 +++++------
 .../james/transport/mailets/HeadersToHTTP.java  |  18 +-
 .../transport/mailets/SerialiseToHTTP.java      |  11 +-
 .../protocol/FileProtocolSessionBuilder.java    |  19 +-
 .../GenericSimpleScriptedTestProtocol.java      |  14 +-
 .../james/mpt/host/ManageSieveSession.java      |   3 +-
 mpt/pom.xml                                     |   1 -
 pom.xml                                         |   2 +-
 .../core/MimeMessageInputStreamSource.java      |  12 +-
 .../james/server/core/MimeMessageUtil.java      |   6 +-
 .../james/server/core/MimeMessageWrapper.java   |  59 +++--
 .../filesystem/api/AbstractFileSystemTest.java  |  15 +-
 .../file/SieveFileRepository.java               |  12 +-
 .../james/domainlist/hbase/HBaseDomainList.java |  36 +--
 .../rrt/hbase/HBaseRecipientRewriteTable.java   |  58 ++---
 .../james/user/hbase/HBaseUsersRepository.java  |  55 ++---
 .../mailrepository/jcr/JCRMailRepository.java   |   9 +-
 .../jmap/crypto/JamesSignatureHandlerTest.java  |   2 -
 .../netty/ImapRequestFrameDecoder.java          |  13 +-
 .../apache/james/queue/file/FileMailQueue.java  |  94 ++++----
 .../jms/MimeMessageObjectMessageSource.java     |   7 +-
 .../apache/james/utils/IMAPMessageReader.java   |   7 +-
 .../java/org/apache/james/utils/MockSpamd.java  |   5 +-
 27 files changed, 445 insertions(+), 641 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
index 06a382f..4982726 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
@@ -25,9 +25,7 @@ import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FilenameFilter;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -41,7 +39,6 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
@@ -221,14 +218,13 @@ public class MaildirFolder {
         locker.executeWithLock(session, path,
             (LockAwareExecution<Void>) () -> {
             File uidList = uidFile;
-            FileReader fileReader = null;
-            BufferedReader reader = null;
-            try {
-                if (!uidList.exists()) {
-                    createUidFile();
-                }
-                fileReader = new FileReader(uidList);
-                reader = new BufferedReader(fileReader);
+
+            if (!uidList.exists()) {
+                createUidFile();
+            }
+            try (FileReader fileReader = new FileReader(uidList);
+                 BufferedReader reader = new BufferedReader(fileReader)) {
+
                 String line = reader.readLine();
                 if (line != null) {
                     readUidListHeader(line);
@@ -236,9 +232,6 @@ public class MaildirFolder {
                 return null;
             } catch (IOException e) {
                 throw new MailboxException("Unable to read last uid", e);
-            } finally {
-                IOUtils.closeQuietly(reader);
-                IOUtils.closeQuietly(fileReader);
             }
         }, true);
         
@@ -279,17 +272,11 @@ public class MaildirFolder {
         if (!validityFile.exists()) {
             return resetUidValidity();
         }
-        FileInputStream fis = null;
-        InputStreamReader isr = null;
-        try {
-            fis = new FileInputStream(validityFile);
-            isr = new InputStreamReader(fis);
+        try (FileInputStream fis = new FileInputStream(validityFile);
+             InputStreamReader isr = new InputStreamReader(fis)) {
             char[] uidValidity = new char[20];
             int len = isr.read(uidValidity);
             return Long.parseLong(String.valueOf(uidValidity, 0, len).trim());
-        } finally {
-            IOUtils.closeQuietly(isr);
-            IOUtils.closeQuietly(fis);
         }
     }
 
@@ -303,11 +290,8 @@ public class MaildirFolder {
         if (!validityFile.createNewFile()) {
             throw new IOException("Could not create file " + validityFile);
         }
-        FileOutputStream fos = new FileOutputStream(validityFile);
-        try {
+        try (FileOutputStream fos = new FileOutputStream(validityFile)) {
             fos.write(String.valueOf(uidValidity).getBytes());
-        } finally {
-            IOUtils.closeQuietly(fos);
         }
     }
     
@@ -334,12 +318,10 @@ public class MaildirFolder {
     public MaildirMessageName getMessageNameByUid(final MailboxSession session, final MessageUid uid) throws MailboxException {
        
         return locker.executeWithLock(session, path, () -> {
-            FileReader fileReader = null;
-            BufferedReader reader = null;
             File uidList = uidFile;
-            try {
-                fileReader = new FileReader(uidList);
-                reader = new BufferedReader(fileReader);
+            try (FileReader fileReader = new FileReader(uidList);
+                 BufferedReader reader = new BufferedReader(fileReader)) {
+
                 String uidString = String.valueOf(uid.asLong());
                 String line = reader.readLine(); // the header
                 int lineNumber = 1; // already read the first line
@@ -363,9 +345,6 @@ public class MaildirFolder {
                 return null;
             } catch (IOException e) {
                 throw new MailboxException("Unable to read messagename for uid " + uid, e);
-            } finally {
-                IOUtils.closeQuietly(reader);
-                IOUtils.closeQuietly(fileReader);
             }
         }, true);
     }
@@ -482,30 +461,24 @@ public class MaildirFolder {
                     for (String file : allFiles) {
                         lines.add(String.valueOf(getNextUid().asLong()) + " " + file);
                     }
-                    PrintWriter pw = new PrintWriter(uidList);
-                    try {
+
+                    try (PrintWriter pw = new PrintWriter(uidList)) {
                         pw.println(createUidListHeader());
                         for (String line : lines) {
                             pw.println(line);
                         }
-                    } finally {
-                        IOUtils.closeQuietly(pw);
                     }
                 } else {
-                    FileReader fileReader = null;
-                    BufferedReader reader = null;
-                try {
-                        fileReader = new FileReader(uidList);
-                        reader = new BufferedReader(fileReader);
-                        String line = reader.readLine();
-                        // the first line in the file contains the next uid and message count
-                        while ((line = reader.readLine()) != null) {
-                            lines.add(line);
+                    try (FileReader fileReader = new FileReader(uidList);
+                        BufferedReader reader = new BufferedReader(fileReader)) {
+
+                            reader.readLine();
+                            // the first line in the file contains the next uid and message count
+                            String line;
+                            while ((line = reader.readLine()) != null) {
+                                lines.add(line);
+                            }
                         }
-                    } finally {
-                        IOUtils.closeQuietly(reader);
-                        IOUtils.closeQuietly(fileReader);
-                    }
                 }
                 int counter = 0;
                 String line;
@@ -551,7 +524,6 @@ public class MaildirFolder {
     private Map<MessageUid, MaildirMessageName> createUidFile() throws MailboxException {
         final Map<MessageUid, MaildirMessageName> uidMap = new TreeMap<>();
         File uidList = uidFile;
-        PrintWriter pw = null;
         try {
             if (!uidList.createNewFile()) {
                 throw new IOException("Could not create file " + uidList);
@@ -564,16 +536,15 @@ public class MaildirFolder {
             for (String file : allFiles) {
                 uidMap.put(getNextUid(), newMaildirMessageName(MaildirFolder.this, file));
             }
-            pw = new PrintWriter(uidList);
-            pw.println(createUidListHeader());
-            for (Entry<MessageUid, MaildirMessageName> entry : uidMap.entrySet()) {
-                pw.println(String.valueOf(entry.getKey().asLong()) + " " + entry.getValue().getFullName());
+            try (PrintWriter pw = new PrintWriter(uidList)) {
+                pw.println(createUidListHeader());
+                for (Entry<MessageUid, MaildirMessageName> entry : uidMap.entrySet()) {
+                    pw.println(String.valueOf(entry.getKey().asLong()) + " " + entry.getValue().getFullName());
+                }
             }
         } catch (IOException e) {
             throw new MailboxException("Unable to create uid file", e);
-        } finally {
-            IOUtils.closeQuietly(pw);
-        }     
+        }
 
         return uidMap;
     }
@@ -585,12 +556,8 @@ public class MaildirFolder {
         String[] newFiles = newFolder.list();
         messageCount = curFiles.length + newFiles.length;
         HashMap<String, MessageUid> reverseUidMap = new HashMap<>(messageCount);
-        FileReader fileReader = null;
-        BufferedReader reader = null;
-        PrintWriter pw = null;
-        try {
-            fileReader = new FileReader(uidList);
-            reader = new BufferedReader(fileReader);
+        try (FileReader fileReader = new FileReader(uidList);
+            BufferedReader reader = new BufferedReader(fileReader)) {
             String line = reader.readLine();
             // the first line in the file contains the next uid and message count
             if (line != null) {
@@ -619,18 +586,15 @@ public class MaildirFolder {
                 }
                 uidMap.put(uid, messageName);
             }
-            pw = new PrintWriter(uidList);
-            pw.println(createUidListHeader());
-            for (Entry<MessageUid, MaildirMessageName> entry : uidMap.entrySet()) {
-                pw.println(String.valueOf(entry.getKey().asLong()) + " " + entry.getValue().getFullName());
+            try (PrintWriter pw = new PrintWriter(uidList)) {
+                pw.println(createUidListHeader());
+                for (Entry<MessageUid, MaildirMessageName> entry : uidMap.entrySet()) {
+                    pw.println(String.valueOf(entry.getKey().asLong()) + " " + entry.getValue().getFullName());
+                }
             }
         } catch (IOException e) {
             throw new MailboxException("Unable to update uid file", e);
-        } finally {
-            IOUtils.closeQuietly(pw);
-            IOUtils.closeQuietly(fileReader);
-            IOUtils.closeQuietly(reader);
-        }               
+        }
         return uidMap;
     }
 
@@ -638,11 +602,9 @@ public class MaildirFolder {
         final Map<MessageUid, MaildirMessageName> uidMap = new HashMap<>();
 
         File uidList = uidFile;
-        FileReader fileReader = null;
-        BufferedReader reader = null;
-        try {
-            fileReader = new FileReader(uidList);
-            reader = new BufferedReader(fileReader);
+        try (FileReader fileReader = new FileReader(uidList);
+            BufferedReader reader = new BufferedReader(fileReader)) {
+
             String line = reader.readLine();
             // the first line in the file contains the next uid and message
             // count
@@ -673,9 +635,6 @@ public class MaildirFolder {
             }
         } catch (IOException e) {
             throw new MailboxException("Unable to read uid file", e);
-        } finally {
-            IOUtils.closeQuietly(reader);
-            IOUtils.closeQuietly(fileReader);
         }
         messageCount = uidMap.size();
 
@@ -762,29 +721,28 @@ public class MaildirFolder {
         return locker.executeWithLock(session, path, () -> {
             File uidList = uidFile;
             MessageUid uid = null;
-            FileReader fileReader = null;
-            BufferedReader reader = null;
-            PrintWriter pw = null;
             try {
                 if (uidList.isFile()) {
-                    fileReader = new FileReader(uidList);
-                    reader = new BufferedReader(fileReader);
-                    String line = reader.readLine();
-                    // the first line in the file contains the next uid and message count
-                    if (line != null) {
-                        readUidListHeader(line);
-                    }
-                    ArrayList<String> lines = new ArrayList<>();
-                    while ((line = reader.readLine()) != null) {
-                        lines.add(line);
-                    }
-                    uid = getNextUid();
-                    lines.add(String.valueOf(uid.asLong()) + " " + name);
-                    messageCount++;
-                    pw = new PrintWriter(uidList);
-                    pw.println(createUidListHeader());
-                    for (String entry : lines) {
-                        pw.println(entry);
+                    try (FileReader fileReader = new FileReader(uidList);
+                        BufferedReader reader = new BufferedReader(fileReader)) {
+                        String line = reader.readLine();
+                        // the first line in the file contains the next uid and message count
+                        if (line != null) {
+                            readUidListHeader(line);
+                        }
+                        ArrayList<String> lines = new ArrayList<>();
+                        while ((line = reader.readLine()) != null) {
+                            lines.add(line);
+                        }
+                        uid = getNextUid();
+                        lines.add(String.valueOf(uid.asLong()) + " " + name);
+                        messageCount++;
+                        try (PrintWriter pw = new PrintWriter(uidList)) {
+                            pw.println(createUidListHeader());
+                            for (String entry : lines) {
+                                pw.println(entry);
+                            }
+                        }
                     }
                 } else {
                     // create the file
@@ -804,18 +762,15 @@ public class MaildirFolder {
                             uid = theUid;
                         }
                     }
-                    pw = new PrintWriter(uidList);
-                    pw.println(createUidListHeader());
-                    for (String line : lines) {
-                        pw.println(line);
+                    try (PrintWriter pw = new PrintWriter(uidList)) {
+                        pw.println(createUidListHeader());
+                        for (String line : lines) {
+                            pw.println(line);
+                        }
                     }
                 }
             } catch (IOException e) {
                 throw new MailboxException("Unable to append msg", e);
-            } finally {
-                IOUtils.closeQuietly(pw);
-                IOUtils.closeQuietly(reader);
-                IOUtils.closeQuietly(fileReader);
             }
             if (uid == null) {
                 throw new MailboxException("Unable to append msg");
@@ -836,12 +791,9 @@ public class MaildirFolder {
     public void update(MailboxSession session, final MessageUid uid, final String messageName) throws MailboxException {
         locker.executeWithLock(session, path, (LockAwareExecution<Void>) () -> {
             File uidList = uidFile;
-            FileReader fileReader = null;
-            BufferedReader reader = null;
-            PrintWriter writer = null;
-            try {
-                fileReader = new FileReader(uidList);
-                reader = new BufferedReader(fileReader);
+            try (FileReader fileReader = new FileReader(uidList);
+                BufferedReader reader = new BufferedReader(fileReader)) {
+
                 String line = reader.readLine();
                 readUidListHeader(line);
                 ArrayList<String> lines = new ArrayList<>();
@@ -851,17 +803,14 @@ public class MaildirFolder {
                     }
                     lines.add(line);
                 }
-                writer = new PrintWriter(uidList);
-                writer.println(createUidListHeader());
-                for (String entry : lines) {
-                    writer.println(entry);
+                try (PrintWriter writer = new PrintWriter(uidList)) {
+                    writer.println(createUidListHeader());
+                    for (String entry : lines) {
+                        writer.println(entry);
+                    }
                 }
             } catch (IOException e) {
                 throw new MailboxException("Unable to update msg with uid " + uid, e);
-            } finally {
-                IOUtils.closeQuietly(writer);
-                IOUtils.closeQuietly(reader);
-                IOUtils.closeQuietly(fileReader);
             }
             return null;
         }, true);
@@ -878,13 +827,10 @@ public class MaildirFolder {
     public MaildirMessageName delete(final MailboxSession session, final MessageUid uid) throws MailboxException {        
         return locker.executeWithLock(session, path, () -> {
             File uidList = uidFile;
-            FileReader fileReader = null;
-            BufferedReader reader = null;
-            PrintWriter writer = null;
             MaildirMessageName deletedMessage = null;
-            try {
-                fileReader = new FileReader(uidList);
-                reader = new BufferedReader(fileReader);
+            try (FileReader fileReader = new FileReader(uidList);
+                BufferedReader reader = new BufferedReader(fileReader)) {
+
                 readUidListHeader(reader.readLine());
 
                 // It may be possible that message count is 0 so we should better not try to calculate the size of the ArrayList
@@ -909,20 +855,17 @@ public class MaildirFolder {
                 }
                 if (deletedMessage != null) {
                     FileUtils.forceDelete(deletedMessage.getFile());
-                    writer = new PrintWriter(uidList);
-                    writer.println(createUidListHeader());
-                    for (String entry : lines) {
-                        writer.println(entry);
+                    try (PrintWriter writer = new PrintWriter(uidList)) {
+                        writer.println(createUidListHeader());
+                        for (String entry : lines) {
+                            writer.println(entry);
+                        }
                     }
                 }
                 return deletedMessage;
 
             } catch (IOException e) {
                 throw new MailboxException("Unable to delete msg with uid " + uid, e);
-            } finally {
-                IOUtils.closeQuietly(writer);
-                IOUtils.closeQuietly(reader);
-                IOUtils.closeQuietly(fileReader);
             }
         }, true);
         
@@ -954,16 +897,12 @@ public class MaildirFolder {
         // FIXME Do we need this locking?
         return locker.executeWithLock(session, path, (LockAwareExecution<MailboxACL>) () -> {
             File f = aclFile;
-            InputStream in = null;
             Properties props = new Properties();
             if (f.exists()) {
-                try {
-                    in = new FileInputStream(f);
+                try (FileInputStream in = new FileInputStream(f)) {
                     props.load(in);
                 } catch (IOException e) {
                     throw new MailboxException("Unable to read last ACL from " + f.getAbsolutePath(), e);
-                } finally {
-                    IOUtils.closeQuietly(in);
                 }
             }
 
@@ -990,7 +929,7 @@ public class MaildirFolder {
             @Override
             public Void execute() throws MailboxException {
                 File f = aclFile;
-                OutputStream out = null;
+
                 Properties props = new Properties();
                 Map<EntryKey, Rfc4314Rights> entries = acl.getEntries();
                 if (entries != null) {
@@ -999,13 +938,10 @@ public class MaildirFolder {
                     }
                 }
                 if (f.exists()) {
-                    try {
-                        out = new FileOutputStream(f);
+                    try (FileOutputStream out = new FileOutputStream(f)) {
                         props.store(out, "written by " + getClass().getName());
                     } catch (IOException e) {
                         throw new MailboxException("Unable to read last ACL from " + f.getAbsolutePath(), e);
-                    } finally {
-                        IOUtils.closeQuietly(out);
                     }
                 }
                 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
index dd4697d..2bd14db 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
@@ -35,7 +35,6 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -277,24 +276,20 @@ public class MaildirMessageMapper extends AbstractMessageMapper {
         // billion years...
         MaildirMessageName messageName = MaildirMessageName.createUniqueName(folder, message.getFullContentOctets());
         File messageFile = new File(tmpFolder, messageName.getFullName());
-        FileOutputStream fos = null;
-        InputStream input = null;
         try {
             if (!messageFile.createNewFile()) {
                 throw new IOException("Could not create file " + messageFile);
             }
-            fos = new FileOutputStream(messageFile);
-            input = message.getFullContent();
-            byte[] b = new byte[BUF_SIZE];
-            int len = 0;
-            while ((len = input.read(b)) != -1) {
-                fos.write(b, 0, len);
+            try (FileOutputStream fos = new FileOutputStream(messageFile);
+                InputStream input = message.getFullContent()) {
+                byte[] b = new byte[BUF_SIZE];
+                int len = 0;
+                while ((len = input.read(b)) != -1) {
+                    fos.write(b, 0, len);
+                }
             }
         } catch (IOException ioe) {
             throw new MailboxException("Failure while save MailboxMessage " + message + " in Mailbox " + mailbox, ioe);
-        } finally {
-            IOUtils.closeQuietly(fos);
-            IOUtils.closeQuietly(input);
         }
         File newMessageFile = null;
         // delivered via SMTP, goes to ./new without flags

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
index b1f669d..2e2e7f2 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
@@ -120,22 +120,16 @@ public class MaildirMessage implements Message {
             }
             if ("text".equalsIgnoreCase(mediaType)) {
                 long lines = -1;
-                final CountingInputStream bodyStream = new CountingInputStream(parser.getInputStream());
-                try {
+                try (CountingInputStream bodyStream = new CountingInputStream(parser.getInputStream())) {
                     bodyStream.readAll();
                     lines = bodyStream.getLineCount();
-                } finally {
-                    IOUtils.closeQuietly(bodyStream);
                 }
 
                 next = parser.next();
                 if (next == EntityState.T_EPILOGUE) {
-                    final CountingInputStream epilogueStream = new CountingInputStream(parser.getInputStream());
-                    try {
+                    try (CountingInputStream epilogueStream = new CountingInputStream(parser.getInputStream())) {
                         epilogueStream.readAll();
                         lines += epilogueStream.getLineCount();
-                    } finally {
-                        IOUtils.closeQuietly(epilogueStream);
                     }
                 }
                 propertyBuilder.setTextualLineCount(lines);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index c3bf699..0c6c156 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -37,7 +37,6 @@ import javax.mail.Flags.Flag;
 import javax.mail.internet.SharedInputStream;
 import javax.mail.util.SharedFileInputStream;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.TeeInputStream;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
@@ -295,10 +294,6 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     public ComposedMessageId appendMessage(InputStream msgIn, Date internalDate, final MailboxSession mailboxSession, boolean isRecent, Flags flagsToBeSet) throws MailboxException {
 
         File file = null;
-        TeeInputStream tmpMsgIn = null;
-        BodyOffsetInputStream bIn = null;
-        FileOutputStream out = null;
-        SharedFileInputStream contentIn = null;
 
         if (!isWriteable(mailboxSession)) {
             throw new ReadOnlyException(getMailboxPath(), mailboxSession.getPathDelimiter());
@@ -309,134 +304,128 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
             // with the file as
             // source for the InputStream
             file = File.createTempFile("imap", ".msg");
-            out = new FileOutputStream(file);
-
-            tmpMsgIn = new TeeInputStream(msgIn, out);
-
-            bIn = new BodyOffsetInputStream(tmpMsgIn);
-            // Disable line length... This should be handled by the smtp server
-            // component and not the parser itself
-            // https://issues.apache.org/jira/browse/IMAP-122
-
-            final MimeTokenStream parser = new MimeTokenStream(MimeConfig.PERMISSIVE, new DefaultBodyDescriptorBuilder());
-
-            parser.setRecursionMode(RecursionMode.M_NO_RECURSE);
-            parser.parse(bIn);
-            final HeaderImpl header = new HeaderImpl();
-
-            EntityState next = parser.next();
-            while (next != EntityState.T_BODY && next != EntityState.T_END_OF_STREAM && next != EntityState.T_START_MULTIPART) {
-                if (next == EntityState.T_FIELD) {
-                    header.addField(parser.getField());
+            try (FileOutputStream out = new FileOutputStream(file);
+                 TeeInputStream tmpMsgIn = new TeeInputStream(msgIn, out);
+                 BodyOffsetInputStream bIn = new BodyOffsetInputStream(tmpMsgIn)) {
+                // Disable line length... This should be handled by the smtp server
+                // component and not the parser itself
+                // https://issues.apache.org/jira/browse/IMAP-122
+
+                final MimeTokenStream parser = new MimeTokenStream(MimeConfig.PERMISSIVE, new DefaultBodyDescriptorBuilder());
+
+                parser.setRecursionMode(RecursionMode.M_NO_RECURSE);
+                parser.parse(bIn);
+                final HeaderImpl header = new HeaderImpl();
+
+                EntityState next = parser.next();
+                while (next != EntityState.T_BODY && next != EntityState.T_END_OF_STREAM && next != EntityState.T_START_MULTIPART) {
+                    if (next == EntityState.T_FIELD) {
+                        header.addField(parser.getField());
+                    }
+                    next = parser.next();
                 }
-                next = parser.next();
-            }
-            final MaximalBodyDescriptor descriptor = (MaximalBodyDescriptor) parser.getBodyDescriptor();
-            final PropertyBuilder propertyBuilder = new PropertyBuilder();
-            final String mediaType;
-            final String mediaTypeFromHeader = descriptor.getMediaType();
-            final String subType;
-            if (mediaTypeFromHeader == null) {
-                mediaType = "text";
-                subType = "plain";
-            } else {
-                mediaType = mediaTypeFromHeader;
-                subType = descriptor.getSubType();
-            }
-            propertyBuilder.setMediaType(mediaType);
-            propertyBuilder.setSubType(subType);
-            propertyBuilder.setContentID(descriptor.getContentId());
-            propertyBuilder.setContentDescription(descriptor.getContentDescription());
-            propertyBuilder.setContentLocation(descriptor.getContentLocation());
-            propertyBuilder.setContentMD5(descriptor.getContentMD5Raw());
-            propertyBuilder.setContentTransferEncoding(descriptor.getTransferEncoding());
-            propertyBuilder.setContentLanguage(descriptor.getContentLanguage());
-            propertyBuilder.setContentDispositionType(descriptor.getContentDispositionType());
-            propertyBuilder.setContentDispositionParameters(descriptor.getContentDispositionParameters());
-            propertyBuilder.setContentTypeParameters(descriptor.getContentTypeParameters());
-            // Add missing types
-            final String codeset = descriptor.getCharset();
-            if (codeset == null) {
-                if ("TEXT".equalsIgnoreCase(mediaType)) {
-                    propertyBuilder.setCharset("us-ascii");
+                final MaximalBodyDescriptor descriptor = (MaximalBodyDescriptor) parser.getBodyDescriptor();
+                final PropertyBuilder propertyBuilder = new PropertyBuilder();
+                final String mediaType;
+                final String mediaTypeFromHeader = descriptor.getMediaType();
+                final String subType;
+                if (mediaTypeFromHeader == null) {
+                    mediaType = "text";
+                    subType = "plain";
+                } else {
+                    mediaType = mediaTypeFromHeader;
+                    subType = descriptor.getSubType();
+                }
+                propertyBuilder.setMediaType(mediaType);
+                propertyBuilder.setSubType(subType);
+                propertyBuilder.setContentID(descriptor.getContentId());
+                propertyBuilder.setContentDescription(descriptor.getContentDescription());
+                propertyBuilder.setContentLocation(descriptor.getContentLocation());
+                propertyBuilder.setContentMD5(descriptor.getContentMD5Raw());
+                propertyBuilder.setContentTransferEncoding(descriptor.getTransferEncoding());
+                propertyBuilder.setContentLanguage(descriptor.getContentLanguage());
+                propertyBuilder.setContentDispositionType(descriptor.getContentDispositionType());
+                propertyBuilder.setContentDispositionParameters(descriptor.getContentDispositionParameters());
+                propertyBuilder.setContentTypeParameters(descriptor.getContentTypeParameters());
+                // Add missing types
+                final String codeset = descriptor.getCharset();
+                if (codeset == null) {
+                    if ("TEXT".equalsIgnoreCase(mediaType)) {
+                        propertyBuilder.setCharset("us-ascii");
+                    }
+                } else {
+                    propertyBuilder.setCharset(codeset);
                 }
-            } else {
-                propertyBuilder.setCharset(codeset);
-            }
-
-            final String boundary = descriptor.getBoundary();
-            if (boundary != null) {
-                propertyBuilder.setBoundary(boundary);
-            }
-            if ("text".equalsIgnoreCase(mediaType)) {
-                final CountingInputStream bodyStream = new CountingInputStream(parser.getInputStream());
-                bodyStream.readAll();
-                long lines = bodyStream.getLineCount();
-                bodyStream.close();
-                next = parser.next();
-                if (next == EntityState.T_EPILOGUE) {
-                    final CountingInputStream epilogueStream = new CountingInputStream(parser.getInputStream());
-                    epilogueStream.readAll();
-                    lines += epilogueStream.getLineCount();
-                    epilogueStream.close();
 
+                final String boundary = descriptor.getBoundary();
+                if (boundary != null) {
+                    propertyBuilder.setBoundary(boundary);
+                }
+                if ("text".equalsIgnoreCase(mediaType)) {
+                    final CountingInputStream bodyStream = new CountingInputStream(parser.getInputStream());
+                    bodyStream.readAll();
+                    long lines = bodyStream.getLineCount();
+                    bodyStream.close();
+                    next = parser.next();
+                    if (next == EntityState.T_EPILOGUE) {
+                        final CountingInputStream epilogueStream = new CountingInputStream(parser.getInputStream());
+                        epilogueStream.readAll();
+                        lines += epilogueStream.getLineCount();
+                        epilogueStream.close();
+
+                    }
+                    propertyBuilder.setTextualLineCount(lines);
                 }
-                propertyBuilder.setTextualLineCount(lines);
-            }
 
-            final Flags flags;
-            if (flagsToBeSet == null) {
-                flags = new Flags();
-            } else {
-                flags = flagsToBeSet;
+                final Flags flags;
+                if (flagsToBeSet == null) {
+                    flags = new Flags();
+                } else {
+                    flags = flagsToBeSet;
 
-                // Check if we need to trim the flags
-                trimFlags(flags, mailboxSession);
+                    // Check if we need to trim the flags
+                    trimFlags(flags, mailboxSession);
 
-            }
-            if (isRecent) {
-                flags.add(Flags.Flag.RECENT);
-            }
-            if (internalDate == null) {
-                internalDate = new Date();
-            }
-            byte[] discard = new byte[4096];
-            while (tmpMsgIn.read(discard) != -1) {
-                // consume the rest of the stream so everything get copied to
-                // the file now
-                // via the TeeInputStream
-            }
-            int bodyStartOctet = (int) bIn.getBodyStartOffset();
-            if (bodyStartOctet == -1) {
-                bodyStartOctet = 0;
-            }
-            contentIn = new SharedFileInputStream(file);
-            final int size = (int) file.length();
-
-            final List<MessageAttachment> attachments = extractAttachments(contentIn);
-            propertyBuilder.setHasAttachment(hasNonInlinedAttachment(attachments));
+                }
+                if (isRecent) {
+                    flags.add(Flags.Flag.RECENT);
+                }
+                if (internalDate == null) {
+                    internalDate = new Date();
+                }
+                byte[] discard = new byte[4096];
+                while (tmpMsgIn.read(discard) != -1) {
+                    // consume the rest of the stream so everything get copied to
+                    // the file now
+                    // via the TeeInputStream
+                }
+                int bodyStartOctet = (int) bIn.getBodyStartOffset();
+                if (bodyStartOctet == -1) {
+                    bodyStartOctet = 0;
+                }
+                try (SharedFileInputStream contentIn = new SharedFileInputStream(file)) {
+                    final int size = (int) file.length();
 
-            final MailboxMessage message = createMessage(internalDate, size, bodyStartOctet, contentIn, flags, propertyBuilder, attachments);
+                    final List<MessageAttachment> attachments = extractAttachments(contentIn);
+                    propertyBuilder.setHasAttachment(hasNonInlinedAttachment(attachments));
 
-            new QuotaChecker(quotaManager, quotaRootResolver, mailbox).tryAddition(1, size);
+                    final MailboxMessage message = createMessage(internalDate, size, bodyStartOctet, contentIn, flags, propertyBuilder, attachments);
 
-            return locker.executeWithLock(mailboxSession, getMailboxPath(), () -> {
-                MessageMetaData data = appendMessageToStore(message, attachments, mailboxSession);
+                    new QuotaChecker(quotaManager, quotaRootResolver, mailbox).tryAddition(1, size);
 
-                Mailbox mailbox = getMailboxEntity();
-                MailboxMessage copy = copyMessage(message);
-                dispatcher.added(mailboxSession, mailbox, copy);
-                return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid());
-            }, true);
+                    return locker.executeWithLock(mailboxSession, getMailboxPath(), () -> {
+                        MessageMetaData data = appendMessageToStore(message, attachments, mailboxSession);
 
+                        Mailbox mailbox = getMailboxEntity();
+                        MailboxMessage copy = copyMessage(message);
+                        dispatcher.added(mailboxSession, mailbox, copy);
+                        return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid());
+                    }, true);
+                }
+            }
         } catch (IOException | MimeException e) {
             throw new MailboxException("Unable to parse message", e);
         } finally {
-            IOUtils.closeQuietly(bIn);
-            IOUtils.closeQuietly(tmpMsgIn);
-            IOUtils.closeQuietly(out);
-            IOUtils.closeQuietly(contentIn);
-
             // delete the temporary file if one was specified
             if (file != null) {
                 if (!file.delete()) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
index a06495f..9233b21 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ClamAVScan.java
@@ -39,7 +39,6 @@ import java.util.Set;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.james.core.MailAddress;
 import org.apache.mailet.Experimental;
 import org.apache.mailet.Mail;
@@ -603,18 +602,11 @@ public class ClamAVScan extends GenericMailet {
             return;
         }
 
-        // get the socket
-        Socket socket = getClamdSocket();
-        BufferedReader reader = null;
-        PrintWriter writer = null;
-        Socket streamSocket = null;
-        BufferedOutputStream bos = null;
+        Socket clamdSocket = getClamdSocket();
 
-        try {
-
-            // prepare the reader and writer for the commands
-            reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ASCII"));
-            writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
+        try (Socket socket = clamdSocket;
+            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "ASCII"));
+            PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true)) {
 
             // write a request for a port to use for streaming out the data to scan
             writer.println("STREAM");
@@ -624,86 +616,80 @@ public class ClamAVScan extends GenericMailet {
             int streamPort = getStreamPortFromAnswer(reader.readLine());
 
             // get the "stream" socket and the related (buffered) output stream
-            streamSocket = new Socket(socket.getInetAddress(), streamPort);
-            bos = new BufferedOutputStream(streamSocket.getOutputStream(), getStreamBufferSize());
-
-            // stream out the message to the scanner
-            mimeMessage.writeTo(bos);
-            bos.flush();
-            bos.close();
-            streamSocket.close();
-
-            String answer;
-            boolean virusFound = false;
-            String logMessage = "";
-            for (; ; ) {
-                answer = reader.readLine();
-                if (answer != null) {
-                    answer = answer.trim();
-
-                    // if a virus is found the answer will be '... FOUND'
-                    if (answer.substring(answer.length() - FOUND_STRING.length()).equals(FOUND_STRING)) {
-                        virusFound = true;
-                        logMessage = answer + " (by CLAMD on " + socket.getInetAddress() + ")";
-                        LOGGER.debug(logMessage);
+            try (Socket streamSocket = new Socket(socket.getInetAddress(), streamPort);
+                 BufferedOutputStream bos = new BufferedOutputStream(streamSocket.getOutputStream(), getStreamBufferSize())) {
+
+                // stream out the message to the scanner
+                mimeMessage.writeTo(bos);
+                bos.flush();
+                bos.close();
+                streamSocket.close();
+
+                String answer;
+                boolean virusFound = false;
+                String logMessage = "";
+                for (; ; ) {
+                    answer = reader.readLine();
+                    if (answer != null) {
+                        answer = answer.trim();
+
+                        // if a virus is found the answer will be '... FOUND'
+                        if (answer.substring(answer.length() - FOUND_STRING.length()).equals(FOUND_STRING)) {
+                            virusFound = true;
+                            logMessage = answer + " (by CLAMD on " + socket.getInetAddress() + ")";
+                            LOGGER.debug(logMessage);
+                        }
+                    } else {
+                        break;
                     }
-                } else {
-                    break;
                 }
-            }
 
-            reader.close();
-            writer.close();
+                reader.close();
+                writer.close();
 
-            if (virusFound) {
-                String errorMessage = mail.getErrorMessage();
-                if (errorMessage == null) {
-                    errorMessage = "";
-                } else {
-                    errorMessage += "\r\n";
-                }
-                StringBuilder sb = new StringBuilder(errorMessage);
-                sb.append(logMessage).append("\r\n");
+                if (virusFound) {
+                    String errorMessage = mail.getErrorMessage();
+                    if (errorMessage == null) {
+                        errorMessage = "";
+                    } else {
+                        errorMessage += "\r\n";
+                    }
+                    StringBuilder sb = new StringBuilder(errorMessage);
+                    sb.append(logMessage).append("\r\n");
 
-                // write mail and message info to log
-                logMailInfo(mail);
-                logMessageInfo(mimeMessage);
+                    // write mail and message info to log
+                    logMailInfo(mail);
+                    logMessageInfo(mimeMessage);
 
-                // mark the mail with a mail attribute to check later on by other matchers/mailets
-                mail.setAttribute(MAIL_ATTRIBUTE_NAME, "true");
+                    // mark the mail with a mail attribute to check later on by other matchers/mailets
+                    mail.setAttribute(MAIL_ATTRIBUTE_NAME, "true");
 
-                // sets the error message to be shown in any "notifyXxx" message
-                mail.setErrorMessage(sb.toString());
+                    // sets the error message to be shown in any "notifyXxx" message
+                    mail.setErrorMessage(sb.toString());
 
-                // mark the message with a header string
-                mimeMessage.setHeader(HEADER_NAME, "true");
+                    // mark the message with a header string
+                    mimeMessage.setHeader(HEADER_NAME, "true");
 
-            } else {
-                if (isDebug()) {
-                    LOGGER.debug("OK (by CLAMD on {})", socket.getInetAddress());
-                }
-                mail.setAttribute(MAIL_ATTRIBUTE_NAME, "false");
+                } else {
+                    if (isDebug()) {
+                        LOGGER.debug("OK (by CLAMD on {})", socket.getInetAddress());
+                    }
+                    mail.setAttribute(MAIL_ATTRIBUTE_NAME, "false");
 
-                // mark the message with a header string
-                mimeMessage.setHeader(HEADER_NAME, "false");
+                    // mark the message with a header string
+                    mimeMessage.setHeader(HEADER_NAME, "false");
 
-            }
+                }
 
-            try {
-                saveChanges(mimeMessage);
-            } catch (Exception ex) {
-                LOGGER.error("Exception caught while saving changes (header) to the MimeMessage. Ignoring ...", ex);
+                try {
+                    saveChanges(mimeMessage);
+                } catch (Exception ex) {
+                    LOGGER.error("Exception caught while saving changes (header) to the MimeMessage. Ignoring ...", ex);
+                }
             }
-
         } catch (Exception ex) {
-            LOGGER.error("Exception caught calling CLAMD on {}: {}", socket.getInetAddress(), ex.getMessage(), ex);
+            LOGGER.error("Exception caught calling CLAMD on {}: {}", clamdSocket.getInetAddress(), ex.getMessage(), ex);
             throw new MessagingException("Exception caught", ex);
-        } finally {
-            IOUtils.closeQuietly(reader);
-            IOUtils.closeQuietly(writer);
-            IOUtils.closeQuietly(bos);
-            IOUtils.closeQuietly(streamSocket);
-            IOUtils.closeQuietly(socket);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
index 02ec697..abb1d74 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
@@ -28,7 +28,6 @@ import java.util.HashSet;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpUriRequest;
@@ -141,18 +140,13 @@ public class HeadersToHTTP extends GenericMailet {
 
     private String httpPost(HashSet<NameValuePair> pairs) throws IOException {
 
-        CloseableHttpClient client = null;
-        CloseableHttpResponse clientResponse = null;
-        try {
-            client = HttpClientBuilder.create().build();
+        try (CloseableHttpClient client = HttpClientBuilder.create().build()) {
             HttpUriRequest request = RequestBuilder.post(url).addParameters(pairs.toArray(new NameValuePair[0])).build();
-            clientResponse = client.execute(request);
-            String result = clientResponse.getStatusLine().getStatusCode() + ": " + clientResponse.getStatusLine();
-            LOGGER.debug("HeadersToHTTP: {}", result);
-            return result;
-        } finally {
-            IOUtils.closeQuietly(clientResponse);
-            IOUtils.closeQuietly(client);
+            try (CloseableHttpResponse clientResponse = client.execute(request)) {
+                String result = clientResponse.getStatusLine().getStatusCode() + ": " + clientResponse.getStatusLine();
+                LOGGER.debug("HeadersToHTTP: {}", result);
+                return result;
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
index 3dde0d1..713e4d7 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
@@ -27,7 +27,6 @@ import java.net.URL;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpStatus;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.ClientProtocolException;
@@ -163,10 +162,9 @@ public class SerialiseToHTTP extends GenericMailet {
             LOGGER.debug("{}::{}", data[1].getName(), data[1].getValue());
         }
 
-        CloseableHttpClient client = HttpClientBuilder.create().build();
-        CloseableHttpResponse clientResponse = null;
-        try {
-            clientResponse = client.execute(requestBuilder.build());
+
+        try (CloseableHttpClient client = HttpClientBuilder.create().build();
+             CloseableHttpResponse clientResponse = client.execute(requestBuilder.build())) {
 
             if (clientResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
                 LOGGER.debug("POST failed: {}", clientResponse.getStatusLine());
@@ -179,9 +177,6 @@ public class SerialiseToHTTP extends GenericMailet {
         } catch (IOException e) {
             LOGGER.debug("Fatal transport error: ", e);
             return "Fatal transport error: " + e.getMessage();
-        } finally {
-            IOUtils.closeQuietly(clientResponse);
-            IOUtils.closeQuietly(client);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
index 6788e09..09effae 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
@@ -25,7 +25,6 @@ import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.james.mpt.protocol.ProtocolSession.TimerCommand;
 
 /**
@@ -71,15 +70,11 @@ public class FileProtocolSessionBuilder extends ProtocolSessionBuilder {
      */
     public void addTestFile(String fileName, ProtocolSession session) throws Exception {
         // Need to find local resource.
-        InputStream is = this.getClass().getResourceAsStream(fileName);
-        if (is == null) {
-            throw new Exception("Test Resource '" + fileName + "' not found.");
-        }
-
-        try {
+        try (InputStream is = this.getClass().getResourceAsStream(fileName)) {
+            if (is == null) {
+                throw new Exception("Test Resource '" + fileName + "' not found.");
+            }
             addProtocolLinesFromStream(is, session, fileName);
-        } finally {
-            IOUtils.closeQuietly(is);
         }
     }
 
@@ -96,8 +91,8 @@ public class FileProtocolSessionBuilder extends ProtocolSessionBuilder {
      */
     public void addProtocolLinesFromStream(InputStream is, ProtocolSession session, String fileName) throws Exception {
         int sessionNumber = -1;
-        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
-        try {
+
+        try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
             String next;
             int lineNumber = -1;
             String lastClientMsg = "";
@@ -187,8 +182,6 @@ public class FileProtocolSessionBuilder extends ProtocolSessionBuilder {
                 }
                 lineNumber++;
             }
-        } finally {
-            IOUtils.closeQuietly(reader);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java b/mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
index 93dc6bb..6fcf292 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
@@ -24,7 +24,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.james.mpt.api.Continuation;
 import org.apache.james.mpt.api.HostSystem;
 import org.apache.james.mpt.api.Session;
@@ -198,16 +197,11 @@ public class GenericSimpleScriptedTestProtocol<T extends HostSystem, SelfT exten
         fileName = scriptDirectory + fileName;
         
         // Need to find local resource.
-        InputStream is = this.getClass().getResourceAsStream(fileName);
-
-        if (is == null) {
-            throw new Exception("Test Resource '" + fileName + "' not found.");
-        }
-
-        try {
+        try (InputStream is = this.getClass().getResourceAsStream(fileName)) {
+            if (is == null) {
+                throw new Exception("Test Resource '" + fileName + "' not found.");
+            }
             builder.addProtocolLinesFromStream(is, session, fileName);
-        } finally {
-            IOUtils.closeQuietly(is);
         }
         
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
----------------------------------------------------------------------
diff --git a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
index aa802ff..949014e 100644
--- a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
+++ b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
@@ -20,6 +20,7 @@
 package org.apache.james.mpt.host;
 
 import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.james.managesieve.api.SessionTerminatedException;
@@ -54,7 +55,7 @@ public class ManageSieveSession implements Session {
         if (!isReadLast) {
             String response;
             StringWriter stringWriter = new StringWriter();
-            IOUtils.copy(in, stringWriter);
+            IOUtils.copy(in, stringWriter, StandardCharsets.UTF_8);
             String request = stringWriter.toString();
             try {
                 response = manageSieveProcessor.handleRequest(settableSession, request);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/mpt/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/pom.xml b/mpt/pom.xml
index 4380d50..7231b2c 100644
--- a/mpt/pom.xml
+++ b/mpt/pom.xml
@@ -52,7 +52,6 @@
     </issueManagement>
 
     <properties>
-        <commons-io.version>2.4</commons-io.version>
         <commons-lang.version>2.6</commons-lang.version>
         <derby.version>10.9.1.0</derby.version>
         <guice.version>4.0</guice.version>

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4743e1b..7e3e378 100644
--- a/pom.xml
+++ b/pom.xml
@@ -611,7 +611,7 @@
         <commons-dbcp.version>1.4</commons-dbcp.version>
         <commons-net.version>3.6</commons-net.version>
         <commons-beanutils-core.version>1.8.3</commons-beanutils-core.version>
-        <commons-io.version>2.5</commons-io.version>
+        <commons-io.version>2.6</commons-io.version>
         <commons-logging.version>1.1.1</commons-logging.version>
 
         <dnsjava.version>2.1.1</dnsjava.version>

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
index 38036a7..e6cfe38 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
@@ -159,11 +159,19 @@ public class MimeMessageInputStreamSource extends MimeMessageSource implements D
     public void dispose() {
         // explicit close all streams
         for (InputStream stream : streams) {
-            IOUtils.closeQuietly(stream);
+            try {
+                stream.close();
+            } catch (IOException e) {
+                //ignore exception during close
+            }
         }
 
         if (out != null) {
-            IOUtils.closeQuietly(out);
+            try {
+                out.close();
+            } catch (IOException e) {
+                //ignore exception during close
+            }
             File file = out.getFile();
             if (file != null) {
                 FileUtils.deleteQuietly(file);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
index c017c63..a30cf93 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
@@ -161,10 +161,8 @@ public class MimeMessageUtil {
             }
         }
 
-        try {
-            IOUtils.copy(bis, bos);
-        } finally {
-            IOUtils.closeQuietly(bis);
+        try (InputStream input = bis) {
+            IOUtils.copy(input, bos);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
----------------------------------------------------------------------
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
index 7adf805..b90f84d 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
@@ -27,6 +27,7 @@ import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.io.OutputStream;
 import java.io.SequenceInputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.Enumeration;
 import java.util.UUID;
 
@@ -192,14 +193,8 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
         if (headers != null) {
             // Another thread has already loaded these headers
         } else if (source != null) {
-            try {
-                InputStream in = source.getInputStream();
-                try {
-                    headers = createInternetHeaders(in);
-
-                } finally {
-                    IOUtils.closeQuietly(in);
-                }
+            try (InputStream in = source.getInputStream()) {
+                headers = createInternetHeaders(in);
             } catch (IOException ioe) {
                 throw new MessagingException("Unable to parse headers from stream: " + ioe.getMessage(), ioe);
             }
@@ -227,7 +222,11 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
                 saved = true;
 
             } catch (IOException ioe) {
-                IOUtils.closeQuietly(sourceIn);
+                try {
+                    sourceIn.close();
+                } catch (IOException e) {
+                    //ignore exception during close
+                }
                 sourceIn = null;
                 throw new MessagingException("Unable to parse stream: " + ioe.getMessage(), ioe);
             }
@@ -299,8 +298,7 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
             // and write to this outputstream
 
             // First handle the headers
-            InputStream in = source.getInputStream();
-            try {
+            try (InputStream in = source.getInputStream()) {
                 InternetHeaders myHeaders;
                 MailHeaders parsedHeaders = new MailHeaders(in);
 
@@ -318,8 +316,6 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
                 Enumeration<String> filteredHeaders = myHeaders.getNonMatchingHeaderLines(ignoreList);
                 IOUtils.copy(new InternetHeadersInputStream(filteredHeaders), headerOs);
                 IOUtils.copy(in, bodyOs);
-            } finally {
-                IOUtils.closeQuietly(in);
             }
         } else {
             // save the changes as the message was modified
@@ -389,31 +385,28 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
         }
         // Wrap input stream in LineNumberReader
         // Not sure what encoding to use really...
-        InputStreamReader isr = null;
-        LineNumberReader counter = null;
-        try {
-            if (getEncoding() != null) {
-                isr = new InputStreamReader(in, getEncoding());
-                counter = new LineNumberReader(isr);
-            } else {
-                isr = new InputStreamReader(in);
-                counter = new LineNumberReader(isr);
-            }
+        try (InputStream input = in;
+            InputStreamReader isr = builderReader(input)) {
             // Read through all the data
             char[] block = new char[4096];
-            while (counter.read(block) > -1) {
-                // Just keep reading
+            try (LineNumberReader counter = new LineNumberReader(isr)) {
+                while (counter.read(block) > -1) {
+                    // Just keep reading
+                }
+                return counter.getLineNumber();
             }
-            return counter.getLineNumber();
         } catch (IOException ioe) {
             return -1;
-        } finally {
-            IOUtils.closeQuietly(counter);
-            IOUtils.closeQuietly(isr);
-            IOUtils.closeQuietly(in);
         }
     }
 
+    private InputStreamReader builderReader(InputStream in) throws MessagingException, UnsupportedEncodingException {
+        if (getEncoding() != null) {
+            return new InputStreamReader(in, getEncoding());
+        }
+        return new InputStreamReader(in);
+    }
+
     /**
      * Returns size of message, ie headers and content
      */
@@ -552,7 +545,11 @@ public class MimeMessageWrapper extends MimeMessage implements Disposable {
     @Override
     public void dispose() {
         if (sourceIn != null) {
-            IOUtils.closeQuietly(sourceIn);
+            try {
+                sourceIn.close();
+            } catch (IOException e) {
+                //ignore exception during close
+            }
         }
         if (source != null) {
             LifecycleUtil.dispose(source);

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
----------------------------------------------------------------------
diff --git a/server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java b/server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
index 0d8890d..cc9f420 100644
--- a/server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
+++ b/server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
@@ -185,11 +185,8 @@ public abstract class AbstractFileSystemTest {
     @Parameters(source = AvailableStreamsProvider.class)
     public final void availableInputStreamShouldReturnANonEmptyStream(String url) throws Exception {
         url = replacePort(url);
-        InputStream inputStream = fileSystem.getResource(url);
-        try {
+        try (InputStream inputStream = fileSystem.getResource(url)) {
             assertThat(IOUtils.toByteArray(inputStream).length).isGreaterThan(0);
-        } finally {
-            IOUtils.closeQuietly(inputStream);
         }
     }
 
@@ -234,12 +231,9 @@ public abstract class AbstractFileSystemTest {
     @Parameters(source = FileToCreateProvider.class)
     public final void createdFilesAsInputStreamShouldBeAvailable(String name, String extension) throws Exception {
         File temp = createTempFile(name, extension);
-        InputStream inputStream = null;
-        try {
-            inputStream = fileSystem.getResource("file:" + temp.getAbsolutePath());
+        try (InputStream inputStream = fileSystem.getResource("file:" + temp.getAbsolutePath())) {
             assertThat(IOUtils.toString(inputStream, StandardCharsets.UTF_8)).isEqualTo("content");
         } finally {
-            IOUtils.closeQuietly(inputStream);
             temp.delete();
         }
     }
@@ -248,12 +242,9 @@ public abstract class AbstractFileSystemTest {
     @Parameters(source = FileToCreateProvider.class)
     public final void createdFilesAsInputStreamShouldBeAvailableWhenAccessedWithTwoSlashes(String name, String extension) throws Exception {
         File temp = createTempFile(name, extension);
-        InputStream inputStream = null;
-        try {
-            inputStream = fileSystem.getResource("file://" + temp.getAbsolutePath());
+        try (InputStream inputStream = fileSystem.getResource("file://" + temp.getAbsolutePath())) {
             assertThat(IOUtils.toString(inputStream, StandardCharsets.UTF_8)).isEqualTo("content");
         } finally {
-            IOUtils.closeQuietly(inputStream);
             temp.delete();
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
----------------------------------------------------------------------
diff --git a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
index a651ceb..b544ef5 100644
--- a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
@@ -38,7 +38,6 @@ import java.util.Scanner;
 import javax.inject.Inject;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.filesystem.api.FileSystem;
@@ -100,17 +99,16 @@ public class SieveFileRepository implements SieveRepository {
         // Create a temporary file
         int bufferSize = content.length() > MAX_BUFF_SIZE ? MAX_BUFF_SIZE : content.length();
         File tmpFile = null;
-        Writer out = null;
+
         try {
             tmpFile = File.createTempFile(file.getName(), ".tmp", file.getParentFile());
-            out = new OutputStreamWriter(new BufferedOutputStream(
-                    new FileOutputStream(tmpFile), bufferSize), UTF_8);
-            out.write(content);
+            try (Writer out = new OutputStreamWriter(new BufferedOutputStream(
+                    new FileOutputStream(tmpFile), bufferSize), UTF_8)) {
+                out.write(content);
+            }
         } catch (IOException ex) {
             FileUtils.deleteQuietly(tmpFile);
             throw new StorageException(ex);
-        } finally {
-            IOUtils.closeQuietly(out);
         }
 
         // Does the file exist?

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
----------------------------------------------------------------------
diff --git a/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java b/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
index 6aff34a..7713320 100644
--- a/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
+++ b/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java
@@ -24,7 +24,6 @@ import java.util.List;
 
 import javax.inject.Inject;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HTableInterface;
@@ -59,9 +58,7 @@ public class HBaseDomainList extends AbstractDomainList {
 
     @Override
     protected boolean containsDomainInternal(Domain domain) throws DomainListException {
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getDomainlistTable();
+        try (HTableInterface table = TablePool.getInstance().getDomainlistTable()) {
             Get get = new Get(Bytes.toBytes(domain.asString()));
             Result result = table.get(get);
             if (!result.isEmpty()) {
@@ -70,8 +67,6 @@ public class HBaseDomainList extends AbstractDomainList {
         } catch (IOException e) {
             log.error("Error while counting domains from HBase", e);
             throw new DomainListException("Error while counting domains from HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
         return false;
     }
@@ -81,9 +76,7 @@ public class HBaseDomainList extends AbstractDomainList {
         if (containsDomain(domain)) {
             throw new DomainListException(domain.name() + " already exists.");
         }
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getDomainlistTable();
+        try (HTableInterface table = TablePool.getInstance().getDomainlistTable()) {
             Put put = new Put(Bytes.toBytes(domain.asString()));
             put.add(HDomainList.COLUMN_FAMILY_NAME, HDomainList.COLUMN.DOMAIN, null);
             table.put(put);
@@ -91,48 +84,37 @@ public class HBaseDomainList extends AbstractDomainList {
         } catch (IOException e) {
             log.error("Error while adding domain in HBase", e);
             throw new DomainListException("Error while adding domain in HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 
     @Override
     public void removeDomain(Domain domain) throws DomainListException {
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getDomainlistTable();
+        try (HTableInterface table = TablePool.getInstance().getDomainlistTable()) {
             Delete delete = new Delete(Bytes.toBytes(domain.asString()));
             table.delete(delete);
             table.flushCommits();
         } catch (IOException e) {
             log.error("Error while deleting user from HBase", e);
             throw new DomainListException("Error while deleting domain from HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 
     @Override
     protected List<Domain> getDomainListInternal() throws DomainListException {
         List<Domain> list = new ArrayList<>();
-        HTableInterface table = null;
-        ResultScanner resultScanner = null;
-        try {
-            table = TablePool.getInstance().getDomainlistTable();
+        try (HTableInterface table = TablePool.getInstance().getDomainlistTable()) {
             Scan scan = new Scan();
             scan.addFamily(HDomainList.COLUMN_FAMILY_NAME);
             scan.setCaching(table.getConfiguration().getInt("hbase.client.scanner.caching", 1) * 2);
-            resultScanner = table.getScanner(scan);
-            Result result;
-            while ((result = resultScanner.next()) != null) {
-                list.add(Domain.of(Bytes.toString(result.getRow())));
+            try (ResultScanner resultScanner = table.getScanner(scan)) {
+                Result result;
+                while ((result = resultScanner.next()) != null) {
+                    list.add(Domain.of(Bytes.toString(result.getRow())));
+                }
             }
         } catch (IOException e) {
             log.error("Error while counting domains from HBase", e);
             throw new DomainListException("Error while counting domains from HBase", e);
-        } finally {
-            IOUtils.closeQuietly(resultScanner);
-            IOUtils.closeQuietly(table);
         }
         return list;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b94fa51/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java b/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
index e4dc88a..6b1a1ce 100644
--- a/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
+++ b/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
@@ -73,17 +72,13 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
     @Override
     public Mappings getUserDomainMappings(MappingSource source) throws
             RecipientRewriteTableException {
-        HTableInterface table = null;
         Mappings list = MappingsImpl.empty();
-        try {
-            table = TablePool.getInstance().getRecipientRewriteTable();
+        try (HTableInterface table = TablePool.getInstance().getRecipientRewriteTable()) {
             // Optimize this to only make one call.
             return feedUserDomainMappingsList(table, source, list);
         } catch (IOException e) {
             log.error("Error while getting user domain mapping in HBase", e);
             throw new RecipientRewriteTableException("Error while getting user domain mapping in HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 
@@ -102,40 +97,33 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
 
     @Override
     public Map<MappingSource, Mappings> getAllMappings() throws RecipientRewriteTableException {
-        HTableInterface table = null;
-        ResultScanner resultScanner = null;
         Map<MappingSource, Mappings> map = new HashMap<>();
-        try {
-            table = TablePool.getInstance().getRecipientRewriteTable();
+        try (HTableInterface table = TablePool.getInstance().getRecipientRewriteTable()) {
             Scan scan = new Scan();
             scan.addFamily(HRecipientRewriteTable.COLUMN_FAMILY_NAME);
             scan.setCaching(table.getConfiguration().getInt("hbase.client.scanner.caching", 1) * 2);
-            resultScanner = table.getScanner(scan);
-            Result result;
-            while ((result = resultScanner.next()) != null) {
-                List<KeyValue> keyValues = result.list();
-                if (keyValues != null) {
-                    for (KeyValue keyValue : keyValues) {
-                        MappingSource email = MappingSource.parse(Bytes.toString(keyValue.getRow()));
-                        Mappings mappings = 
+            try (ResultScanner resultScanner = table.getScanner(scan)) {
+                Result result;
+                while ((result = resultScanner.next()) != null) {
+                    List<KeyValue> keyValues = result.list();
+                    if (keyValues != null) {
+                        for (KeyValue keyValue : keyValues) {
+                            MappingSource email = MappingSource.parse(Bytes.toString(keyValue.getRow()));
+                            Mappings mappings =
                                 MappingsImpl.from(
                                     Optional.ofNullable(
                                         map.get(email))
                                         .orElse(MappingsImpl.empty()))
-                                .addAll(Splitter.on(COLUMN_SEPARATOR).split(Bytes.toString(keyValue.getValue())))
-                                .build();
-                        map.put(email, mappings);
+                                    .addAll(Splitter.on(COLUMN_SEPARATOR).split(Bytes.toString(keyValue.getValue())))
+                                    .build();
+                            map.put(email, mappings);
+                        }
                     }
                 }
             }
         } catch (IOException e) {
             log.error("Error while getting all mapping from HBase", e);
             throw new RecipientRewriteTableException("Error while getting all mappings from HBase", e);
-        } finally {
-            if (resultScanner != null) {
-                resultScanner.close();
-            }
-            IOUtils.closeQuietly(table);
         }
         return map;
     }
@@ -148,9 +136,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
     }
 
     private Optional<String> getApplicableMappingRow(String user, Domain domain) throws RecipientRewriteTableException {
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getRecipientRewriteTable();
+        try (HTableInterface table = TablePool.getInstance().getRecipientRewriteTable()) {
             HTableInterface tableCopy = table;
             return OptionalUtils.orSuppliers(
                 Throwing.supplier(() -> Optional.ofNullable(getMapping(tableCopy, MappingSource.fromUser(user, domain)))).sneakyThrow(),
@@ -159,8 +145,6 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
         } catch (IOException e) {
             log.error("Error while mapping address in HBase", e);
             throw new RecipientRewriteTableException("Error while mapping address in HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 
@@ -209,17 +193,13 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
      * @throws RecipientRewriteTableException
      */
     private void doRemoveMapping(MappingSource source) throws RecipientRewriteTableException {
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getRecipientRewriteTable();
+        try (HTableInterface table = TablePool.getInstance().getRecipientRewriteTable()) {
             Delete delete = new Delete(Bytes.toBytes(getRowKey(source)));
             table.delete(delete);
             table.flushCommits();
         } catch (IOException e) {
             log.error("Error while removing mapping from HBase", e);
             throw new RecipientRewriteTableException("Error while removing mapping from HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 
@@ -232,9 +212,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
      * @throws RecipientRewriteTableException
      */
     private void doAddMapping(MappingSource source, String mapping) throws RecipientRewriteTableException {
-        HTableInterface table = null;
-        try {
-            table = TablePool.getInstance().getRecipientRewriteTable();
+        try (HTableInterface table = TablePool.getInstance().getRecipientRewriteTable()) {
             Put put = new Put(Bytes.toBytes(getRowKey(source)));
             put.add(HRecipientRewriteTable.COLUMN_FAMILY_NAME, HRecipientRewriteTable.COLUMN.MAPPING, Bytes.toBytes(
                     mapping));
@@ -243,8 +221,6 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable {
         } catch (IOException e) {
             log.error("Error while adding mapping in HBase", e);
             throw new RecipientRewriteTableException("Error while adding mapping in HBase", e);
-        } finally {
-            IOUtils.closeQuietly(table);
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org