CAMEL-9106: URI option mapMailMessage doesn't obey peek=true option. Thanks to Jussi Nupponen
for the patch.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5d3f3291
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5d3f3291
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5d3f3291
Branch: refs/heads/camel-2.15.x
Commit: 5d3f329130c47c0b85ee5d31410b061a3cfa9fa5
Parents: e36c7bf
Author: Claus Ibsen <davsclaus@apache.org>
Authored: Sat Jan 9 15:51:21 2016 +0100
Committer: Claus Ibsen <davsclaus@apache.org>
Committed: Sat Jan 9 15:51:50 2016 +0100
----------------------------------------------------------------------
.../camel/component/mail/MailConsumer.java | 14 ++---
.../component/mail/MapMailMessagesBugRoute.java | 55 ++++++++++++++++++++
2 files changed, 62 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/5d3f3291/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
index 7ba9397..170b5ec 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
@@ -117,7 +117,13 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
int count = folder.getMessageCount();
if (count > 0) {
Message[] messages = retrieveMessages();
-
+ // need to call setPeek on java-mail to avoid the message being flagged eagerly
as SEEN on the server in case
+ // we process the message and rollback due an exception
+ if (getEndpoint().getConfiguration().isPeek()) {
+ for (Message message : messages) {
+ peekMessage(message);
+ }
+ }
polledMessages = processBatch(CastUtils.cast(createExchanges(messages)));
final MailBoxPostProcessAction postProcessor = getEndpoint().getPostProcessAction();
@@ -187,12 +193,6 @@ public class MailConsumer extends ScheduledBatchPollingConsumer {
// must use the original message in case we need to workaround a charset issue
when extracting mail content
final Message mail = exchange.getIn(MailMessage.class).getOriginalMessage();
- // need to call setPeek on java-mail to avoid the message being flagged eagerly
as SEEN on the server in case
- // we process the message and rollback due an exception
- if (getEndpoint().getConfiguration().isPeek()) {
- peekMessage(mail);
- }
-
// add on completion to handle after work when the exchange is done
exchange.addOnCompletion(new SynchronizationAdapter() {
public void onComplete(Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/5d3f3291/components/camel-mail/src/test/java/org/apache/camel/component/mail/MapMailMessagesBugRoute.java
----------------------------------------------------------------------
diff --git a/components/camel-mail/src/test/java/org/apache/camel/component/mail/MapMailMessagesBugRoute.java
b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MapMailMessagesBugRoute.java
new file mode 100644
index 0000000..1b22704
--- /dev/null
+++ b/components/camel-mail/src/test/java/org/apache/camel/component/mail/MapMailMessagesBugRoute.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.mail;
+
+import java.io.IOException;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.main.Main;
+
+/**
+ * CAMEL-9106
+ */
+public class MapMailMessagesBugRoute extends RouteBuilder {
+
+ public static void main(String... args) throws Exception {
+ Main main = new Main();
+ main.enableHangupSupport();
+ main.addRouteBuilder(new MapMailMessagesBugRoute());
+ main.run(args);
+ }
+
+ public void configure() {
+ // This is for Office365 host. Set your own host/username/password.
+ // When setting option mapMailMessage=true (the default) option peek=true fails with
the SEEN flag.
+ // When setting option mapMailMessage=false option peek=true will work as supposed.
+ from("imaps://outlook.office365.com?peek=true&unseen=true&debugMode=true&username=<username>&password=<password>")
+ .process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ if (true) {
+ throw new IOException("This will cause messages to be marked
SEEN even when peek=true.");
+ }
+ }
+ })
+ .to("log:mail");
+ }
+
+}
+
|