Federico Mariani created CAMEL-24159:
----------------------------------------
Summary: camel-azure - Umbrella: medium-severity findings from
July 2026 review (incl. cross-module credentialType override)
Key: CAMEL-24159
URL: https://issues.apache.org/jira/browse/CAMEL-24159
Project: Camel
Issue Type: Bug
Components: camel-azure-servicebus, camel-azure, camel-azure-eventhubs
Reporter: Federico Mariani
Attachments: camel-azure-review-2026-07.md
Umbrella for the medium-severity findings of the July 2026 review of the
camel-azure flagship components on main (4.22.0-SNAPSHOT). Full findings
document attached; low-severity findings are listed in the document only.
*Cross-cutting (all five modules)* — the CAMEL-21871 credential autowiring
silently overrides an *explicitly configured* {{credentialType}}:
# blob {{BlobComponent:84-97}} — autowired StorageSharedKeyCredential clobbers
explicit {{credentialType=AZURE_SAS}}.
# servicebus {{ServiceBusComponent:59-68}} + {{ServiceBusClientFactory:45-49}}
— additionally a user-supplied DefaultAzureCredential (managedIdentityClientId,
tenant...) is discarded and a fresh DefaultAzureCredentialBuilder().build()
used instead.
# eventhubs {{EventHubsComponent:52-66}} — autowired TokenCredential overrides
explicit CONNECTION_STRING and produces a misleading "Namespace and EventHub
name must be set" startup error.
# storage-queue {{QueueComponent:69-78}} — same override; QueueClientFactory
also prefers the credential's accountName over the URI's (wrong storage
account).
# storage-datalake {{DataLakeComponent:66-82}} +
{{DataLakeClientFactory:42-67}} — same override; additionally plain
{{accountKey}}/{{sasSignature}} (as used in the component doc examples) are not
mapped to a credential type -> baffling ClientSecretCredential startup error,
and the factory silently returns a null client on missing secrets (obscure NPE
at first poll).
Suggested direction: only derive/override credentialType when the user did not
set it explicitly; map accountKey/sasSignature to the matching type.
*camel-azure-servicebus*
# {{ServiceBusConsumer:73-107,137-154}} — route stop/start leaks the processor
client (doStart recreates unconditionally; doStop per CAMEL-23260 only calls
stop()) and accumulates lock-renewal period tasks.
# {{ServiceBusProducer:101-108}} / {{ServiceBusConsumer:167-170}} —
user-provided (and autowired) sender/processor clients are closed by the
endpoint on stop; same pattern in eventhubs {{EventHubsProducer:41-69}}.
# {{ServicebusCloudEventDataTypeTransformer:54-56}} — CE content type set to
Boolean {{true}} ({{containsKey}} result) instead of the header value (since
CAMEL-20450).
# {{ServiceBusProducer:126-132,224-231}} — producer mutates the
user/consumer-supplied APPLICATION_PROPERTIES map in place
(UnsupportedOperationException on immutable maps; retroactively mutates the
received message when bridging).
# {{ServiceBusConsumer:122-123}} — maxConcurrentCalls provides no backpressure
for async routes; unbounded in-flight growth, then mass duplicates once
lock-renewal windows lapse (follow-up to CAMEL-23937).
*camel-azure-eventhubs*
# {{EventHubsConsumer:211-236}} — unsynchronized lastTask/lastScheduledTask
mutation races; cancelled-but-referenced task swallows checkpoint updates.
# {{EventHubsConsumer:233}} + {{EventHubsCheckpointUpdaterTask:47}} —
checkpoint failures logged at DEBUG only; silent unbounded replay when the
checkpoint store breaks.
*camel-azure-storage-queue*
# {{QueueOperations:82-86}} — {{createQueue=true}} calls create (not
createIfNotExists) on every send; permanent 409 when the queue was pre-created
with metadata.
*camel-azure-storage-blob*
# {{BlobOperations:451-454}} — copyBlob validates the source account name
twice, never the source container name (CAMEL-17161 copy-paste).
# {{BlobChangeFeedOperations:46-50}} — changeFeedStartTime/EndTime ignored
unless both are set; one bound -> whole change feed returned.
# {{BlobCommonRequestOptions:57-60}} — ClassCastException when the documented
BlobRequestConditions header is used with append/page blob operations
(unchecked generic cast to SDK subtypes).
# {{BlobOperations:157-168}} — consumer with fileDir:
FileAlreadyExistsException on every poll after the first and
NoSuchFileException for nested blob names (same class as the datalake consumer
bug).
*camel-azure-storage-datalake*
# {{DataLakeUtils:38-47}} — appendToFile length probing calls reset() without
mark(); breaks BufferedInputStream and rejects spooled stream caches; buffers
whole payload in memory.
# {{DataLakeEndpoint:45-46,94-102}} — URI option {{dataLakeServiceClient}} is
dead (unconditionally overwritten in doStart).
# {{DataLakeFileOperations:163-168}} — consecutive appendToFile calls compute
the offset from the committed size only; second append overwrites the first
(unverified against live service).
# {{DataLakeConfiguration:105-107}} — generated catalog lists bogus operation
enum values ("listFileSystem, listFiles"); camel-jbang validate / IDEs reject
every real operation.
_This issue was researched and filed by Claude Code (AI) on behalf of Federico
Mariani (fmariani). Full findings document from the review is attached to the
umbrella issues._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)