Federico Mariani created CAMEL-24161:
----------------------------------------

             Summary: camel-salesforce - Umbrella: medium-severity findings 
from July 2026 review
                 Key: CAMEL-24161
                 URL: https://issues.apache.org/jira/browse/CAMEL-24161
             Project: Camel
          Issue Type: Bug
          Components: camel-salesforce
            Reporter: Federico Mariani
         Attachments: camel-salesforce-review-2026-07.md

Umbrella for the medium-severity findings of the July 2026 review of 
camel-salesforce-component on main (4.22.0-SNAPSHOT). Full findings document 
attached to the high-severity umbrella; low-severity findings are listed in the 
document only.

*Auth / session / HTTP client*
# {{SalesforceLoginConfig:271-275}} — refresh token printed in clear text by 
toString() (other secrets are masked) and logged at DEBUG by 
SalesforceComponent.doStart.
# {{SalesforceSecurityHandler:256-260}} — multipart create/update cannot be 
replayed after 401 re-login: {{body.rewind()}} result ignored and Jetty's 
MultiPartFormData.ContentSource does not support rewind -> retry sends an empty 
multipart POST.
# {{AbstractClientBase:190-199}} — replay-buffering loop treats Jetty *failure* 
chunks (isLast()==true) as normal EOF; a body InputStream failing mid-read 
results in a silently truncated request with no local exception.
# {{DefaultRawClient:49-53}} — auth retry produces duplicate X-SFDC-Session 
headers (add instead of put; Jetty copyRequest keeps custom headers), stale 
token first.
# {{SalesforceSecurityHandler:239-246}} — handler-driven re-logins are 
uncoordinated: N concurrent 401'd conversations fire N token requests (no 
single-flight like SalesforceSession.login(oldToken)).

*Streaming / Pub/Sub*
# {{SubscriptionHelper:203-209}} — connect-listener NPE when a channel was 
unsubscribed concurrently (unsubscribe never removes from channelsToSubscribe); 
remaining channels silently never resubscribed after the snapshot was cleared 
(same class as CAMEL-20834).
# {{PubSubApiClient:314-321}} — per-event decode failures are swallowed (log 
only, exception handler never invoked) while the stored replayId advances past 
the lost events; reconnects permanently skip them.
# {{PubSubApiClient:353-369,388-397}} — corrupted replay id with 
fallbackToLatestReplayId=false retries the same corrupt id forever; the user's 
original replay preset is overwritten on every resubscribe.
# {{PubSubApiClient:382-384}} — reconnect delay grows unboundedly; the 
configured maxBackoff is only applied to the login loop.

*REST / Bulk / Composite*
# {{JsonRestProcessor:221-224}} — RESPONSE_CLASS_DEFERRED/RESPONSE_CLASS_PREFIX 
exchange properties are not cleaned up (unlike processStreamResultResponse) and 
leak into subsequent producers on the same exchange.
# {{CompositeApiProcessor:125-144}} — composite rawPayload mode discards the 
exception whenever Salesforce returned an error body (virtually always); HTTP 
failures reported as success.
# {{AbstractRestProcessor:545-552}} — deleteSObjectWithId restores DTO fields 
*after* completing the exchange (all sibling operations restore before); 
related: {{AbstractRestProcessor:480-539}} NPEs (instead of falling back to the 
sObjectIdValue header) when the DTO's external-id field is unset.

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

Reply via email to