shashank created CAMEL-25951:
--------------------------------
Summary: camel-jms, camel-sjms - an InOut request/reply drops the
attachments of the exchange
Key: CAMEL-25951
URL: https://issues.apache.org/jira/browse/CAMEL-25951
Project: Camel
Issue Type: Bug
Components: camel-jms, camel-sjms
Reporter: shashank
Assignee: shashank
When an exchange is sent InOut to a jms or sjms endpoint, the reply manager
sets the reply as a new OUT message: {{exchange.setOut(new JmsMessage(...))}}
in camel-jms {{ReplyManagerSupport.handleSuccessfulReply}}, and the same with
{{SjmsMessage}} in camel-sjms (main 9f839f4bcc9d). The attachments of a message
are its {{MessageTrait.ATTACHMENTS}} payload, and the new reply message does
not have it. So after every request/reply the exchange has lost its
attachments. A route that receives a mail with attachments, asks a JMS service
for something (InOut) and then forwards the mail sends it without the
attachments, and nothing is logged.
CAMEL-21755 (4.10.1) moved the attachments from exchange properties into the
message trait. CAMEL-24365 (4.22) then copied them into an OUT message created
by {{exchange.getOut()}}, so that camel-http and other producers keep them. The
4.22 upgrade guide calls this "restoring the pre-4.10.1 behavior where
attachments survived across the exchange". The JMS and SJMS reply managers do
not use {{exchange.getOut()}}, so they still drop the attachments.
*Fix*: the two reply managers copy the {{ATTACHMENTS}} trait of the IN message
into the reply message before {{exchange.setOut(response)}}, the same way as
{{AbstractExchange.newOutMessage}}. camel-amqp uses the camel-jms reply
manager, so it is fixed as well.
*Tests*: new {{JmsInOutKeepsAttachmentsTest}} (camel-jms) and
{{SjmsInOutKeepsAttachmentsTest}} (camel-sjms), 2 tests each, JUnit assertions
as in the modules. They use the embedded in-VM Artemis broker of the other
tests of these modules. A route sends InOut to a queue whose consumer answers
with "Bye " + body.
* {{replyKeepsTheAttachmentsOfTheRequest}} fails on main in both modules: {{the
reply must keep the attachments of the exchange ==> expected: not <null>}};
* {{replyToARequestWithoutAttachmentsHasNone}} is a control that passes on main
and with the fix.
Unit tests with the fix: camel-jms 478 run (three surefire executions: 456, 16
and 6), 0 failures, 11 skipped; camel-sjms 141 run, 0 failures, 5 skipped.
*How it was found*: regression mining. CAMEL-24365 restored the attachments for
one code path of the CAMEL-21755 change, and CAMEL-25779 had to restore another
one in {{JmsMessage}}. The reply managers are a third path with the same loss.
*Not changed* (follow-up JIRAs if wanted): the producers of camel-netty
({{ClientChannelHandler}}) and camel-undertow ({{UndertowClientCallback}}) also
set the response as a new message and drop the attachments.
*Affected*: main, camel-4.23.x and camel-4.22.x (same reply managers).
camel-4.18.x and camel-4.14.x have the same reply managers, and do not have the
CAMEL-24365 change either. Read, not run.
_Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)