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

Claus Ibsen resolved CAMEL-24918.
---------------------------------
    Resolution: Fixed

> camel-core: metadata for endpoint options that are evaluated as a Simple 
> expression per message
> -----------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24918
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24918
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-catalog
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.23.0
>
>
> Camel has no metadata saying which endpoint options are evaluated as a Simple 
> expression for each message. That knowledge only exists inside the producers, 
> so every tool that needs it has to guess.
> It came up in CAMEL-24917, where the validator says that {{to:}} with 
> {{$\{...\}}} in the uri path should be {{toD:}}. The check needs to know the 
> components where an expression in the path is correct, and the only way to 
> write that today is a hand-maintained exclude list:
> {code}
> language, sql, sql-stored, elsql, jdbc, spring-jdbc, mybatis, xquery, xslt
> {code}
> That list is already wrong. {{camel-micrometer}} 
> ({{micrometer:metricsType:metricsName}}) evaluates the metric name for every 
> message in {{AbstractMicrometerProducer.process}}:
> {code:java}
> String defaultMetricsName = simple(exchange, getEndpoint().getMetricsName(), 
> String.class);
> {code}
> so {{to: micrometer:counter:orders.$\{header.region\}}} is correct and the 
> validator flags it. {{camel-opentelemetry-metrics}} does the same. Neither is 
> in the list, and no list written by reading producer code stays right as 
> components are added.
> h3. Proposal
> A new attribute on {{@Metadata}}, beside the tooling flags that are already 
> there ({{supportFileReference}}, {{largeInput}}, {{inputLanguage}}):
> {code:java}
> @UriPath
> @Metadata(supportSimpleExpression = true, description = "Name of the metric")
> private String metricsName;
> {code}
> * {{camel-package-maven-plugin}} writes {{"supportSimpleExpression": true}} 
> into the component JSON, so it reaches the catalog
> * the component documentation table says the option takes a Simple expression
> * {{camel-yaml-dsl-validator}} replaces its exclude list with a catalog 
> lookup: an expression in the path is a mistake only when no path option of 
> that component supports Simple
> * editors and Kaoto can offer expression completion where it is meant, and 
> nowhere else
> h3. Work
> # the {{supportSimpleExpression}} attribute and the generator support
> # annotate the components that do it, found by looking for producers that 
> evaluate an endpoint field with the simple language: micrometer, 
> opentelemetry-metrics, language, sql and its relatives (the {{:#$\{...\}}} 
> parameters), file and ftp ({{fileName}}), jpa ({{parameters}}), and whatever 
> else the sweep turns up
> # the validator reads the catalog instead of its list
> This is worth doing beyond the validator: it is metadata that nothing in 
> Camel records today, and every tool around Camel - documentation, editors, 
> agents - has to guess without it.



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

Reply via email to