Skip to content

Commit fac2213

Browse files
authored
Return null rather than throwing exception when conversion fail (#1222)
Signed-off-by: fjtirado <ftirados@redhat.com>
1 parent 745ed52 commit fac2213

4 files changed

Lines changed: 26 additions & 4 deletions

File tree

experimental/lambda/src/main/java/io/serverlessworkflow/impl/expressions/func/JavaExpressionFactory.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.serverlessworkflow.api.types.func.TypedJavaContextFunction;
2626
import io.serverlessworkflow.api.types.func.TypedJavaFilterFunction;
2727
import io.serverlessworkflow.api.types.func.TypedPredicate;
28+
import io.serverlessworkflow.impl.WorkflowModel;
2829
import io.serverlessworkflow.impl.WorkflowPredicate;
2930
import io.serverlessworkflow.impl.expressions.AbstractExpressionFactory;
3031
import io.serverlessworkflow.impl.expressions.ExpressionDescriptor;
@@ -44,20 +45,31 @@ public ObjectExpression buildExpression(ExpressionDescriptor descriptor) {
4445
if (value instanceof Function func) {
4546
return (w, t, n) -> func.apply(n.asJavaObject());
4647
} else if (value instanceof TypedFunction func) {
47-
return (w, t, n) -> func.function().apply(n.as(func.argClass()).orElseThrow());
48+
return (w, t, n) -> func.function().apply(convert(n, func.argClass()));
4849
} else if (value instanceof JavaFilterFunction func) {
4950
return (w, t, n) -> func.apply(n.asJavaObject(), w, t);
5051
} else if (value instanceof TypedJavaFilterFunction func) {
51-
return (w, t, n) -> func.function().apply(n.as(func.argClass()).orElseThrow(), w, t);
52+
return (w, t, n) -> func.function().apply(convert(n, func.argClass()), w, t);
5253
} else if (value instanceof JavaContextFunction func) {
5354
return (w, t, n) -> func.apply(n.asJavaObject(), w);
5455
} else if (value instanceof TypedJavaContextFunction func) {
55-
return (w, t, n) -> func.function().apply(n.as(func.argClass()).orElseThrow(), w);
56+
return (w, t, n) -> func.function().apply(convert(n, func.argClass()), w);
5657
} else {
5758
return (w, t, n) -> value;
5859
}
5960
}
6061

62+
private <T> T convert(WorkflowModel model, Class<T> argClass) {
63+
return model.isNull()
64+
? null
65+
: model
66+
.as(argClass)
67+
.orElseThrow(
68+
() ->
69+
new IllegalArgumentException(
70+
"Cannot convert model " + model.asJavaObject() + " to class" + argClass));
71+
}
72+
6173
@Override
6274
public int priority(ExpressionDescriptor descriptor) {
6375
Object value = descriptor.asObject();

experimental/lambda/src/test/java/io/serverless/workflow/impl/executors/func/FuncDSLDataFlowTransformationHelpersTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,8 @@ void test_output_with_exportAs() {
122122
Long taskOutput = output(taskContextData, Long.class);
123123
softly.assertThat(taskOutput).isEqualTo(15L);
124124
return taskOutput * 2;
125-
}))
125+
},
126+
Object.class))
126127
.build();
127128

128129
try (WorkflowApplication app = WorkflowApplication.builder().build()) {

impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowModel.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,8 @@ public interface WorkflowModel {
3939
Class<?> objectClass();
4040

4141
<T> Optional<T> as(Class<T> clazz);
42+
43+
default boolean isNull() {
44+
return asJavaObject() == null;
45+
}
4246
}

impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ protected JacksonModel(JsonNode node) {
4646
this.node = node;
4747
}
4848

49+
@Override
50+
public boolean isNull() {
51+
return node.isNull();
52+
}
53+
4954
@Override
5055
public Optional<Boolean> asBoolean() {
5156
return node.isBoolean() ? Optional.of(node.asBoolean()) : Optional.empty();

0 commit comments

Comments
 (0)