shashank created CAMEL-25950:
--------------------------------
Summary: camel-sjms - SjmsMessage loses its attachments when the
exchange is copied (Multicast, Split, Recipient List, Wire Tap)
Key: CAMEL-25950
URL: https://issues.apache.org/jira/browse/CAMEL-25950
Project: Camel
Issue Type: Bug
Components: camel-sjms, camel-sjms2
Reporter: shashank
Assignee: shashank
{{SjmsMessage.copyFrom}} (main 9f839f4bcc9d) overrides
{{MessageSupport.copyFrom}} without calling it. It copies the body and the
headers, but not the {{MessageTrait.ATTACHMENTS}} payload, which is where the
attachments of a message are kept (camel-attachments {{AttachmentMessage}}
stores them there). So when an exchange received from an sjms endpoint is
copied, the copy has no attachments. Exchanges are copied by the Multicast,
Recipient List, Split and Wire Tap EIPs, and by a mock endpoint, among others.
A route such as {{from("sjms:queue:in")}} that adds attachments and then
multicasts (or splits) sends the copies on without them, silently.
Until CAMEL-21755 (4.10.1) the attachments were exchange properties, which
every exchange copy keeps. CAMEL-21755 moved them into a message trait, which
only {{MessageSupport.copyFromWithNewBody}} copies. camel-jms had the same gap
in {{JmsMessage.copyFrom}}: CAMEL-23193 fixed it, CAMEL-24365 removed that
copy, and CAMEL-25779 restored it. {{SjmsMessage}} never got the copy.
*Fix*: {{SjmsMessage.copyFrom}} copies the {{ATTACHMENTS}} trait into a new
map, the same way as {{MessageSupport}} and {{JmsMessage}}. camel-sjms2 uses
the same {{SjmsMessage}}, so it is fixed as well.
*Tests*: new {{SjmsMessageCopyAttachmentsTest}} (3 tests, JUnit assertions as
in the module). It uses the embedded in-VM Artemis broker of the other sjms
tests. Fail on main:
* {{multicastCopyKeepsTheAttachmentsOfAnSjmsMessage}} (a route from sjms that
adds an attachment and multicasts to a mock): {{the copy made by the multicast
must keep the attachments ==> expected: not <null>}};
* {{copyKeepsTheAttachments}} ({{SjmsMessage.copy()}}): {{copy() must keep the
attachments ==> expected: not <null>}}.
{{copyOfAMessageWithoutAttachmentsHasNone}} is a control that passes on main
and with the fix.
camel-sjms unit tests with the fix: 142 run, 0 failures, 5 skipped.
*How it was found*: regression mining. CAMEL-25779 restored a fix (CAMEL-23193)
that a later change (CAMEL-24365) had removed from {{JmsMessage}}. The same
override exists in {{SjmsMessage}}, where the attachments have been lost on
copy since CAMEL-21755.
*Affected*: main, camel-4.23.x, camel-4.22.x, camel-4.18.x and camel-4.14.x
({{SjmsMessage.copyFrom}} is the same on these branches; read, not run).
_Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)