Federico Mariani created CAMEL-24078:
----------------------------------------
Summary: camel-jms / camel-amqp code review (July 2026): umbrella
for medium/low findings
Key: CAMEL-24078
URL: https://issues.apache.org/jira/browse/CAMEL-24078
Project: Camel
Issue Type: Bug
Components: camel-jms
Affects Versions: 4.21.0
Reporter: Federico Mariani
Attachments: camel-jms-amqp-medium-low-findings.md
A deep code review of camel-jms and camel-amqp (July 2026, main /
4.22.0-SNAPSHOT) surfaced 6 high-severity findings - filed individually with
failing test reproducers attached:
* CAMEL-24072 - camel-jms: component-level transacted=true breaks
ConnectionFactory autowiring - startup fails with "connectionFactory must be
specified"
* CAMEL-24073 - camel-jms: InOut AsyncCallback.done() invoked twice when the
JMS send fails after reply registration
* CAMEL-24074 - camel-jms: TemporaryQueueReplyManager resolves the temporary
reply queue without synchronization - replies can be black-holed (CAMEL-20769
follow-up)
* CAMEL-24075 - camel-jms: transferException=true silently swallows processing
failures (and commits the transaction) when the message has no JMSReplyTo
* CAMEL-24076 - camel-jms: browseLimit URI option is dead - browsing is
unlimited despite the documented default of 100 (CAMEL-21183 follow-up)
* CAMEL-24077 - camel-amqp: useSsl=true renders empty transport.* options -
breaks JVM-default trust store and server-only TLS
This umbrella collects the remaining *12 medium* and *15 low* findings; the
full details (code references, failure scenarios, history, and a
route-reachability triage for each) are in the attached
{{camel-jms-amqp-medium-low-findings.md}}.
Medium highlights:
* M1: {{JmsSendDynamicAware.resolveStaticUri}} corrupts the static toD URI via
literal first-occurrence replace (can silently send to a *queue* named
{{topic}}); affects AMQPSendDynamicAware identically
* M2: {{JmsPollingConsumer.receive(timeout)}} mutates the shared JmsTemplate
receiveTimeout - not thread-safe under concurrent
{{pollEnrich}}/ConsumerTemplate use
* M3: endpoint-level {{includeAllJMSXProperties=true}} silently ignored
(component strategy is set on the endpoint before URI options are applied)
* M4: component-level {{messageListenerContainerFactory}} silently ignored
(consumerType never switched to Custom)
* M5: suspend/resume permanently kills consumption with
{{defaultTaskExecutorType=ThreadPool}} (executor destroyed on stop, container
reused on resume)
* M6: {{asyncStartListener=true}} defeats {{autoStartup=false}} (ordering race
on the initialized flag)
* M9: camel-amqp - setting username/password clobbers an explicitly configured
connectionFactory with a new localhost:5672 factory
The review also verified the security posture clean (CVE-2025-27636
header-injection defenses, ObjectMessage defaults, security annotations) -
details in the attachment.
Individual sub-tasks/issues can be split out of this umbrella as they get
picked up.
----
_This issue was researched and filed by Claude Code on behalf of [~croway]
(GitHub: Croway), as part of a deep code review of camel-jms and camel-amqp. A
failing JUnit reproducer is attached; it fails deterministically on current
main (4.22.0-SNAPSHOT)._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)