[ 
https://issues.apache.org/jira/browse/CAMEL-19698?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17750477#comment-17750477
 ] 

Marat Gubaidullin commented on CAMEL-19698:
-------------------------------------------

Karavan uses it this way.
{code:java}
- setBody: 
    expression: 
      simple: 
        expression: ${header.foo} != null
{code}

It is fully explicit. It follows the schema. 

*SetBodyDefinition* has property *expression* of type *ExpressionDefinition*
*ExpressionDefinition* has property *simple* of type *SimpleExpression*
*SimpleExpression* has property *expression* of type *string*

It is unified for every expression language because different languages have 
different properties, not only expression.

Unified approach makes it very easy to implement in tooling.

> camel-yaml-dsl: Express "simple" and "expression.simple" are mutually 
> exclusive if possible 
> --------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-19698
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19698
>             Project: Camel
>          Issue Type: Task
>          Components: camel-yaml-dsl
>            Reporter: Tomohisa Igarashi
>            Assignee: Luca Burgazzoli
>            Priority: Major
>
> For example currently YAML DSL allows specifying both "simple" and 
> "expression" under "when"
> {code:yaml}
> - from:
>     uri: "timer:test"
>     parameters:
>       period: 3000
>     steps:
>     - when:
>         simple: "${header.baz} != null"
>         expression:
>           simple: "${header.baz} == null"
>         steps:
>           - log: "test"
> {code}
> But at runtime only latter wins in this case. It would be nice if this 
> exclusiveness could be expressed in the schema.
> Similarly, this "anyOf" seems to allow specifying multiple expressions
> https://github.com/apache/camel/blob/36bcd6277854b8e69ca91a8d51845a306b1c2136/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json#L3567-L3569
> for example
> {code:yaml}
> - from:
>     uri: "timer:test"
>     parameters:
>       period: 3000
>     steps:
>     - when:
>         simple: ${header.baz} != null
>         jq: ".foo"
>         steps:
>           - log: "test"
> {code}
> Although this ends up with a runtime error
> {noformat}
> 2023-08-02 14:27:29.445  INFO 1579388 --- [           main] 
> org.apache.camel.main.MainSupport   : Using Java 20.0.1 with PID 1579388. 
> Started by tomo in /home/tomo/workspace/Kaoto/datamapper-research/examples
> Field: jq has already been configured as an expression
>  in file:test.yaml, line 8, column 13:
>             jq: ".foo"
>                 ^
>       at 
> org.apache.camel.dsl.yaml.deserializers.ModelDeserializers$WhenDefinitionDeserializer.setProperty(ModelDeserializers.java:18445)
>       at 
> org.apache.camel.dsl.yaml.deserializers.ModelDeserializers$WhenDefinitionDeserializer.setProperty(ModelDeserializers.java:18385)
>       at 
> org.apache.camel.dsl.yaml.common.YamlDeserializerBase.setProperties(YamlDeserializerBase.java:125)
>       at 
> org.apache.camel.dsl.yaml.common.YamlDeserializerBase.construct(YamlDeserializerBase.java:65)
> {noformat}



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

Reply via email to