[
https://issues.apache.org/jira/browse/CAMEL-26082?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-26082.
---------------------------------
Resolution: Fixed
Fixed by https://github.com/apache/camel/pull/28590 (merged as 7d9ef52e7848).
_Claude Code on behalf of davsclaus_
> camel-sjms - preserveMessageQos=true has no effect for InOnly sends
> (JMSPriority, JMSDeliveryMode and JMSExpiration headers ignored)
> ------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26082
> URL: https://issues.apache.org/jira/browse/CAMEL-26082
> Project: Camel
> Issue Type: Bug
> Components: camel-sjms
> Reporter: shashank
> Assignee: shashank
> Priority: Major
> Fix For: 4.24.0
>
>
> {{SjmsEndpoint.createInOnlyTemplate}} never calls
> {{template.setPreserveMessageQos(...)}}; only {{createInOutTemplate}} does,
> since CAMEL-17912 added the option (main 6a2f66ddec3e). So with
> {{preserveMessageQos=true}} an InOnly send takes the plain
> {{producer.send(message)}} branch of {{SjmsTemplate.send}}: the binding sets
> {{JMSPriority}}, {{JMSDeliveryMode}} and {{JMSExpiration}} on the JMS
> message, but {{MessageProducer.send(Message)}} overrides them with the
> producer defaults (or the endpoint QoS with {{explicitQosEnabled}}). The
> documented option ("send message using the QoS settings specified on the
> message") does nothing for InOnly: a message whose {{JMSExpiration}} is in
> the past is delivered and processed, {{JMSPriority}} is ignored (Artemis
> receives 4 instead of 8), and a NON_PERSISTENT message is sent persistent.
> camel-jms and camel-amqp pass the option to both templates and honour the
> headers (same scenario against all three with an embedded Artemis broker).
> The same InOnly template sends the replies of a consumer endpoint.
> *Fix*: {{createInOnlyTemplate}} passes {{preserveMessageQos}} to the
> template. In the {{preserveMessageQos}} branch of {{SjmsTemplate.send}}, a
> message without {{JMSExpiration}} gets the time to live of the endpoint
> ({{timeToLive}}, or {{requestTimeout}} for request/reply), as CAMEL-25724 did
> for camel-jms; without it, InOnly endpoints that set both {{timeToLive}} and
> {{preserveMessageQos}} would lose their time to live. Without a
> {{JMSPriority}} or {{JMSDeliveryMode}} header the branch now uses the
> {{priority}} and {{deliveryPersistent}}/{{deliveryMode}} of the endpoint, as
> the option description says, instead of the values of the new JMS message
> (the binding always sets PERSISTENT; the priority is the client default, 4
> with Artemis, 0 with the ActiveMQ Classic client), which would have sent the
> messages of an endpoint with {{deliveryPersistent=false}}/{{priority=7}}
> persistent with priority 4 or 0. {{SjmsTemplate.send}} gets the Camel message
> to tell whether the route set the header. camel-sjms2 inherits the change.
> Upgrade guide entry (the headers now apply to InOnly sends and replies; a
> header that is not set falls back to the endpoint, also for request/reply; a
> request without {{JMSExpiration}} now expires after {{requestTimeout}}).
> *Tests*: new {{InOnlyPreserveMessageQosTest}} (embedded Artemis), 9 tests; 7
> fail on main, for example {{header(JMSPriority) == 8 evaluated as: 4 == 8}},
> {{Expected: <Fresh> but was: <Stale>}} and, for the reply of a consumer,
> {{expected: <9> but was: <4>}}; the two controls (endpoint {{timeToLive}};
> endpoint priority and delivery mode without headers) pass on main and fail
> with only the template line or without the fallback. Unit tests with the fix:
> camel-sjms 148 run, 0 failures, 5 skipped; camel-sjms2 23 run, 0 failures.
> *Not changed*: camel-jms has the same gap in its {{preserveMessageQos}}
> branch (without a {{JMSDeliveryMode}}/{{JMSPriority}} header it uses the
> values of the JMS message, priority 0 for a new message with the ActiveMQ
> Classic client). Separate follow-up.
> *How it was found*: differential testing of camel-jms, camel-sjms and
> camel-amqp with the same inputs.
> *Affected*: main, camel-4.22.x, camel-4.18.x and camel-4.14.x (same method).
> Read, not run.
> _Filed with Claude Code on behalf of allthingssecurity._
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)