[ 
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)

Reply via email to