This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 58a1ec6a14a CAMEL-21700: camel-attachments - Fix when wrapping to 
AttachmentMessage then the exchange should adapt as well (#17033)
58a1ec6a14a is described below

commit 58a1ec6a14ab28c464cf2c1143a081e702864e7c
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Feb 3 21:10:42 2025 +0100

    CAMEL-21700: camel-attachments - Fix when wrapping to AttachmentMessage 
then the exchange should adapt as well (#17033)
---
 .../java/org/apache/camel/attachment/AttachmentConverter.java  | 10 +++++++++-
 .../java/org/apache/camel/attachment/AttachmentMessage.java    |  6 ++++++
 .../org/apache/camel/attachment/DefaultAttachmentMessage.java  |  6 ++++++
 .../java/org/apache/camel/component/mail/MailConsumer.java     |  9 +++++++--
 4 files changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentConverter.java
 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentConverter.java
index d4ff827c44b..9fcf132a725 100644
--- 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentConverter.java
+++ 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentConverter.java
@@ -32,7 +32,15 @@ public final class AttachmentConverter {
 
     @Converter
     public static AttachmentMessage toAttachmentMessage(final Message message) 
{
-        return new DefaultAttachmentMessage(message);
+        AttachmentMessage answer;
+        if (message instanceof AttachmentMessage am) {
+            answer = am;
+        } else {
+            answer = new DefaultAttachmentMessage(message);
+            // need to wrap exchange message as attachment capable
+            message.getExchange().setMessage(answer);
+        }
+        return answer;
     }
 
     @Converter
diff --git 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
index b97461a09c3..44240d265e7 100644
--- 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
+++ 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/AttachmentMessage.java
@@ -28,6 +28,12 @@ import org.apache.camel.Message;
  */
 public interface AttachmentMessage extends Message {
 
+    /**
+     * The {@link AttachmentMessage} will wrap the previous {@link Message} 
and this method gives access to the previous
+     * message instance.
+     */
+    Message getDelegateMessage();
+
     /**
      * Returns the attachment specified by the id
      *
diff --git 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
index 71ab662adb0..10e53c88b78 100644
--- 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
+++ 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
@@ -29,6 +29,7 @@ import org.apache.camel.Message;
 import org.apache.camel.trait.message.MessageTrait;
 
 public final class DefaultAttachmentMessage implements AttachmentMessage {
+
     /*
      * Attachments are stores as a property on the {@link Exchange} which 
ensures they are propagated
      * during routing and we dont have to pollute the generic {@link Message} 
with attachment APIs
@@ -43,6 +44,11 @@ public final class DefaultAttachmentMessage implements 
AttachmentMessage {
         this.exchange = delegate.getExchange();
     }
 
+    @Override
+    public Message getDelegateMessage() {
+        return delegate;
+    }
+
     @Override
     public void reset() {
         delegate.reset();
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 4a818e112d9..df65c51e00b 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
@@ -233,8 +233,13 @@ public class MailConsumer extends 
ScheduledBatchPollingConsumer {
             // update pending number of exchanges
             pendingExchanges = total - index - 1;
 
-            // 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();
+            // must use the original message in case we need to work around a 
charset issue when extracting mail content
+            var msg = exchange.getIn();
+            if (msg instanceof AttachmentMessage am) {
+                // unwrap from attachment message
+                msg = am.getDelegateMessage();
+            }
+            final Message mail = ((MailMessage) msg).getOriginalMessage();
 
             // add on completion to handle after work when the exchange is done
             exchange.getExchangeExtension().addOnCompletion(new 
SynchronizationAdapter() {

Reply via email to