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 <[email protected]> Authored: Wed Jul 18 10:38:10 2018 +0700 Committer: Matthieu Baechler <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
