Federico Mariani created CAMEL-24686:
----------------------------------------
Summary: camel-joor - headerAs/exchangePropertyAs default-value
patterns match across two calls on the same line
Key: CAMEL-24686
URL: https://issues.apache.org/jira/browse/CAMEL-24686
Project: Camel
Issue Type: Bug
Components: camel-joor
Affects Versions: 4.22.0
Reporter: Federico Mariani
{{JoorCompiler}}'s {{HEADER_AS_DEFAULT_VALUE_PATTERN}} (and {{_NO_CLASS}}, and
the {{EXCHANGE_PROPERTY_AS_DEFAULT_VALUE_PATTERN}} pair) use a greedy {{(.+)}}
for the default value, so a script with two calls on one line is rewritten
across both:
{code}
'order-' + headerAs('amount', Integer) + '-' + headerAs('vip', Boolean)
{code}
generates {{headerAs(message, "amount", Integer) + "-" + headerAs(message,
"vip", Boolean.class)}} and fails to compile with {{cannot find symbol:
variable Integer}}. The {{.class}} dot in the patterns is also unescaped and
the quote class {{['|"]}} accepts a literal {{|}}. Workaround: write
{{Integer.class}}.
Proposed fix (implemented, tested): the default value is matched as
{{((?:[^()]|\([^()]*\))+?)}} (no parentheses except one balanced level, so it
can never reach the next call; a plain lazy {{(.+?)}} still spans mixed two-
and three-argument calls), the dot escaped, the quote class {{['"]}}. Three new
tests (two two-argument calls, two three-argument calls including a mixed form
and a default containing parentheses, and the {{exchangePropertyAs}} variants)
fail on the old patterns and pass with the fix.
Related: CAMEL-15741 (default-value functions added).
----
_Found during a benchmark review of camel-groovy and the other scripting
languages (camel-performance-tests branch camel-groovy-perf,
tests/camel-jmh/groovy-results, JMH 1.37, JDK 21, one M1 Pro laptop). A
candidate fix with tests exists on the local apache/camel branch
camel-perf-all-fixes; a PR follows._
_Claude Code on behalf of Croway_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)