This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 6b1091ed6b [Fix apache/incubator-kie-issues#2143] Add function args 
(#4156)
6b1091ed6b is described below

commit 6b1091ed6bdcdb6f81cb684a055ad9f43f01604b
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Fri Jan 9 16:48:10 2026 +0100

    [Fix apache/incubator-kie-issues#2143] Add function args (#4156)
    
    * [Fix apache/incubator-kie-issues#2143] Add function args
    
    Signed-off-by: fjtirado <[email protected]>
    
    * [Fix #2143] Gonzalo's comments
    Signed-off-by: fjtirado <[email protected]>
    
    ---------
    
    Signed-off-by: fjtirado <[email protected]>
---
 .../process/workitem/WorkItemRecordParameters.java | 94 ++++++++++++++++++++++
 .../event/process/KogitoMarshallEventFlag.java     |  3 +-
 .../process/ProcessInstanceNodeEventBody.java      | 28 +++++++
 .../impl/adapter/AbstractDataEventAdapter.java     |  5 +-
 .../descriptors/ServiceTaskDescriptor.java         | 19 +++--
 .../impl/DefaultKogitoWorkItemHandler.java         |  2 +
 .../workflow/parser/types/WorkItemTypeHandler.java |  8 +-
 .../workflow/utils/ServerlessWorkflowUtils.java    |  5 ++
 .../workflow/WorkflowWorkItemHandler.java          | 13 +--
 .../kogito/workitem/rest/RestWorkItemHandler.java  |  6 +-
 10 files changed, 166 insertions(+), 17 deletions(-)

diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/workitem/WorkItemRecordParameters.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/workitem/WorkItemRecordParameters.java
new file mode 100644
index 0000000000..0fcdf6221c
--- /dev/null
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/workitem/WorkItemRecordParameters.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.kie.kogito.internal.process.workitem;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.kie.api.definition.process.Node;
+import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
+
+public class WorkItemRecordParameters {
+
+    private static final String INPUT_ARGS_METADATA = "inputArgs";
+    private static final String OUTPUT_ARGS_METADATA = "outputArgs";
+    public static final String RECORD_ARGS = "recordArgs";
+
+    public static void recordInputParameters(KogitoWorkItem workItem, 
Map<String, Object> inputArgs) {
+        recordInputParameters(workItem.getNodeInstance(), inputArgs);
+    }
+
+    public static void recordInputParameters(KogitoWorkItem workItem, 
String... argNames) {
+        // Map.of does not support null values
+        if (argNames.length > 0) {
+            Map<String, Object> inputArgs = new HashMap<>();
+            for (String argName : argNames) {
+                inputArgs.put(argName, workItem.getParameter(argName));
+            }
+            recordInputParameters(workItem.getNodeInstance(), inputArgs);
+        }
+    }
+
+    public static void recordOutputParameters(KogitoWorkItem workItem, 
Map<String, Object> outputArgs) {
+        recordOutputParameters(workItem.getNodeInstance(), 
outputArgs.getOrDefault("Result", outputArgs));
+    }
+
+    public static void recordInputParameters(KogitoNodeInstance nodeInstance, 
Object inputArgs) {
+        recordParameters(nodeInstance, inputArgs, INPUT_ARGS_METADATA);
+    }
+
+    public static void recordOutputParameters(KogitoNodeInstance nodeInstance, 
Object outputArgs) {
+        recordParameters(nodeInstance, outputArgs, OUTPUT_ARGS_METADATA);
+    }
+
+    private static void recordParameters(KogitoNodeInstance nodeInstance, 
Object args, String key) {
+        if (shouldRecordParameters(nodeInstance)) {
+            nodeInstance.getMetaData().put(key, args);
+        }
+    }
+
+    public static Object getInputParameters(KogitoNodeInstance nodeInstance) {
+        return nodeInstance.getMetaData().get(INPUT_ARGS_METADATA);
+    }
+
+    public static Object getOutputParameters(KogitoNodeInstance nodeInstance) {
+        return nodeInstance.getMetaData().get(OUTPUT_ARGS_METADATA);
+    }
+
+    private static boolean shouldRecordParameters(KogitoNodeInstance 
nodeInstance) {
+        return nodeInstance != null && 
shouldRecordParameters(nodeInstance.getNode());
+    }
+
+    private static boolean shouldRecordParameters(Node node) {
+        return node != null && 
shouldRecordParameters(node.getMetaData().getOrDefault(RECORD_ARGS, false));
+    }
+
+    private static boolean shouldRecordParameters(Object value) {
+        if (value instanceof Boolean bool) {
+            return bool;
+        } else if (value instanceof String str) {
+            return Boolean.parseBoolean(str);
+        } else {
+            return false;
+        }
+    }
+
+    private WorkItemRecordParameters() {
+    }
+}
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/KogitoMarshallEventFlag.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/KogitoMarshallEventFlag.java
index 7e14e31221..c064f17f1c 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/KogitoMarshallEventFlag.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/KogitoMarshallEventFlag.java
@@ -24,7 +24,8 @@ import java.util.Set;
 
 public enum KogitoMarshallEventFlag {
     RETRIGGER(1),
-    CLOUDEVENT_ID(2);
+    CLOUDEVENT_ID(2),
+    FUNCTION_ARGS(4);
 
     private int value;
 
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
index fe0b50896e..a7088a2c60 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
@@ -89,6 +89,10 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
 
     private Boolean retrigger;
 
+    private Object inputParameters;
+
+    private Object outputParameters;
+
     private Map<String, Object> data;
 
     @Override
@@ -103,6 +107,8 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         writeDate(out, slaDueDate);
         writeObject(out, data);
         writeObject(out, retrigger);
+        writeObject(out, inputParameters);
+        writeObject(out, outputParameters);
     }
 
     @Override
@@ -119,6 +125,10 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         if (flags.contains(KogitoMarshallEventFlag.RETRIGGER)) {
             retrigger = (Boolean) readObject(in);
         }
+        if (flags.contains(KogitoMarshallEventFlag.FUNCTION_ARGS)) {
+            inputParameters = readObject(in);
+            outputParameters = readObject(in);
+        }
     }
 
     @Override
@@ -194,6 +204,14 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         return data;
     }
 
+    public Object getInputParameters() {
+        return inputParameters;
+    }
+
+    public Object getOutputParameters() {
+        return outputParameters;
+    }
+
     @Override
     public String toString() {
         return "ProcessInstanceNodeEventBody [eventDate=" + eventDate + ", 
eventUser=" + eventUser + ", eventType=" + eventType + ", processId=" + 
processId + ", processVersion=" + processVersion
@@ -309,6 +327,16 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
             return this;
         }
 
+        public Builder inputParameters(Object inputParameters) {
+            instance.inputParameters = inputParameters;
+            return this;
+        }
+
+        public Builder outputParameters(Object outputParameters) {
+            instance.outputParameters = outputParameters;
+            return this;
+        }
+
         public ProcessInstanceNodeEventBody build() {
             return instance;
         }
diff --git 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
index 579bdef355..8dc29f72a9 100644
--- 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
@@ -35,6 +35,7 @@ import 
org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItemNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItem;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 
 public abstract class AbstractDataEventAdapter implements DataEventAdapter {
 
@@ -141,7 +142,9 @@ public abstract class AbstractDataEventAdapter implements 
DataEventAdapter {
                 .nodeType(nodeInstance.getNode().getClass().getSimpleName())
                 .nodeInstanceId(nodeInstance.getId())
                 .nodeDefinitionId(nodeInstance.getNode().getUniqueId())
-                .slaDueDate(nodeInstance.getSlaDueDate());
+                .slaDueDate(nodeInstance.getSlaDueDate())
+                
.inputParameters(WorkItemRecordParameters.getInputParameters(nodeInstance))
+                
.outputParameters(WorkItemRecordParameters.getOutputParameters(nodeInstance));
         consumer.accept(builder, event);
         if (nodeInstance instanceof KogitoWorkItemNodeInstance 
workItemNodeInstance && workItemNodeInstance.getWorkItem() != null) {
             KogitoWorkItem workItem = workItemNodeInstance.getWorkItem();
diff --git 
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/descriptors/ServiceTaskDescriptor.java
 
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/descriptors/ServiceTaskDescriptor.java
index 2ea4166ba0..6638846517 100644
--- 
a/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/descriptors/ServiceTaskDescriptor.java
+++ 
b/jbpm/jbpm-flow-builder/src/main/java/org/jbpm/compiler/canonical/descriptors/ServiceTaskDescriptor.java
@@ -33,13 +33,17 @@ import org.jbpm.util.ContextFactory;
 import org.jbpm.workflow.core.node.WorkItemNode;
 import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
 import org.kie.kogito.internal.process.workitem.WorkItemExecutionException;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 
 import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.expr.AssignExpr;
+import com.github.javaparser.ast.expr.AssignExpr.Operator;
 import com.github.javaparser.ast.expr.CastExpr;
 import com.github.javaparser.ast.expr.MethodCallExpr;
 import com.github.javaparser.ast.expr.NameExpr;
 import com.github.javaparser.ast.expr.StringLiteralExpr;
 import com.github.javaparser.ast.expr.TypeExpr;
+import com.github.javaparser.ast.expr.VariableDeclarationExpr;
 import com.github.javaparser.ast.stmt.BlockStmt;
 import com.github.javaparser.ast.type.PrimitiveType;
 import com.github.javaparser.ast.type.PrimitiveType.Primitive;
@@ -141,17 +145,18 @@ public class ServiceTaskDescriptor extends 
AbstractServiceTaskDescriptor {
     @Override
     protected void handleParametersForServiceCall(final BlockStmt 
executeWorkItemBody, final MethodCallExpr callServiceMethod) {
         Parameter[] methodParameter = method.getParameters();
+        MethodCallExpr recordCall = new MethodCallExpr(new 
NameExpr(WorkItemRecordParameters.class.getName()), 
"recordInputParameters").addArgument(new NameExpr("workItem"));
         for (int i = 0; i < this.parameters.size(); i++) {
             Argument argument = this.parameters.get(i);
-            MethodCallExpr getParamMethod = new MethodCallExpr(new 
NameExpr("workItem"), "getParameter").addArgument(new 
StringLiteralExpr(argument.getName()));
             Class<?> clazz = methodParameter[i].getType();
-
-            callServiceMethod.addArgument(
-                    new CastExpr(clazz.isPrimitive() ? new 
PrimitiveType(Primitive.valueOf(clazz.getCanonicalName().toUpperCase())) : 
parseClassOrInterfaceType(clazz.getCanonicalName()),
-                            getParamMethod));
-
+            com.github.javaparser.ast.type.Type type =
+                    clazz.isPrimitive() ? new 
PrimitiveType(Primitive.valueOf(clazz.getCanonicalName().toUpperCase())) : 
parseClassOrInterfaceType(clazz.getCanonicalName());
+            executeWorkItemBody.addStatement(new AssignExpr(new 
VariableDeclarationExpr(type, argument.getName()),
+                    new CastExpr(type, new MethodCallExpr(new 
NameExpr("workItem"), "getParameter").addArgument(new 
StringLiteralExpr(argument.getName()))), Operator.ASSIGN));
+            recordCall.addArgument(new StringLiteralExpr(argument.getName()));
+            callServiceMethod.addArgument(new NameExpr(argument.getName()));
         }
-
+        executeWorkItemBody.addStatement(recordCall);
         // adding a dynamic argument at the end of all parameters of the class
         if (methodParameter.length > this.parameters.size() && 
KogitoProcessContext.class.isAssignableFrom(methodParameter[this.parameters.size()].getType()))
 {
             callServiceMethod.addArgument(new MethodCallExpr(new 
TypeExpr(parseClassOrInterfaceType(ContextFactory.class.getCanonicalName())), 
"fromItem").addArgument(new NameExpr("workItem")));
diff --git 
a/jbpm/process-workitems/src/main/java/org/kie/kogito/process/workitems/impl/DefaultKogitoWorkItemHandler.java
 
b/jbpm/process-workitems/src/main/java/org/kie/kogito/process/workitems/impl/DefaultKogitoWorkItemHandler.java
index 21ba12d2d1..24bb684d48 100644
--- 
a/jbpm/process-workitems/src/main/java/org/kie/kogito/process/workitems/impl/DefaultKogitoWorkItemHandler.java
+++ 
b/jbpm/process-workitems/src/main/java/org/kie/kogito/process/workitems/impl/DefaultKogitoWorkItemHandler.java
@@ -30,6 +30,7 @@ import org.kie.kogito.internal.process.workitem.Policy;
 import org.kie.kogito.internal.process.workitem.WorkItemLifeCycle;
 import org.kie.kogito.internal.process.workitem.WorkItemLifeCyclePhase;
 import org.kie.kogito.internal.process.workitem.WorkItemPhaseState;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 import org.kie.kogito.internal.process.workitem.WorkItemTerminationType;
 import org.kie.kogito.internal.process.workitem.WorkItemTransition;
 import org.slf4j.Logger;
@@ -122,6 +123,7 @@ public class DefaultKogitoWorkItemHandler implements 
KogitoWorkItemHandler {
     }
 
     public Optional<WorkItemTransition> 
completeWorkItemHandler(KogitoWorkItemManager manager, KogitoWorkItemHandler 
handler, KogitoWorkItem workitem, WorkItemTransition transition) {
+        WorkItemRecordParameters.recordOutputParameters(workitem, 
transition.data());
         return Optional.empty();
     }
 
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/types/WorkItemTypeHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/types/WorkItemTypeHandler.java
index b0bc82132a..c1905082d9 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/types/WorkItemTypeHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/types/WorkItemTypeHandler.java
@@ -21,9 +21,11 @@ package org.kie.kogito.serverless.workflow.parser.types;
 import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
 import org.jbpm.ruleflow.core.factory.NodeFactory;
 import org.jbpm.ruleflow.core.factory.WorkItemNodeFactory;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 import org.kie.kogito.serverless.workflow.parser.FunctionTypeHandler;
 import org.kie.kogito.serverless.workflow.parser.ParserContext;
 import org.kie.kogito.serverless.workflow.parser.VariableInfo;
+import org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils;
 import org.kie.kogito.serverless.workflow.utils.WorkItemBuilder;
 
 import io.serverlessworkflow.api.Workflow;
@@ -35,8 +37,12 @@ public abstract class WorkItemTypeHandler extends 
WorkItemBuilder implements Fun
     public NodeFactory<?, ?> getActionNode(Workflow workflow, ParserContext 
context, RuleFlowNodeContainerFactory<?, ?> embeddedSubProcess, 
FunctionDefinition functionDef, FunctionRef functionRef,
             VariableInfo varInfo) {
         validateArgs(functionRef);
+        WorkItemNodeFactory<?> workItemFactory =
+                fillWorkItemHandler(workflow, context, 
buildWorkItem(embeddedSubProcess, context, varInfo.getInputVar(), 
varInfo.getOutputVar()).name(functionDef.getName()), functionDef);
+        workItemFactory.metaData(WorkItemRecordParameters.RECORD_ARGS,
+                ServerlessWorkflowUtils.resolveFunctionProperty(functionDef, 
WorkItemRecordParameters.RECORD_ARGS, context.getContext(), Boolean.class, 
true));
         return addFunctionArgs(workflow,
-                fillWorkItemHandler(workflow, context, 
buildWorkItem(embeddedSubProcess, context, varInfo.getInputVar(), 
varInfo.getOutputVar()).name(functionDef.getName()), functionDef),
+                workItemFactory,
                 functionRef);
     }
 
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/utils/ServerlessWorkflowUtils.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/utils/ServerlessWorkflowUtils.java
index 13a04e970b..75c792b09f 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/utils/ServerlessWorkflowUtils.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/utils/ServerlessWorkflowUtils.java
@@ -210,6 +210,11 @@ public class ServerlessWorkflowUtils {
                 : 
context.getApplicationProperty(getPropKey(getFunctionPrefix(function), 
metadataKey), clazz).orElse(defaultValue);
     }
 
+    public static <T> T resolveFunctionProperty(FunctionDefinition function, 
String key, KogitoBuildContext context, Class<T> clazz, T defaultValue) {
+        return 
context.getApplicationProperty(getPropKey(getFunctionPrefix(function), key), 
clazz)
+                .orElseGet(() -> 
context.getApplicationProperty(APP_PROPERTIES_FUNCTIONS_BASE + key, 
clazz).orElse(defaultValue));
+    }
+
     public interface ExpressionBuilder<T> {
         Supplier<Expression> create(String key, Class<T> clazz, T 
defaultValue);
     }
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/WorkflowWorkItemHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/WorkflowWorkItemHandler.java
index b397eb7e53..6e285b87a0 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/WorkflowWorkItemHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-runtime/src/main/java/org/kie/kogito/serverless/workflow/WorkflowWorkItemHandler.java
@@ -26,6 +26,7 @@ import java.util.Optional;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItem;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemManager;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 import org.kie.kogito.internal.process.workitem.WorkItemTransition;
 import org.kie.kogito.jackson.utils.JsonObjectUtils;
 import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler;
@@ -38,12 +39,12 @@ public abstract class WorkflowWorkItemHandler extends 
DefaultKogitoWorkItemHandl
 
     @Override
     public Optional<WorkItemTransition> 
activateWorkItemHandler(KogitoWorkItemManager manager, KogitoWorkItemHandler 
handler, KogitoWorkItem workItem, WorkItemTransition transition) {
-        Map<String, Object> parameters = new 
LinkedHashMap<>(workItem.getParameters());
-        parameters.remove(SWFConstants.MODEL_WORKFLOW_VAR);
-        logger.debug("Workflow workitem {} will be invoked with parameters 
{}", workItem.getName(), parameters);
-
-        Map<String, Object> params = Collections.singletonMap("Result", 
JsonObjectUtils.fromValue(internalExecute(workItem, parameters)));
-        return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(), params));
+        Map<String, Object> inputParameters = new 
LinkedHashMap<>(workItem.getParameters());
+        inputParameters.remove(SWFConstants.MODEL_WORKFLOW_VAR);
+        logger.debug("Workflow workitem {} will be invoked with parameters 
{}", workItem.getName(), inputParameters);
+        Map<String, Object> outputParameters = 
Collections.singletonMap("Result", 
JsonObjectUtils.fromValue(internalExecute(workItem, inputParameters)));
+        WorkItemRecordParameters.recordInputParameters(workItem, 
inputParameters);
+        return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(), outputParameters));
     }
 
     protected abstract Object internalExecute(KogitoWorkItem workItem, 
Map<String, Object> parameters);
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
index 5fe35b92a3..5111a44715 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandler.java
@@ -42,6 +42,7 @@ import org.jbpm.workflow.instance.node.WorkItemNodeInstance;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItem;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemHandler;
 import org.kie.kogito.internal.process.workitem.KogitoWorkItemManager;
+import org.kie.kogito.internal.process.workitem.WorkItemRecordParameters;
 import org.kie.kogito.internal.process.workitem.WorkItemTransition;
 import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler;
 import org.kogito.workitem.rest.auth.ApiKeyAuthDecorator;
@@ -181,8 +182,10 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
             protocol = port == DEFAULT_SSL_PORT ? HTTPS_PROTOCOL : 
HTTP_PROTOCOL;
         }
         logger.debug("Invoking request with protocol {} host {} port {} and 
endpoint {}", protocol, host, port, path);
+
         WebClient client = isHttps(protocol) ? httpsClient : httpClient;
         HttpRequest<Buffer> request = client.request(method, port, host, path);
+        WorkItemRecordParameters.recordInputParameters(workItem, parameters);
         requestDecorators.forEach(d -> d.decorate(workItem, parameters, 
request));
         authDecorators.forEach(d -> d.decorate(workItem, parameters, request));
         paramsDecorator.decorate(workItem, parameters, request);
@@ -190,8 +193,9 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
         HttpResponse<Buffer> response = method.equals(HttpMethod.POST) || 
method.equals(HttpMethod.PUT)
                 ? sendBody(request, bodyBuilder.apply(parameters), 
requestTimeout)
                 : send(request, requestTimeout);
+        Object outputParams = resultHandler.apply(response, targetInfo, 
ContextFactory.fromItem(workItem));
         return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(),
-                Collections.singletonMap(RESULT, resultHandler.apply(response, 
targetInfo, ContextFactory.fromItem(workItem)))));
+                Collections.singletonMap(RESULT, outputParams)));
     }
 
     private boolean isHttps(String protocol) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to