[
https://issues.apache.org/jira/browse/CAMEL-23971?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adriano Machado updated CAMEL-23971:
------------------------------------
Description:
BaseOrderedProperties (in core/camel-util) extends Properties which extends
Hashtable, but stores all data in a private LinkedHashMap. It overrides put(),
get(), getProperty(), keySet(), remove(), etc. to delegate to the map, but does
NOT override containsKey(), contains(), or containsValue().
Because put() never stores into the parent Hashtable, the inherited
Hashtable.containsKey() always returns false. This silently breaks ~10 call
sites across the codebase:
- VersionSetTest: assertions are vacuously true (always pass regardless of
actual state)
- DependencyList, ExportBaseCommand, ExportSpringBoot, ExportCamelMain,
ExportQuarkus: conditional guards that never fire, so properties are always
overwritten instead of preserved
- BaseMainSupport, MainHelper: property-consumed checks that never detect
consumed properties
Discovered while working on CAMEL-23867 (TUI settings per-key config routing).
The immediate workaround there was to use getProperty(key) != null instead of
containsKey(key), but the root cause belongs in BaseOrderedProperties.
Fix: add three overrides delegating to the internal map (containsKey,
containsValue, and the legacy contains). This affects OrderedProperties,
CamelCaseOrderedProperties, and OrderedLocationProperties (all subclasses). A
full build is needed to verify that fixing the bug does not break tests that
accidentally depended on the broken behavior.
_Reported by Claude Code on behalf of Adriano Machado._
was:
BaseOrderedProperties (in core/camel-util) extends Properties which extends
Hashtable, but stores all data in a private LinkedHashMap. It overrides put(),
get(), getProperty(), keySet(), remove(), etc. to delegate to the map, but does
NOT override containsKey(), contains(), or containsValue().
Because put() never stores into the parent Hashtable, the inherited
Hashtable.containsKey() always returns false. This silently breaks ~10 call
sites across the codebase:
- VersionSetTest: assertions are vacuously true (always pass regardless of
actual state)
- DependencyList, ExportBaseCommand, ExportSpringBoot, ExportCamelMain,
ExportQuarkus: conditional guards that never fire, so properties are always
overwritten instead of preserved
- BaseMainSupport, MainHelper: property-consumed checks that never detect
consumed properties
Discovered while working on CAMEL-23867 (TUI settings per-key config routing).
The immediate workaround there was to use getProperty(key) != null instead of
containsKey(key), but the root cause belongs in BaseOrderedProperties.
Fix: add three overrides delegating to the internal map (containsKey,
containsValue, and the legacy contains). This affects OrderedProperties,
CamelCaseOrderedProperties, and OrderedLocationProperties (all subclasses). A
full build is needed to verify that fixing the bug does not break tests that
accidentally depended on the broken behavior.
> BaseOrderedProperties missing containsKey/contains/containsValue overrides
> --------------------------------------------------------------------------
>
> Key: CAMEL-23971
> URL: https://issues.apache.org/jira/browse/CAMEL-23971
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Reporter: Adriano Machado
> Priority: Major
>
> BaseOrderedProperties (in core/camel-util) extends Properties which extends
> Hashtable, but stores all data in a private LinkedHashMap. It overrides
> put(), get(), getProperty(), keySet(), remove(), etc. to delegate to the map,
> but does NOT override containsKey(), contains(), or containsValue().
> Because put() never stores into the parent Hashtable, the inherited
> Hashtable.containsKey() always returns false. This silently breaks ~10 call
> sites across the codebase:
> - VersionSetTest: assertions are vacuously true (always pass regardless of
> actual state)
> - DependencyList, ExportBaseCommand, ExportSpringBoot, ExportCamelMain,
> ExportQuarkus: conditional guards that never fire, so properties are always
> overwritten instead of preserved
> - BaseMainSupport, MainHelper: property-consumed checks that never detect
> consumed properties
> Discovered while working on CAMEL-23867 (TUI settings per-key config
> routing). The immediate workaround there was to use getProperty(key) != null
> instead of containsKey(key), but the root cause belongs in
> BaseOrderedProperties.
> Fix: add three overrides delegating to the internal map (containsKey,
> containsValue, and the legacy contains). This affects OrderedProperties,
> CamelCaseOrderedProperties, and OrderedLocationProperties (all subclasses). A
> full build is needed to verify that fixing the bug does not break tests that
> accidentally depended on the broken behavior.
> _Reported by Claude Code on behalf of Adriano Machado._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)