[ 
https://issues.apache.org/jira/browse/CAMEL-24532?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Federico Mariani updated CAMEL-24532:
-------------------------------------
    Description: 
*Problem*

The early-resolution listeners iterate Spring {{PropertySources}} in precedence 
order (highest first) and collect resolved values in one flat {{Properties}} 
object. When the same key is a matching placeholder in more than one source, 
each subsequent write replaces the previous value. The resulting property 
source is then added with {{addFirst}}, so the value originally taken from the 
lowest-precedence matching source wins.

*Reproduction*

Define the same property as an early-resolved placeholder in 
{{application.properties}} and in a higher-precedence profile-specific source 
such as {{application-prod.properties}}. With early resolution enabled, the 
parser resolves both entries but the resolved value from 
{{application.properties}} becomes effective, instead of the profile-specific 
value.

*Expected behaviour*

Early resolution must preserve Spring's normal precedence: the 
highest-precedence matching property source supplies the effective resolved 
value.

*Suggested direction*

Process sources in reverse when populating the flat override map, or otherwise 
retain the first value seen while iterating in precedence order. Add a 
regression test that covers duplicate keys across property sources.

  was:
h2 Problem

The early-resolution listeners iterate Spring {{PropertySources}} in precedence 
order (highest first) and collect resolved values in one flat {{Properties}} 
object. When the same key is a matching placeholder in more than one source, 
each subsequent write replaces the previous value. The resulting property 
source is then added with {{addFirst}}, so the value originally taken from the 
lowest-precedence matching source wins.

h2 Reproduction

Define the same property as an early-resolved placeholder in 
{{application.properties}} and in a higher-precedence profile-specific source 
such as {{application-prod.properties}}. With early resolution enabled, the 
parser resolves both entries but the resolved value from 
{{application.properties}} becomes effective, instead of the profile-specific 
value.

h2 Expected behaviour

Early resolution must preserve Spring's normal precedence: the 
highest-precedence matching property source supplies the effective resolved 
value.

h2 Suggested direction

Process sources in reverse when populating the flat override map, or otherwise 
retain the first value seen while iterating in precedence order. Add a 
regression test that covers duplicate keys across property sources.

h2 Context

The issue was identified and verified while reviewing 
https://github.com/apache/camel-spring-boot/pull/1900. The current HashiCorp 
implementation demonstrates the pattern: 
https://github.com/apache/camel-spring-boot/blob/82f0eaf18a4047624f457847e7ce883d0e0ed7a9/components-starter/camel-hashicorp-vault-starter/src/main/java/org/apache/camel/component/hashicorp/vault/springboot/SpringBootHashicorpVaultPropertiesParser.java#L65-L93.
 Original review discussion: 
https://github.com/apache/camel-spring-boot/pull/1900#issuecomment-5441526018.

_Created by Codex on behalf of Federico Mariani._


> Camel Spring Boot: Preserve property-source precedence during early vault 
> resolution
> ------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24532
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24532
>             Project: Camel
>          Issue Type: Bug
>            Reporter: Federico Mariani
>            Priority: Major
>
> *Problem*
> The early-resolution listeners iterate Spring {{PropertySources}} in 
> precedence order (highest first) and collect resolved values in one flat 
> {{Properties}} object. When the same key is a matching placeholder in more 
> than one source, each subsequent write replaces the previous value. The 
> resulting property source is then added with {{addFirst}}, so the value 
> originally taken from the lowest-precedence matching source wins.
> *Reproduction*
> Define the same property as an early-resolved placeholder in 
> {{application.properties}} and in a higher-precedence profile-specific source 
> such as {{application-prod.properties}}. With early resolution enabled, the 
> parser resolves both entries but the resolved value from 
> {{application.properties}} becomes effective, instead of the profile-specific 
> value.
> *Expected behaviour*
> Early resolution must preserve Spring's normal precedence: the 
> highest-precedence matching property source supplies the effective resolved 
> value.
> *Suggested direction*
> Process sources in reverse when populating the flat override map, or 
> otherwise retain the first value seen while iterating in precedence order. 
> Add a regression test that covers duplicate keys across property sources.



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

Reply via email to