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]