@@ -343,25 +343,19 @@ public Object[] receive() throws javax.mail.MessagingException {
343
343
this .folderReadLock .lock ();
344
344
try {
345
345
try {
346
- obtainFolder ();
347
- MimeMessage [] filteredMessages = searchAndFilterMessages ();
348
- if (this .headerMapper != null ) {
349
- org .springframework .messaging .Message <?>[] converted =
350
- new org .springframework .messaging .Message <?>[filteredMessages .length ];
351
- int n = 0 ;
352
- for (MimeMessage message : filteredMessages ) {
353
- Map <String , Object > headers = this .headerMapper .toHeaders (message );
354
- converted [n ++] =
355
- getMessageBuilderFactory ()
356
- .withPayload (extractContent (message , headers ))
357
- .copyHeaders (headers )
358
- .build ();
346
+ Folder folderToCheck = getFolder ();
347
+ if (folderToCheck == null || !folderToCheck .isOpen ()) {
348
+ this .folderReadLock .unlock ();
349
+ this .folderWriteLock .lock ();
350
+ try {
351
+ openFolder ();
352
+ this .folderReadLock .lock ();
353
+ }
354
+ finally {
355
+ this .folderWriteLock .unlock ();
359
356
}
360
- return converted ;
361
- }
362
- else {
363
- return filteredMessages ;
364
357
}
358
+ return convertMessagesIfNecessary (searchAndFilterMessages ());
365
359
}
366
360
finally {
367
361
MailTransportUtils .closeFolder (this .folder , this .shouldDeleteMessages );
@@ -372,21 +366,6 @@ public Object[] receive() throws javax.mail.MessagingException {
372
366
}
373
367
}
374
368
375
- private void obtainFolder () throws MessagingException {
376
- Folder folder = getFolder ();
377
- if (folder == null || !folder .isOpen ()) {
378
- this .folderReadLock .unlock ();
379
- this .folderWriteLock .lock ();
380
- try {
381
- openFolder ();
382
- this .folderReadLock .lock ();
383
- }
384
- finally {
385
- this .folderWriteLock .unlock ();
386
- }
387
- }
388
- }
389
-
390
369
private MimeMessage [] searchAndFilterMessages () throws MessagingException {
391
370
if (this .logger .isInfoEnabled ()) {
392
371
this .logger .info ("attempting to receive mail from folder [" + this .folder .getFullName () + "]" );
@@ -414,6 +393,26 @@ private MimeMessage[] searchAndFilterMessages() throws MessagingException {
414
393
return filteredMessages ;
415
394
}
416
395
396
+ private Object [] convertMessagesIfNecessary (MimeMessage [] filteredMessages ) {
397
+ if (this .headerMapper != null ) {
398
+ org .springframework .messaging .Message <?>[] converted =
399
+ new org .springframework .messaging .Message <?>[filteredMessages .length ];
400
+ int n = 0 ;
401
+ for (MimeMessage message : filteredMessages ) {
402
+ Map <String , Object > headers = this .headerMapper .toHeaders (message );
403
+ converted [n ++] =
404
+ getMessageBuilderFactory ()
405
+ .withPayload (extractContent (message , headers ))
406
+ .copyHeaders (headers )
407
+ .build ();
408
+ }
409
+ return converted ;
410
+ }
411
+ else {
412
+ return filteredMessages ;
413
+ }
414
+ }
415
+
417
416
private Object extractContent (MimeMessage message , Map <String , Object > headers ) {
418
417
Object content ;
419
418
try {
0 commit comments