Skip to content

Commit dcc8f61

Browse files
authored
[Fix serverlessworkflow#1315] Avoid null pointer exception if input is null (serverlessworkflow#1316)
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent 9762d4a commit dcc8f61

8 files changed

Lines changed: 52 additions & 30 deletions

File tree

impl/core/src/main/java/io/serverlessworkflow/impl/executors/RunWorkflowExecutorBuilder.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,22 @@
1818
import io.serverlessworkflow.api.types.RunTaskConfiguration;
1919
import io.serverlessworkflow.api.types.RunWorkflow;
2020
import io.serverlessworkflow.api.types.SubflowConfiguration;
21+
import io.serverlessworkflow.api.types.SubflowInput;
2122
import io.serverlessworkflow.impl.WorkflowDefinition;
2223
import io.serverlessworkflow.impl.WorkflowDefinitionId;
2324
import io.serverlessworkflow.impl.WorkflowUtils;
25+
import java.util.Map;
2426

2527
public class RunWorkflowExecutorBuilder implements RunnableTaskBuilder<RunWorkflow> {
2628

2729
public CallableTask build(RunWorkflow taskConfiguration, WorkflowDefinition definition) {
2830
SubflowConfiguration workflowConfig = taskConfiguration.getWorkflow();
31+
SubflowInput input = workflowConfig.getInput();
2932
return new RunWorkflowExecutor(
3033
new WorkflowDefinitionId(
3134
workflowConfig.getNamespace(), workflowConfig.getName(), workflowConfig.getVersion()),
3235
WorkflowUtils.buildMapResolver(
33-
definition.application(), workflowConfig.getInput().getAdditionalProperties()));
36+
definition.application(), input != null ? input.getAdditionalProperties() : Map.of()));
3437
}
3538

3639
@Override

impl/test/src/test/java/io/serverlessworkflow/impl/test/SubWorkflowTest.java

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import io.serverlessworkflow.fluent.spec.dsl.DSL;
2626
import io.serverlessworkflow.impl.WorkflowApplication;
2727
import java.util.Map;
28-
import org.junit.Test;
28+
import org.junit.jupiter.api.Test;
2929

3030
public class SubWorkflowTest {
3131

@@ -114,7 +114,7 @@ public void readContextAndSetTest() throws Exception {
114114
assertThat(updated.get("password"), is(equalTo("test_tested")));
115115
assertThat(
116116
result.get("detail"),
117-
is(equalTo("The workflow set-into-context:1.0.0 updated user in context")));
117+
is(equalTo("The workflow read-set-into-context:1.0.0 updated user in context")));
118118
}
119119
}
120120

@@ -147,10 +147,7 @@ public void runSubWorkflowFromDslTest() throws Exception {
147147

148148
Workflow parent =
149149
WorkflowBuilder.workflow("parentFlow", "org.acme", "1.0.0")
150-
.tasks(
151-
DSL.subflow(
152-
DSL.workflow("org.acme", "childFlow", "1.0.0")
153-
.input(Map.of("id", 42, "region", "us-east"))))
150+
.tasks(DSL.subflow(DSL.workflow("org.acme", "childFlow", "1.0.0")))
154151
.build();
155152

156153
try (WorkflowApplication app = WorkflowApplication.builder().build()) {
@@ -161,4 +158,32 @@ public void runSubWorkflowFromDslTest() throws Exception {
161158
assertThat(result.get("greeting"), is(equalTo("helloWorld")));
162159
}
163160
}
161+
162+
@Test
163+
public void runSubWorkflowsFromDslTest() throws Exception {
164+
Workflow child =
165+
WorkflowBuilder.workflow("childFlow", "org.acme", "1.0.0")
166+
.tasks(d -> d.set("update", s -> s.put("counter", 1).put("greeting", "helloWorld")))
167+
.build();
168+
169+
Workflow update =
170+
WorkflowBuilder.workflow("updateFlow", "org.acme", "1.0.0")
171+
.tasks(d -> d.set("update", s -> s.expr("$input+{counter:.counter+1}")))
172+
.build();
173+
174+
Workflow parent =
175+
WorkflowBuilder.workflow("parentFlow", "org.acme", "1.0.0")
176+
.tasks(DSL.subflow(DSL.workflow("org.acme", "childFlow", "1.0.0")))
177+
.tasks(DSL.subflow(DSL.workflow("org.acme", "updateFlow", "1.0.0")))
178+
.build();
179+
180+
try (WorkflowApplication app = WorkflowApplication.builder().build()) {
181+
app.workflowDefinition(child);
182+
app.workflowDefinition(update);
183+
Map<String, Object> result =
184+
app.workflowDefinition(parent).instance(Map.of()).start().join().asMap().orElseThrow();
185+
assertThat(result.get("counter"), is(equalTo(2)));
186+
assertThat(result.get("greeting"), is(equalTo("helloWorld")));
187+
}
188+
}
164189
}

impl/test/src/test/resources/workflows-samples/sub-workflow/output-export-and-set-sub-workflow-child.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
3+
namespace: test
44
name: set-into-context
55
version: '1.0.0'
66

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
4-
name: parent
3+
namespace: test
4+
name: set-context-parent
55
version: '1.0.0'
66

77
do:
88
- sayHello:
99
run:
1010
workflow:
11-
namespace: default
11+
namespace: test
1212
name: set-into-context
13-
version: '1.0.0'
14-
input:
15-
foo: bar
13+
version: '1.0.0'

impl/test/src/test/resources/workflows-samples/sub-workflow/read-context-and-set-sub-workflow-child.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
4-
name: set-into-context
3+
namespace: test
4+
name: read-set-into-context
55
version: '1.0.0'
66

77
do:
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
3+
namespace: test
44
name: parent
55
version: '1.0.0'
66

77
do:
88
- sayHello:
99
run:
1010
workflow:
11-
namespace: default
12-
name: set-into-context
13-
version: '1.0.0'
14-
input:
15-
foo: bar
11+
namespace: test
12+
name: read-set-into-context
13+
version: '1.0.0'

impl/test/src/test/resources/workflows-samples/sub-workflow/sub-workflow-child.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
4-
name: set-into-context
3+
namespace: test
4+
name: hello-world-child
55
version: '1.0.0'
66

77
do:
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
document:
22
dsl: '1.0.0'
3-
namespace: default
4-
name: parent
3+
namespace: test
4+
name: hello-world-parent
55
version: '1.0.0'
66

77
do:
88
- sayHello:
99
run:
1010
workflow:
11-
namespace: default
12-
name: set-into-context
11+
namespace: test
12+
name: hello-world-child
1313
version: '1.0.0'
14-
input:
15-
foo: bar

0 commit comments

Comments
 (0)