diff --git a/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java b/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java index 4ced5937be..0ad682b9b3 100644 --- a/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java +++ b/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java @@ -823,16 +823,16 @@ public VariableResolver getVariableResolver(String varName) { return (varExpression) -> { try { // for each can have multiple outcomes 1 per item of the list so it should be computed like that - ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) getNodeInstanceByNodeId(node.getId(), true); - if(forEachNodeInstance == null) { - return new Object[0]; - } - List data = forEachNodeInstance.getNodeInstances().stream().filter(e -> e instanceof CompositeContextNodeInstance).map(e -> (CompositeContextNodeInstance) e).collect(Collectors.toList()); List outcome = new ArrayList<>(); - for(CompositeContextNodeInstance nodeInstance : data) { - Object resolvedValue = resolveExpressionVariable(varExpression, new NodeInstanceResolverFactory(nodeInstance)).orElse(null); - if(resolvedValue != null) { - outcome.add(resolvedValue); + for (NodeInstance item : getNodeInstances(true)) { + if (item.getNodeId() == node.getId() && item instanceof ForEachNodeInstance) { + List data = ((ForEachNodeInstance) item).getNodeInstances() + .stream().filter(e -> e instanceof CompositeContextNodeInstance) + .map(e -> (CompositeContextNodeInstance) e).collect(Collectors.toList()); + for (CompositeContextNodeInstance nodeInstance : data) { + resolveExpressionVariable(varExpression, new NodeInstanceResolverFactory(nodeInstance)) + .ifPresent(outcome::add); + } } } return outcome.toArray();