From d80f1865d4f74a43a4378e232275d32aaa73460d Mon Sep 17 00:00:00 2001 From: Francisco Javier Tirado Sarti Date: Wed, 22 Jul 2026 20:04:36 +0200 Subject: [PATCH] [Fix #1553] Initialize call field in generated Callxxx classes When using DSL, the call field is not set unless the DSL method implementation invokes either setCall or withCall, which current implementation is not actually doing, leading to the reported issue. Rather than changing a lot of fluent dsl classes both in sdk and experimental (recently moved to QFlow) it is better to fix in just one place, the generator of the problematic types. Signed-off-by: Francisco Javier Tirado Sarti --- .../java/io/serverlessworkflow/api/FeaturesTest.java | 10 ++++++++-- .../serverlessworkflow/generator/CustomAnnotator.java | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/src/test/java/io/serverlessworkflow/api/FeaturesTest.java b/api/src/test/java/io/serverlessworkflow/api/FeaturesTest.java index 39d7045bf..9011e3a8c 100644 --- a/api/src/test/java/io/serverlessworkflow/api/FeaturesTest.java +++ b/api/src/test/java/io/serverlessworkflow/api/FeaturesTest.java @@ -15,7 +15,6 @@ */ package io.serverlessworkflow.api; -import static io.serverlessworkflow.api.WorkflowReader.readWorkflow; import static io.serverlessworkflow.api.WorkflowReader.readWorkflowFromClasspath; import static io.serverlessworkflow.api.WorkflowReader.validation; import static io.serverlessworkflow.api.WorkflowWriter.workflowAsBytes; @@ -30,9 +29,13 @@ import java.io.IOException; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FeaturesTest { + private static final Logger logger = LoggerFactory.getLogger(FeaturesTest.class); + @ParameterizedTest @ValueSource( strings = { @@ -71,8 +74,11 @@ private static Workflow writeAndReadInMemory(Workflow workflow) throws IOExcepti writeWorkflow(out, workflow, WorkflowFormat.JSON); bytes = out.toByteArray(); } + if (logger.isDebugEnabled()) { + logger.debug("Workflow string representation is {}", new String(bytes)); + } try (ByteArrayInputStream in = new ByteArrayInputStream(bytes)) { - return readWorkflow(in, WorkflowFormat.JSON); + return validation().read(in, WorkflowFormat.JSON); } } diff --git a/generators/types/src/main/java/io/serverlessworkflow/generator/CustomAnnotator.java b/generators/types/src/main/java/io/serverlessworkflow/generator/CustomAnnotator.java index 657ba3cee..e195e2d0d 100644 --- a/generators/types/src/main/java/io/serverlessworkflow/generator/CustomAnnotator.java +++ b/generators/types/src/main/java/io/serverlessworkflow/generator/CustomAnnotator.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.sun.codemodel.JDefinedClass; +import com.sun.codemodel.JExpr; import com.sun.codemodel.JFieldVar; import io.serverlessworkflow.annotations.AdditionalProperties; import jakarta.validation.constraints.Pattern; @@ -40,7 +41,9 @@ public void additionalPropertiesField(JFieldVar field, JDefinedClass clazz, Stri public void propertyField( JFieldVar field, JDefinedClass clazz, String propertyName, JsonNode propertyNode) { if (propertyNode.has(CONST)) { - field.annotate(Pattern.class).param("regexp", propertyNode.get(CONST).asText()); + String callValue = propertyNode.get(CONST).asText(); + field.annotate(Pattern.class).param("regexp", callValue); + field.init(JExpr.lit(callValue)); } } }