You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Karol Krawczyk (Jira)" <ji...@apache.org> on 2026/09/01 15:58:00 UTC
[jira] [Work started] (CAMEL-24582) simple language - add equals/!equals operators for literal (non-numeric) string comparison
[ https://issues.apache.org/jira/browse/CAMEL-24582?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on CAMEL-24582 started by Karol Krawczyk.
----------------------------------------------
> simple language - add equals/!equals operators for literal (non-numeric) string comparison
> ------------------------------------------------------------------------------------------
>
> Key: CAMEL-24582
> URL: https://issues.apache.org/jira/browse/CAMEL-24582
> Project: Camel
> Issue Type: Improvement
> Components: came-core
> Reporter: Claus Ibsen
> Assignee: Karol Krawczyk
> Priority: Minor
>
> CAMEL-24580 reported that Simple's == operator always favours numeric comparison when both operands are all-digit strings (e.g. "0001" == "001" -> true), which loses the leading-zero distinction for identifiers such as bank account numbers. That behaviour was confirmed as intentional and long-standing (introduced in CAMEL-15587, 2020) and CAMEL-24580 was closed as information provided rather than changed, since altering == would be a breaking change for existing routes relying on numeric coercion (e.g. comparing zero-padded ${date:now:HH} values against numeric literals).
> As a follow-up, add new binary predicate operators to the Simple language for literal/string-only equality that bypass ObjectHelper.typeCoerceEquals numeric coercion entirely:
> * equals - literal string equality (case-sensitive), analogous to Java's String.equals()
> * !equals (or notEquals) - negation
> Naming rationale: Simple's existing keyword operators already mirror Java String method names (contains -> String.contains(), startsWith -> String.startsWith(), endsWith -> String.endsWith()), so equals/!equals continues that convention rather than borrowing an abbreviated style from other languages (e.g. Perl's eq/ne).
> Example:
> {code:java}
> .filter().simple("${header.Account1} equals ${header.Account2}")
> {code}
> should evaluate "0001" vs "001" as false (plain string comparison), while == on the same values continues to return true (existing numeric-favouring behaviour, unchanged).
> Scope: add EQUALS / NOT_EQUALS to BinaryOperatorType, wire into BinaryExpression/PredicateBuilder using plain String equality (no type coercion), document in the simple-language.adoc, and add tests alongside the existing SimpleOperatorTest cases for ==/=~.
> See CAMEL-24580 for the full discussion and rationale.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)