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() {