You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/01/18 10:01:14 UTC
(camel) branch main updated: CAMEL-20339: camel-yaml-dsl - Fix Saga EIP with options not working. (#12825)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new ee86742d8d7 CAMEL-20339: camel-yaml-dsl - Fix Saga EIP with options not working. (#12825)
ee86742d8d7 is described below
commit ee86742d8d7388e69e348dd36dc995fe2087c174
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Jan 18 11:01:08 2024 +0100
CAMEL-20339: camel-yaml-dsl - Fix Saga EIP with options not working. (#12825)
CAMEL-20339: camel-yaml-dsl - Fix Saga EIP with options not working.
---
.../camel/model/PropertyExpressionDefinition.java | 17 ++++-
.../dsl/yaml/deserializers/ModelDeserializers.java | 12 ++-
.../dsl/yaml/deserializers/CustomResolver.java | 1 -
.../generated/resources/schema/camelYamlDsl.json | 86 ++++++++++++++++++++--
.../org/apache/camel/dsl/yaml/SagaTest.groovy | 59 +++------------
5 files changed, 118 insertions(+), 57 deletions(-)
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/PropertyExpressionDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/PropertyExpressionDefinition.java
index b660d6f1834..ee19fa35529 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/PropertyExpressionDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/PropertyExpressionDefinition.java
@@ -34,11 +34,12 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "configuration")
@XmlRootElement(name = "propertyExpression")
@XmlAccessorType(XmlAccessType.FIELD)
-public class PropertyExpressionDefinition {
+public class PropertyExpressionDefinition implements HasExpressionType {
@XmlAttribute(required = true)
private String key;
@XmlElementRef
+ @Metadata(required = true)
private ExpressionDefinition expression;
public PropertyExpressionDefinition() {
@@ -46,7 +47,9 @@ public class PropertyExpressionDefinition {
public PropertyExpressionDefinition(String key, Expression expression) {
this.key = key;
- this.expression = new ExpressionDefinition(expression);
+ if (expression != null) {
+ setExpression(ExpressionNodeHelper.toExpressionDefinition(expression));
+ }
}
/**
@@ -70,4 +73,14 @@ public class PropertyExpressionDefinition {
public void setExpression(ExpressionDefinition expression) {
this.expression = expression;
}
+
+ @Override
+ public ExpressionDefinition getExpressionType() {
+ return getExpression();
+ }
+
+ @Override
+ public void setExpressionType(ExpressionDefinition expressionType) {
+ setExpression(expressionType);
+ }
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index a14e2849863..a5b552a0785 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -11696,6 +11696,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
description = "A key value pair where the value is an expression.",
deprecated = false,
properties = {
+ @YamlProperty(name = "__extends", type = "object:org.apache.camel.model.language.ExpressionDefinition", oneOf = "expression"),
@YamlProperty(name = "expression", type = "object:org.apache.camel.model.language.ExpressionDefinition", description = "Property values as an expression", displayName = "Expression", oneOf = "expression"),
@YamlProperty(name = "key", type = "string", required = true, description = "Property key", displayName = "Key")
}
@@ -11726,7 +11727,16 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
break;
}
default: {
- return false;
+ ExpressionDefinition ed = target.getExpressionType();
+ if (ed != null) {
+ throw new org.apache.camel.dsl.yaml.common.exception.DuplicateFieldException(node, propertyName, "as an expression");
+ }
+ ed = ExpressionDeserializers.constructExpressionType(propertyKey, node);
+ if (ed != null) {
+ target.setExpressionType(ed);
+ } else {
+ return false;
+ }
}
}
return true;
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
index 66659f8a71e..c0ccc80eac7 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
@@ -76,7 +76,6 @@ public class CustomResolver implements YamlDeserializerResolver {
// Expression
//
case "expression":
- case "org.apache.camel.model.PropertyExpressionDefinition":
case "org.apache.camel.model.language.ExpressionDefinition":
return new ExpressionDeserializers.ExpressionDefinitionDeserializers();
case "org.apache.camel.model.ExpressionSubElementDefinition":
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index df5d2b48600..5ab84e6d6ef 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -3832,6 +3832,62 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
+ "$ref" : "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ }, {
+ "not" : {
+ "anyOf" : [ {
+ "required" : [ "expression" ]
+ }, {
+ "required" : [ "constant" ]
+ }, {
+ "required" : [ "csimple" ]
+ }, {
+ "required" : [ "datasonnet" ]
+ }, {
+ "required" : [ "exchangeProperty" ]
+ }, {
+ "required" : [ "groovy" ]
+ }, {
+ "required" : [ "header" ]
+ }, {
+ "required" : [ "hl7terser" ]
+ }, {
+ "required" : [ "java" ]
+ }, {
+ "required" : [ "joor" ]
+ }, {
+ "required" : [ "jq" ]
+ }, {
+ "required" : [ "js" ]
+ }, {
+ "required" : [ "jsonpath" ]
+ }, {
+ "required" : [ "language" ]
+ }, {
+ "required" : [ "method" ]
+ }, {
+ "required" : [ "mvel" ]
+ }, {
+ "required" : [ "ognl" ]
+ }, {
+ "required" : [ "python" ]
+ }, {
+ "required" : [ "ref" ]
+ }, {
+ "required" : [ "simple" ]
+ }, {
+ "required" : [ "spel" ]
+ }, {
+ "required" : [ "tokenize" ]
+ }, {
+ "required" : [ "xpath" ]
+ }, {
+ "required" : [ "xquery" ]
+ }, {
+ "required" : [ "xtokenize" ]
+ } ]
+ }
+ }, {
"type" : "object",
"required" : [ "expression" ],
"properties" : {
@@ -3841,12 +3897,6 @@
"$ref" : "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
}
}
- }, {
- "not" : {
- "anyOf" : [ {
- "required" : [ "expression" ]
- } ]
- }
} ]
} ],
"properties" : {
@@ -3855,6 +3905,30 @@
"title" : "Key",
"description" : "Property key"
},
+ "constant" : { },
+ "csimple" : { },
+ "datasonnet" : { },
+ "exchangeProperty" : { },
+ "groovy" : { },
+ "header" : { },
+ "hl7terser" : { },
+ "java" : { },
+ "joor" : { },
+ "jq" : { },
+ "js" : { },
+ "jsonpath" : { },
+ "language" : { },
+ "method" : { },
+ "mvel" : { },
+ "ognl" : { },
+ "python" : { },
+ "ref" : { },
+ "simple" : { },
+ "spel" : { },
+ "tokenize" : { },
+ "xpath" : { },
+ "xquery" : { },
+ "xtokenize" : { },
"expression" : { }
},
"required" : [ "key" ]
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SagaTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SagaTest.groovy
index 80a66d32320..84f3ca3d585 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SagaTest.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/SagaTest.groovy
@@ -20,6 +20,8 @@ import org.apache.camel.dsl.yaml.support.YamlTestSupport
import org.apache.camel.model.SagaActionUriDefinition
import org.apache.camel.model.SagaDefinition
import org.apache.camel.model.ToDefinition
+import org.apache.camel.model.language.JqExpression
+import org.apache.camel.model.language.SimpleExpression
import org.apache.camel.spi.Resource
import org.apache.camel.support.PluginHelper
@@ -47,53 +49,16 @@ class SagaTest extends YamlTestSupport {
with(outputs[1], ToDefinition) {
endpointUri == 'direct:something'
}
+ options.size() == 2
+ options[0].key == "o1"
+ options[0].expression instanceof JqExpression
+ options[0].expression.expression == '.foo'
+ options[1].key == "o2"
+ options[1].expression instanceof SimpleExpression
+ options[1].expression.expression == '${body}'
}
where:
resource << [
- asResource('full', '''
- - from:
- uri: "direct:start"
- steps:
- - saga:
- propagation: "MANDATORY"
- completionMode: "MANUAL"
- compensation:
- uri: "direct:compensation"
- completion:
- uri: "direct:completion"
- steps:
- - to: "direct:something"
- option:
- - key: o1
- simple: "${body}"
- - key: o2
- expression:
- simple: "${body}"
- - to: "mock:result"
- '''),
- asResource('full-parameters', '''
- - from:
- uri: "direct:start"
- steps:
- - saga:
- propagation: "MANDATORY"
- completionMode: "MANUAL"
- compensation:
- uri: "direct"
- parameters:
- name: compensation
- completion:
- uri: "direct:completion"
- steps:
- - to: "direct:something"
- option:
- - key: o1
- simple: "${body}"
- - key: o2
- expression:
- simple: "${body}"
- - to: "mock:result"
- '''),
asResource('full-parameters-id', '''
- from:
uri: "direct:start"
@@ -111,7 +76,7 @@ class SagaTest extends YamlTestSupport {
- to: "direct:something"
option:
- key: o1
- simple: "${body}"
+ jq: ".foo"
- key: o2
expression:
simple:
@@ -136,7 +101,7 @@ class SagaTest extends YamlTestSupport {
- to: "direct:something"
option:
- key: o1
- simple: "${body}"
+ jq: ".foo"
- key: o2
expression:
simple: "${body}"
@@ -155,7 +120,7 @@ class SagaTest extends YamlTestSupport {
- to: "direct:something"
option:
- key: o1
- simple: "${body}"
+ jq: ".foo"
- key: o2
expression:
simple: "${body}"