This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 535df4babd [Fix #3877] Only propagate function not found when
evaluating JQ expr (#3878)
535df4babd is described below
commit 535df4babdbf9ad39b52db92dff21bfb515ed078
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Tue Apr 1 17:29:04 2025 +0200
[Fix #3877] Only propagate function not found when evaluating JQ expr
(#3878)
---
.../java/org/kie/kogito/expr/jq/JqExpression.java | 41 +++++++++++++---------
.../workflow/ServerlessWorkflowParsingTest.java | 2 +-
.../test/resources/exec/jqDelExpression.sw.json | 17 +++++++++
3 files changed, 43 insertions(+), 17 deletions(-)
diff --git
a/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
b/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
index 8039176cfe..d901d4cb39 100644
---
a/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
+++
b/kogito-serverless-workflow/kogito-jq-expression/src/main/java/org/kie/kogito/expr/jq/JqExpression.java
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
+import java.util.regex.Pattern;
import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
import org.kie.kogito.jackson.utils.FunctionJsonNode;
@@ -229,25 +230,33 @@ public class JqExpression implements Expression {
return validationError == null;
}
+ private static Pattern FUNCTION_DOES_NOT_EXIST = Pattern.compile("Function
(.*) does not exist");
+
private void checkFunctionCall(net.thisptr.jackson.jq.Expression toCheck)
throws JsonQueryException {
- if (toCheck instanceof FunctionCall) {
- toCheck.apply(scope.get(),
ObjectMapperFactory.get().createObjectNode(), out -> {
- });
- } else if (toCheck instanceof BinaryOperatorExpression) {
- if (rhsField != null) {
- try {
- checkFunctionCall((net.thisptr.jackson.jq.Expression)
rhsField.get(toCheck));
- } catch (ReflectiveOperationException e) {
- logger.warn("Ignoring unexpected error {} while accesing
field {} for class{} and expression {}", e.getMessage(), rhsField.getName(),
toCheck.getClass(), expr);
+ try {
+ if (toCheck instanceof FunctionCall) {
+ toCheck.apply(scope.get(),
ObjectMapperFactory.get().createObjectNode(), out -> {
+ });
+ } else if (toCheck instanceof BinaryOperatorExpression) {
+ if (rhsField != null) {
+ try {
+ checkFunctionCall((net.thisptr.jackson.jq.Expression)
rhsField.get(toCheck));
+ } catch (ReflectiveOperationException e) {
+ logger.warn("Ignoring unexpected error {} while
accesing field {} for class{} and expression {}", e.getMessage(),
rhsField.getName(), toCheck.getClass(), expr);
+ }
}
+ } else if (toCheck != null) {
+ for (Field f : getAllExprFields(toCheck))
+ try {
+ checkFunctionCall((net.thisptr.jackson.jq.Expression)
f.get(toCheck));
+ } catch (ReflectiveOperationException e) {
+ logger.warn("Ignoring unexpected error {} while
accesing field {} for class{} and expression {}", e.getMessage(), f.getName(),
toCheck.getClass(), expr);
+ }
+ }
+ } catch (JsonQueryException ex) {
+ if (FUNCTION_DOES_NOT_EXIST.matcher(ex.getMessage()).matches()) {
+ throw ex;
}
- } else if (toCheck != null) {
- for (Field f : getAllExprFields(toCheck))
- try {
- checkFunctionCall((net.thisptr.jackson.jq.Expression)
f.get(toCheck));
- } catch (ReflectiveOperationException e) {
- logger.warn("Ignoring unexpected error {} while accesing
field {} for class{} and expression {}", e.getMessage(), f.getName(),
toCheck.getClass(), expr);
- }
}
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
index 6041dbbdf9..98bcaf3f00 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/java/org/kie/kogito/serverless/workflow/ServerlessWorkflowParsingTest.java
@@ -608,7 +608,7 @@ public class ServerlessWorkflowParsingTest extends
AbstractServerlessWorkflowPar
@ParameterizedTest
@ValueSource(strings = { "/examples/applicantworkflow.sw.json",
"/exec/error.sw.json", "/exec/callback.sw.json", "/exec/compensation.sw.json",
"/exec/compensation.end.sw.json",
- "/exec/foreach.sw.json" })
+ "/exec/foreach.sw.json", "/exec/jqDelExpression.sw.json" })
public void testSpecExamplesParsing(String workflowLocation) throws
Exception {
Workflow workflow =
Workflow.fromSource(WorkflowTestUtils.readWorkflowFile(workflowLocation));
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/resources/exec/jqDelExpression.sw.json
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/resources/exec/jqDelExpression.sw.json
new file mode 100644
index 0000000000..c3227377b0
--- /dev/null
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/test/resources/exec/jqDelExpression.sw.json
@@ -0,0 +1,17 @@
+{
+ "id": "jqDelExpression",
+ "name": "jqDelExpression",
+ "start": "testJqExpression",
+ "states": [
+ {
+ "name": "testJqExpression",
+ "type": "inject",
+ "data": {},
+ "stateDataFilter": {
+ "input": "${ del( .InfractionsWithInstants[] | .BaseDepassement,
.ActivitesIncriminees, .DebutIdentification, .FinIdentification ) }",
+ "output": "{ Infractions: .InfractionsWithInstants }"
+ },
+ "end": true
+ }
+ ]
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]