Andrea Cosentino created CAMEL-25810:
----------------------------------------

             Summary: camel-core - recipientList, routingSlip, dynamicRouter 
and pollEnrich: resolve dynamic-URI property placeholders at build time, 
matching toD and enrich
                 Key: CAMEL-25810
                 URL: https://issues.apache.org/jira/browse/CAMEL-25810
             Project: Camel
          Issue Type: Improvement
          Components: camel-core
            Reporter: Andrea Cosentino
            Assignee: Andrea Cosentino
             Fix For: 4.24.0


CAMEL-24282 moved property-placeholder resolution for the dynamic-URI EIPs from 
every message to build time. Its description covered toD, recipientList, 
routingSlip, dynamicRouter, enrich and pollEnrich, but the change landed in 
SendDynamicProcessor only, which serves toD, enrich and wireTap. CAMEL-24414 
then did the same for the endpoint that pollEnrich resolves. Two paths still 
resolve property placeholders on the recipient evaluated for each message:

# recipientList, routingSlip and dynamicRouter prepare each evaluated recipient 
with ProcessorHelper.prepareRecipient(), which calls 
CamelContextExtension.normalizeUri(). 
DefaultCamelContextExtension.normalizeUri() resolves property placeholders 
(EndpointHelper.resolveEndpointUriPropertyPlaceholders) before normalizing.
# pollEnrich, when the target scheme has a PollDynamicAware (file, ftp, ftps, 
sftp, smb, azure-files), computes the URI for the poll-dynamic optimisation 
with PollEnricher.resolveUri(). That method still resolves property 
placeholders on the evaluated recipient, and the result is passed to 
PollDynamicAware.prepare() and can become the static URI that is polled.

Proposed change:

- ProcessorHelper.prepareRecipient(): normalize with 
NormalizedUri.newNormalizedUri(uri, false), the variant SendDynamicProcessor 
and PollEnricher.prepareRecipient() already use, instead of normalizeUri().
- PollEnricher.resolveUri(): drop the per-message 
EndpointHelper.resolveEndpointUriPropertyPlaceholders() call, as CAMEL-24282 
did for SendDynamicProcessor.
- Placeholders written in the route keep working: the expression text of these 
EIPs is resolved when the route is built (ExpressionReifier.createExpression -> 
parseString), as are the static pollEnrich URI and the 
routingSlip/dynamicRouter uriDelimiter.
- Upgrade guide (4.24): a \{\{...\}\} token that only appears at runtime in the 
evaluated recipient, for example one that came from a message header, is now 
kept as a literal part of the endpoint URI instead of being expanded. Same 
wording as the 4.22 note for toD and enrich.
- Tests, per EIP: a recipient taken from a header that contains a \{\{...\}\} 
token is used literally; a placeholder written in the route's expression is 
still resolved.

_Filed by Claude Code on behalf of Andrea Cosentino._



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to