diff --git a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/JacksonConverter.java b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/JacksonConverter.java index 321cd04394d..c9f05734189 100644 --- a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/JacksonConverter.java +++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/core/datatype/impl/coverter/JacksonConverter.java @@ -23,7 +23,7 @@ public class JacksonConverter implements Function { - private Class clazz; + private final Class clazz; public JacksonConverter(Class clazz) { this.clazz = clazz; diff --git a/kogito-serverless-workflow/kogito-serverless-workflow-utils/src/main/java/org/kie/kogito/serverless/workflow/utils/JsonNodeContext.java b/kogito-serverless-workflow/kogito-serverless-workflow-utils/src/main/java/org/kie/kogito/serverless/workflow/utils/JsonNodeContext.java index 7f79d81103d..c2a0bc232de 100644 --- a/kogito-serverless-workflow/kogito-serverless-workflow-utils/src/main/java/org/kie/kogito/serverless/workflow/utils/JsonNodeContext.java +++ b/kogito-serverless-workflow/kogito-serverless-workflow-utils/src/main/java/org/kie/kogito/serverless/workflow/utils/JsonNodeContext.java @@ -16,7 +16,6 @@ package org.kie.kogito.serverless.workflow.utils; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; @@ -67,11 +66,10 @@ private static Stream getEvalVariables(ContextContainer container) { } public static JsonNodeContext from(JsonNode jsonNode, KogitoProcessContext context) { - Map map = Collections.emptyMap(); + Map map = new HashMap<>(); if (jsonNode.isObject()) { ObjectNode objectNode = (ObjectNode) jsonNode; - map = addVariablesFromContext(context); - map.forEach(objectNode::set); + addVariablesFromContext(objectNode, context, map); } return new JsonNodeContext(jsonNode, map.keySet()); } @@ -85,31 +83,34 @@ private JsonNodeContext(JsonNode jsonNode, Set keys) { this.keys = keys; } - private static Map addVariablesFromContext(KogitoProcessContext processInfo) { + private static void addVariablesFromContext(ObjectNode jsonNode, KogitoProcessContext processInfo, Map variables) { KogitoNodeInstance nodeInstance = processInfo.getNodeInstance(); - Map variables = new HashMap<>(); if (nodeInstance != null) { NodeInstanceContainer container = nodeInstance instanceof NodeInstanceContainer ? (NodeInstanceContainer) nodeInstance : nodeInstance.getNodeInstanceContainer(); while (container instanceof ContextableInstance) { - getVariablesFromContext(variables, (ContextableInstance) container); + getVariablesFromContext(jsonNode, (ContextableInstance) container, variables); container = container instanceof KogitoNodeInstance ? ((KogitoNodeInstance) container).getNodeInstanceContainer() : null; } } - return variables; + variables.forEach(jsonNode::set); } - private static void getVariablesFromContext(Map variables, ContextableInstance node) { + private static void getVariablesFromContext(ObjectNode jsonNode, ContextableInstance node, Map variables) { VariableScopeInstance variableScope = (VariableScopeInstance) node.getContextInstance(VariableScope.VARIABLE_SCOPE); if (variableScope != null) { Collection evalVariables = getEvalVariables(node).map(Variable::getName).collect(Collectors.toList()); for (Entry e : variableScope.getVariables().entrySet()) { - if (evalVariables.contains(e.getKey()) || node instanceof WorkflowProcessInstance && !e.getKey().equals("workflowdata")) { + if (evalVariables.contains(e.getKey()) || shouldAdd(e, jsonNode, node)) { variables.putIfAbsent(e.getKey(), JsonObjectUtils.fromValue(e.getValue())); } } } } + private static boolean shouldAdd(Entry e, ObjectNode jsonNode, ContextableInstance node) { + return jsonNode != e.getValue() && node instanceof WorkflowProcessInstance && !e.getKey().equals("workflowdata"); + } + @Override public void close() { if (!keys.isEmpty()) {