diff --git a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java index 7caf19a8b2..4cf9aa1d53 100755 --- a/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java +++ b/spring-integration-mail/src/main/java/org/springframework/integration/mail/AbstractMailReceiver.java @@ -343,25 +343,19 @@ public abstract class AbstractMailReceiver extends IntegrationObjectSupport impl this.folderReadLock.lock(); try { try { - obtainFolder(); - MimeMessage[] filteredMessages = searchAndFilterMessages(); - if (this.headerMapper != null) { - org.springframework.messaging.Message[] converted = - new org.springframework.messaging.Message[filteredMessages.length]; - int n = 0; - for (MimeMessage message : filteredMessages) { - Map headers = this.headerMapper.toHeaders(message); - converted[n++] = - getMessageBuilderFactory() - .withPayload(extractContent(message, headers)) - .copyHeaders(headers) - .build(); + Folder folderToCheck = getFolder(); + if (folderToCheck == null || !folderToCheck.isOpen()) { + this.folderReadLock.unlock(); + this.folderWriteLock.lock(); + try { + openFolder(); + this.folderReadLock.lock(); + } + finally { + this.folderWriteLock.unlock(); } - return converted; - } - else { - return filteredMessages; } + return convertMessagesIfNecessary(searchAndFilterMessages()); } finally { MailTransportUtils.closeFolder(this.folder, this.shouldDeleteMessages); @@ -372,21 +366,6 @@ public abstract class AbstractMailReceiver extends IntegrationObjectSupport impl } } - private void obtainFolder() throws MessagingException { - Folder folder = getFolder(); - if (folder == null || !folder.isOpen()) { - this.folderReadLock.unlock(); - this.folderWriteLock.lock(); - try { - openFolder(); - this.folderReadLock.lock(); - } - finally { - this.folderWriteLock.unlock(); - } - } - } - private MimeMessage[] searchAndFilterMessages() throws MessagingException { if (this.logger.isInfoEnabled()) { this.logger.info("attempting to receive mail from folder [" + this.folder.getFullName() + "]"); @@ -414,6 +393,26 @@ public abstract class AbstractMailReceiver extends IntegrationObjectSupport impl return filteredMessages; } + private Object[] convertMessagesIfNecessary(MimeMessage[] filteredMessages) { + if (this.headerMapper != null) { + org.springframework.messaging.Message[] converted = + new org.springframework.messaging.Message[filteredMessages.length]; + int n = 0; + for (MimeMessage message : filteredMessages) { + Map headers = this.headerMapper.toHeaders(message); + converted[n++] = + getMessageBuilderFactory() + .withPayload(extractContent(message, headers)) + .copyHeaders(headers) + .build(); + } + return converted; + } + else { + return filteredMessages; + } + } + private Object extractContent(MimeMessage message, Map headers) { Object content; try {