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 ff25c20beb [Fix #3998] Properly split between open api generated 
runtime/deployment (#3999)
ff25c20beb is described below

commit ff25c20bebc7ecb1d5563bee03f3d0a48a0d2cbf
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Thu Jul 31 10:47:36 2025 +0200

    [Fix #3998] Properly split between open api generated runtime/deployment 
(#3999)
    
    * [Fix #3998] Properly split between open api generated runtime/deployment
    
    * [Fix #3998] Refining result handler
    
    By default, an error should be launched, unless explicitly indicated
    on the workflow metadata
---
 kogito-bom/pom.xml                                 |  13 ++-
 .../SpecWorkflowOperationIdFactory.java            |   7 +-
 .../pom.xml                                        |  20 +---
 .../workflow/generated}/OpenAPIWorkflowUtils.java  |  17 +--
 .../pom.xml                                        |   4 +
 .../parser/rest/GeneratedRestOperationHandler.java |   3 +-
 .../rest/DescriptorRestOperationHandler.java       |   1 +
 .../workflow/parser/types/RestTypeHandler.java     |   4 +-
 .../suppliers}/JsonNodeResultHandlerSupplier.java  |   2 +-
 kogito-serverless-workflow/pom.xml                 |   1 +
 .../kogito/workitem/rest/RestWorkItemHandler.java  |   4 +-
 .../rest/resulthandlers/JsonNodeResultHandler.java |  25 ++++
 .../resulthandlers/RestWorkItemHandlerResult.java  |  12 +-
 .../workitem/rest/RestWorkItemHandlerTest.java     |   5 +-
 .../pom.xml                                        |   2 +-
 .../openapi/WorkflowOpenApiHandlerGenerator.java   |  11 +-
 .../openapi/WorkflowOpenApiSpecInputProvider.java  |  13 ++-
 .../src/main/resources/errorIgnoring.sw.json       | 126 +++++++++++++++++++++
 .../kie/kogito/quarkus/workflows/ErrorRestIT.java  |  13 +++
 .../workflows/PerfectSquareServiceMock.java        |   2 +-
 .../kogito-quarkus-serverless-workflow/pom.xml     |   4 +
 21 files changed, 235 insertions(+), 54 deletions(-)

diff --git a/kogito-bom/pom.xml b/kogito-bom/pom.xml
index b74307f399..e771d54ac0 100755
--- a/kogito-bom/pom.xml
+++ b/kogito-bom/pom.xml
@@ -2155,7 +2155,7 @@
         <version>${project.version}</version>
         <classifier>sources</classifier>
       </dependency>
-       <dependency>
+      <dependency>
         <groupId>org.kie.kogito</groupId>
         <artifactId>kogito-serverless-workflow-openapi-generated</artifactId>
         <version>${project.version}</version>
@@ -2166,6 +2166,17 @@
         <version>${project.version}</version>
         <classifier>sources</classifier>
       </dependency>
+      <dependency>
+        <groupId>org.kie.kogito</groupId>
+        
<artifactId>kogito-serverless-workflow-openapi-generated-deployment</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.kie.kogito</groupId>
+        
<artifactId>kogito-serverless-workflow-openapi-generated-deployment</artifactId>
+        <version>${project.version}</version>
+        <classifier>sources</classifier>
+      </dependency>
       <dependency>
         <groupId>org.kie.kogito</groupId>
         <artifactId>kogito-serverless-workflow-openapi-common</artifactId>
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-common/src/main/java/org/kie/kogito/serverless/workflow/operationid/SpecWorkflowOperationIdFactory.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-common/src/main/java/org/kie/kogito/serverless/workflow/operationid/SpecWorkflowOperationIdFactory.java
index 9c606ecd98..641c923b0b 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-common/src/main/java/org/kie/kogito/serverless/workflow/operationid/SpecWorkflowOperationIdFactory.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-common/src/main/java/org/kie/kogito/serverless/workflow/operationid/SpecWorkflowOperationIdFactory.java
@@ -23,8 +23,6 @@ import java.util.Set;
 
 import org.kie.kogito.serverless.workflow.parser.ParserContext;
 import org.kie.kogito.serverless.workflow.utils.OpenAPIFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import io.serverlessworkflow.api.Workflow;
 import io.serverlessworkflow.api.functions.FunctionDefinition;
@@ -32,12 +30,9 @@ import 
io.serverlessworkflow.api.functions.FunctionDefinition;
 public class SpecWorkflowOperationIdFactory extends 
AbstractWorkflowOperationIdFactory {
     public static final String SPEC_PROP_VALUE = "SPEC_TITLE";
 
-    private static final Logger logger = 
LoggerFactory.getLogger(SpecWorkflowOperationIdFactory.class);
-
     @Override
     public String getFileName(Workflow workflow, FunctionDefinition function, 
Optional<ParserContext> context, String uri, String operation, String service) {
-        return OpenAPIFactory.getOpenAPI(uri, workflow, function, 
context).getInfo()
-                .getTitle();
+        return OpenAPIFactory.getOpenAPI(uri, workflow, function, 
context).getInfo().getTitle();
     }
 
     @Override
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/pom.xml
similarity index 67%
copy from 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
copy to 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/pom.xml
index 267d82131b..4130c6ad05 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/pom.xml
@@ -18,30 +18,22 @@
     under the License.
 
 -->
-<project xmlns="http://maven.apache.org/POM/4.0.0";
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";>
   <modelVersion>4.0.0</modelVersion>
-
   <parent>
     <groupId>org.kie.kogito</groupId>
     <artifactId>kogito-serverless-workflow</artifactId>
     <version>999-SNAPSHOT</version>
   </parent>
-
-  <artifactId>kogito-serverless-workflow-openapi-generated</artifactId>
-  <name>Kogito :: Serverless Workflow :: OpenAPI :: Generated</name>
-  <description>Kogito Serverless Workflow OpenAPI generated</description>
-
-  <properties>
-      
<java.module.name>org.kie.kogito.serverless.workflow.openapi.generated</java.module.name>
+<properties>
+      
<java.module.name>org.kie.kogito.serverless.workflow.openapi.generated.deployment</java.module.name>
   </properties>
-
+  
<artifactId>kogito-serverless-workflow-openapi-generated-deployment</artifactId>
+  <name>Kogito :: Serverless Workflow :: OpenAPI :: Generated:: 
Deployment</name>
   <dependencies>
     <dependency>
       <groupId>org.kie.kogito</groupId>
-      <artifactId>kogito-serverless-workflow-openapi-common</artifactId>
+      <artifactId>kogito-serverless-workflow-builder</artifactId>
     </dependency>
   </dependencies>
-
 </project>
\ No newline at end of file
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/utils/OpenAPIWorkflowUtils.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/src/main/java/org/kie/kogito/serverless/workflow/generated/OpenAPIWorkflowUtils.java
similarity index 59%
rename from 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/utils/OpenAPIWorkflowUtils.java
rename to 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/src/main/java/org/kie/kogito/serverless/workflow/generated/OpenAPIWorkflowUtils.java
index d10ca13ef7..5039bd526b 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/utils/OpenAPIWorkflowUtils.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated-deployment/src/main/java/org/kie/kogito/serverless/workflow/generated/OpenAPIWorkflowUtils.java
@@ -16,29 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.serverless.workflow.utils;
+package org.kie.kogito.serverless.workflow.generated;
 
-import org.drools.util.StringUtils;
-
-import io.serverlessworkflow.api.functions.FunctionDefinition;
-import io.serverlessworkflow.api.functions.FunctionDefinition.Type;
-
-import static 
org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils.getValidIdentifier;
 import static 
org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils.removeExt;
 
 public class OpenAPIWorkflowUtils {
+
     public static String getOpenApiWorkItemName(String fileName, String 
methodName) {
         return removeExt(fileName) + '_' + methodName;
     }
 
-    public static String getOpenApiClassName(String fileName, String 
methodName) {
-        return 
StringUtils.ucFirst(getValidIdentifier(removeExt(fileName.toLowerCase())) + '_' 
+ methodName);
-    }
-
-    public static boolean isOpenApiOperation(FunctionDefinition function) {
-        return function.getType() == Type.REST && function.getOperation() != 
null && 
function.getOperation().contains(ServerlessWorkflowUtils.OPERATION_SEPARATOR);
-    }
-
     private OpenAPIWorkflowUtils() {
     }
 }
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
index 267d82131b..586eed1d39 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/pom.xml
@@ -42,6 +42,10 @@
       <groupId>org.kie.kogito</groupId>
       <artifactId>kogito-serverless-workflow-openapi-common</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.kie.kogito</groupId>
+      
<artifactId>kogito-serverless-workflow-openapi-generated-deployment</artifactId>
+    </dependency>
   </dependencies>
 
 </project>
\ No newline at end of file
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/GeneratedRestOperationHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/GeneratedRestOperationHandler.java
index 969415bdf3..c72ac7aaef 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/GeneratedRestOperationHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-generated/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/GeneratedRestOperationHandler.java
@@ -20,16 +20,15 @@ package org.kie.kogito.serverless.workflow.parser.rest;
 
 import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
 import org.jbpm.ruleflow.core.factory.WorkItemNodeFactory;
+import org.kie.kogito.serverless.workflow.generated.OpenAPIWorkflowUtils;
 import org.kie.kogito.serverless.workflow.operationid.WorkflowOperationId;
 import org.kie.kogito.serverless.workflow.parser.ParserContext;
 import org.kie.kogito.serverless.workflow.parser.types.OpenAPITypeHandler;
-import org.kie.kogito.serverless.workflow.utils.OpenAPIWorkflowUtils;
 
 import io.serverlessworkflow.api.Workflow;
 import io.serverlessworkflow.api.functions.FunctionDefinition;
 
 public class GeneratedRestOperationHandler extends OpenAPITypeHandler {
-
     @Override
     protected <T extends RuleFlowNodeContainerFactory<T, ?>> 
WorkItemNodeFactory<T> fillWorkItemHandler(
             Workflow workflow, ParserContext context, WorkItemNodeFactory<T> 
node, FunctionDefinition functionDef,
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/DescriptorRestOperationHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/DescriptorRestOperationHandler.java
index dcb211eff9..ff2ab4d5d1 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/DescriptorRestOperationHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/DescriptorRestOperationHandler.java
@@ -37,6 +37,7 @@ import 
org.kie.kogito.serverless.workflow.suppliers.BearerTokenAuthDecoratorSupp
 import 
org.kie.kogito.serverless.workflow.suppliers.ClientOAuth2AuthDecoratorSupplier;
 import 
org.kie.kogito.serverless.workflow.suppliers.CollectionParamsDecoratorSupplier;
 import 
org.kie.kogito.serverless.workflow.suppliers.ConfigSuppliedWorkItemSupplier;
+import 
org.kie.kogito.serverless.workflow.suppliers.JsonNodeResultHandlerSupplier;
 import 
org.kie.kogito.serverless.workflow.suppliers.PasswordOAuth2AuthDecoratorSupplier;
 import org.kie.kogito.serverless.workflow.utils.OpenAPIFactory;
 import org.kogito.workitem.rest.RestWorkItemHandler;
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
index 3904466a3d..aceca4c073 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/types/RestTypeHandler.java
@@ -21,6 +21,7 @@ package org.kie.kogito.serverless.workflow.parser.types;
 import org.jbpm.ruleflow.core.RuleFlowNodeContainerFactory;
 import org.jbpm.ruleflow.core.factory.WorkItemNodeFactory;
 import org.kie.kogito.serverless.workflow.parser.ParserContext;
+import 
org.kie.kogito.serverless.workflow.suppliers.JsonNodeResultHandlerSupplier;
 import 
org.kie.kogito.serverless.workflow.suppliers.ParamsRestBodyBuilderSupplier;
 import org.kogito.workitem.rest.RestWorkItemHandler;
 import org.kogito.workitem.rest.auth.ApiKeyAuthDecorator;
@@ -71,7 +72,8 @@ public class RestTypeHandler extends WorkItemTypeHandler {
                 .workParameter(RestWorkItemHandler.BODY_BUILDER, new 
ParamsRestBodyBuilderSupplier())
                 .workParameter(BearerTokenAuthDecorator.BEARER_TOKEN, 
runtimeRestApi(functionDef, ACCESS_TOKEN, context.getContext()))
                 .workParameter(ApiKeyAuthDecorator.KEY_PREFIX, 
runtimeRestApi(functionDef, API_KEY_PREFIX, context.getContext()))
-                .workParameter(ApiKeyAuthDecorator.KEY, 
runtimeRestApi(functionDef, API_KEY, context.getContext())));
+                .workParameter(ApiKeyAuthDecorator.KEY, 
runtimeRestApi(functionDef, API_KEY, context.getContext())))
+                        .workParameter(RestWorkItemHandler.RESULT_HANDLER, new 
JsonNodeResultHandlerSupplier());
     }
 
     @Override
diff --git 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/suppliers/JsonNodeResultHandlerSupplier.java
similarity index 96%
rename from 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
rename to 
kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/suppliers/JsonNodeResultHandlerSupplier.java
index 5d0d710d1e..2559b2b847 100644
--- 
a/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-rest-parser/src/main/java/org/kie/kogito/serverless/workflow/suppliers/JsonNodeResultHandlerSupplier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.serverless.workflow.parser.rest;
+package org.kie.kogito.serverless.workflow.suppliers;
 
 import java.util.function.Supplier;
 
diff --git a/kogito-serverless-workflow/pom.xml 
b/kogito-serverless-workflow/pom.xml
index 0f57d6ee30..6dcdd02942 100644
--- a/kogito-serverless-workflow/pom.xml
+++ b/kogito-serverless-workflow/pom.xml
@@ -58,6 +58,7 @@
     <module>kogito-serverless-workflow-dmn-parser</module>
     <module>kogito-serverless-workflow-dmn</module>
     <module>kogito-serverless-workflow-monitoring</module>
+    <module>kogito-serverless-workflow-openapi-generated-deployment</module>
   </modules>
 
   <profiles>
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 69875c3e82..7276f4c4f0 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
@@ -35,6 +35,7 @@ import java.util.stream.StreamSupport;
 import org.jbpm.process.core.ContextResolver;
 import org.jbpm.process.core.context.variable.Variable;
 import org.jbpm.process.core.context.variable.VariableScope;
+import org.jbpm.util.ContextFactory;
 import org.jbpm.workflow.core.node.WorkItemNode;
 import org.jbpm.workflow.instance.NodeInstance;
 import org.jbpm.workflow.instance.node.WorkItemNodeInstance;
@@ -186,7 +187,8 @@ public class RestWorkItemHandler extends 
DefaultKogitoWorkItemHandler {
         HttpResponse<Buffer> response = method.equals(HttpMethod.POST) || 
method.equals(HttpMethod.PUT)
                 ? sendJson(request, bodyBuilder.apply(parameters), 
requestTimeout)
                 : send(request, requestTimeout);
-        return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(), Collections.singletonMap(RESULT, 
resultHandler.apply(response, targetInfo))));
+        return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(),
+                Collections.singletonMap(RESULT, resultHandler.apply(response, 
targetInfo, ContextFactory.fromItem(workItem)))));
     }
 
     private static HttpResponse<Buffer> sendJson(HttpRequest<Buffer> request, 
Object body, Duration requestTimeout) {
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
index 7de2eb8b7f..99a8f2a3cd 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
@@ -18,12 +18,37 @@
  */
 package org.kogito.workitem.rest.resulthandlers;
 
+import java.util.Map;
+
+import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
+
 import com.fasterxml.jackson.databind.JsonNode;
 
 import io.vertx.mutiny.core.buffer.Buffer;
 import io.vertx.mutiny.ext.web.client.HttpResponse;
 
+import static 
org.kogito.workitem.rest.RestWorkItemHandlerUtils.checkStatusCode;
+
 public class JsonNodeResultHandler implements RestWorkItemHandlerResult {
+    @Override
+    public Object apply(HttpResponse<Buffer> t, Class<?> u, 
KogitoProcessContext context) {
+        Map<String, Object> metadata = 
context.getNodeInstance().getNode().getMetaData();
+        if (metadata == null || 
toBoolean(metadata.getOrDefault("failOnStatusCode", Boolean.TRUE))) {
+            checkStatusCode(t);
+        }
+        return apply(t, u);
+    }
+
+    private boolean toBoolean(Object potentialBoolean) {
+        if (potentialBoolean instanceof Boolean bool) {
+            return bool.booleanValue();
+        } else if (potentialBoolean instanceof CharSequence literal) {
+            return Boolean.parseBoolean(literal.toString());
+        } else {
+            return true;
+        }
+    }
+
     @Override
     public Object apply(HttpResponse<Buffer> t, Class<?> u) {
         return u == null ? t.bodyAsJson(JsonNode.class) : t.bodyAsJson(u);
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/RestWorkItemHandlerResult.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/RestWorkItemHandlerResult.java
index 7747219b5b..9bef0217cd 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/RestWorkItemHandlerResult.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/RestWorkItemHandlerResult.java
@@ -18,12 +18,16 @@
  */
 package org.kogito.workitem.rest.resulthandlers;
 
-import java.util.function.BiFunction;
+import org.kie.kogito.internal.process.runtime.KogitoProcessContext;
 
 import io.vertx.mutiny.core.buffer.Buffer;
 import io.vertx.mutiny.ext.web.client.HttpResponse;
 
-/* Added to make it easier to search for ResultHandler bifunction 
implementations, 
- * see 
https://github.com/kiegroup/kogito-runtimes/pull/778#pullrequestreview-493382982
 */
-public interface RestWorkItemHandlerResult extends 
BiFunction<HttpResponse<Buffer>, Class<?>, Object> {
+@FunctionalInterface
+public interface RestWorkItemHandlerResult {
+    default Object apply(HttpResponse<Buffer> t, Class<?> u, 
KogitoProcessContext context) {
+        return apply(t, u);
+    }
+
+    Object apply(HttpResponse<Buffer> t, Class<?> u);
 }
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
index 3d1d133e15..a3054e743a 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/RestWorkItemHandlerTest.java
@@ -26,10 +26,10 @@ import org.jbpm.process.core.Process;
 import org.jbpm.process.core.context.variable.Variable;
 import org.jbpm.process.core.context.variable.VariableScope;
 import org.jbpm.process.core.datatype.impl.type.ObjectDataType;
-import org.jbpm.process.instance.ProcessInstance;
 import org.jbpm.process.instance.context.variable.VariableScopeInstance;
 import org.jbpm.workflow.core.impl.IOSpecification;
 import org.jbpm.workflow.core.node.WorkItemNode;
+import org.jbpm.workflow.instance.WorkflowProcessInstance;
 import org.jbpm.workflow.instance.node.WorkItemNodeInstance;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -126,7 +126,7 @@ public class RestWorkItemHandlerTest {
         parameters.put(RestWorkItemHandler.CONTENT_DATA, workflowData);
 
         Process process = mock(Process.class);
-        ProcessInstance processInstance = mock(ProcessInstance.class);
+        WorkflowProcessInstance processInstance = 
mock(WorkflowProcessInstance.class);
         workItem.setProcessInstance(processInstance);
 
         workflowData = mapper.createObjectNode().put("id", 26).put("name", 
"pepe");
@@ -145,6 +145,7 @@ public class RestWorkItemHandlerTest {
         when(node.getIoSpecification()).thenReturn(ioSpecification);
         workItem.setNodeInstance(nodeInstance);
         when(nodeInstance.getNode()).thenReturn(node);
+        when(nodeInstance.getProcessInstance()).thenReturn(processInstance);
         when(node.resolveContext(VariableScope.VARIABLE_SCOPE, 
DEFAULT_WORKFLOW_VAR)).thenReturn(variableScope);
 
         Map<String, String> outputMapping = 
Collections.singletonMap(RestWorkItemHandler.RESULT, DEFAULT_WORKFLOW_VAR);
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/pom.xml
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/pom.xml
index 31c6f87736..3e3270f82e 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/pom.xml
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/pom.xml
@@ -45,7 +45,7 @@
 
     <dependency>
       <groupId>org.kie.kogito</groupId>
-      <artifactId>kogito-serverless-workflow-openapi-generated</artifactId>
+      
<artifactId>kogito-serverless-workflow-openapi-generated-deployment</artifactId>
     </dependency>
     <dependency>
       <groupId>org.kie.kogito</groupId>
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiHandlerGenerator.java
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiHandlerGenerator.java
index 68f762768a..73a169478a 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiHandlerGenerator.java
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiHandlerGenerator.java
@@ -22,6 +22,7 @@ import java.lang.annotation.Annotation;
 import java.util.Map;
 import java.util.stream.Stream;
 
+import org.drools.util.StringUtils;
 import org.jboss.jandex.AnnotationInstance;
 import org.jboss.jandex.ClassInfo;
 import org.jboss.jandex.DotName;
@@ -32,8 +33,8 @@ import org.kie.kogito.codegen.api.context.KogitoBuildContext;
 import 
org.kie.kogito.quarkus.serverless.workflow.ClassAnnotatedWorkflowHandlerGenerator;
 import org.kie.kogito.quarkus.serverless.workflow.WorkflowCodeGenUtils;
 import org.kie.kogito.quarkus.serverless.workflow.WorkflowHandlerGeneratedFile;
+import org.kie.kogito.serverless.workflow.generated.OpenAPIWorkflowUtils;
 import org.kie.kogito.serverless.workflow.openapi.OpenApiWorkItemHandler;
-import org.kie.kogito.serverless.workflow.utils.OpenAPIWorkflowUtils;
 
 import com.github.javaparser.ast.CompilationUnit;
 import com.github.javaparser.ast.Modifier.Keyword;
@@ -56,6 +57,8 @@ import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.ws.rs.core.Response;
 
 import static com.github.javaparser.StaticJavaParser.parseClassOrInterfaceType;
+import static 
org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils.getValidIdentifier;
+import static 
org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils.removeExt;
 
 public class WorkflowOpenApiHandlerGenerator extends 
ClassAnnotatedWorkflowHandlerGenerator {
 
@@ -77,9 +80,13 @@ public class WorkflowOpenApiHandlerGenerator extends 
ClassAnnotatedWorkflowHandl
         return classInfo.methods().stream().filter(m -> 
m.hasAnnotation(generatedMethod)).map(m -> generateHandler(context, classInfo, 
fileName, m));
     }
 
+    private static String getOpenApiClassName(String fileName, String 
methodName) {
+        return 
StringUtils.ucFirst(getValidIdentifier(removeExt(fileName.toLowerCase())) + '_' 
+ methodName);
+    }
+
     private WorkflowHandlerGeneratedFile generateHandler(KogitoBuildContext 
context, ClassInfo classInfo, String fileName, MethodInfo m) {
         final String packageName = context.getPackageName();
-        final String className = 
OpenAPIWorkflowUtils.getOpenApiClassName(fileName, m.name());
+        final String className = getOpenApiClassName(fileName, m.name());
         final ClassOrInterfaceType classNameType = 
parseClassOrInterfaceType(classInfo.name().toString());
         CompilationUnit unit = new CompilationUnit(packageName);
         ClassOrInterfaceDeclaration clazz = unit.addClass(className);
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiSpecInputProvider.java
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiSpecInputProvider.java
index 800c72e082..f5f0d08202 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiSpecInputProvider.java
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-deployment/src/main/java/org/kie/kogito/quarkus/serverless/workflow/openapi/WorkflowOpenApiSpecInputProvider.java
@@ -27,11 +27,13 @@ import java.util.stream.Stream;
 
 import org.kie.kogito.quarkus.serverless.workflow.WorkflowCodeGenUtils;
 import org.kie.kogito.quarkus.serverless.workflow.WorkflowOperationResource;
-import org.kie.kogito.serverless.workflow.utils.OpenAPIWorkflowUtils;
+import org.kie.kogito.serverless.workflow.utils.ServerlessWorkflowUtils;
 
 import 
io.quarkiverse.openapi.generator.deployment.codegen.OpenApiSpecInputProvider;
 import io.quarkiverse.openapi.generator.deployment.codegen.SpecInputModel;
 import io.quarkus.deployment.CodeGenContext;
+import io.serverlessworkflow.api.functions.FunctionDefinition;
+import io.serverlessworkflow.api.functions.FunctionDefinition.Type;
 
 public class WorkflowOpenApiSpecInputProvider implements 
OpenApiSpecInputProvider {
 
@@ -44,13 +46,18 @@ public class WorkflowOpenApiSpecInputProvider implements 
OpenApiSpecInputProvide
             inputDir = inputDir.getParent();
         }
         try (Stream<Path> openApiFilesPaths = Files.walk(inputDir)) {
-            return WorkflowCodeGenUtils.operationResources(openApiFilesPaths, 
OpenAPIWorkflowUtils::isOpenApiOperation, 
context).map(this::getSpecInput).collect(Collectors.toList());
+            return WorkflowCodeGenUtils.operationResources(openApiFilesPaths, 
WorkflowOpenApiSpecInputProvider::isOpenApiOperation, 
context).map(WorkflowOpenApiSpecInputProvider::getSpecInput)
+                    .collect(Collectors.toList());
         } catch (IOException io) {
             throw new IllegalStateException(io);
         }
     }
 
-    private SpecInputModel getSpecInput(WorkflowOperationResource resource) {
+    private static boolean isOpenApiOperation(FunctionDefinition function) {
+        return function.getType() == Type.REST && function.getOperation() != 
null && 
function.getOperation().contains(ServerlessWorkflowUtils.OPERATION_SEPARATOR);
+    }
+
+    private static SpecInputModel getSpecInput(WorkflowOperationResource 
resource) {
         return new SpecInputModel(resource.getOperationId().getFileName(), 
resource.getContentLoader().getInputStream(), KOGITO_PACKAGE_PREFIX + 
resource.getOperationId().getPackageName());
     }
 }
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/errorIgnoring.sw.json
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/errorIgnoring.sw.json
new file mode 100644
index 0000000000..986b4d4935
--- /dev/null
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/main/resources/errorIgnoring.sw.json
@@ -0,0 +1,126 @@
+{
+  "id": "errorIgnoring",
+  "version": "1.0",
+  "expressionLang": "jsonpath",
+  "name": "Workflow Error example",
+  "description": "An example of how to handle an exception thrown by a 
service",
+  "start": "checkEven",
+  "errors": [
+    {
+      "name": "odd number",
+      "code": "Odd situation"
+     },
+     {
+      "name": "bad request",
+      "code": "HTTP:400"
+     }
+  ],
+  "functions": [
+    {
+      "name": "isEven",
+      "type": "custom",
+      "operation": 
"service:java:org.kie.kogito.workflows.services.EvenService::isEven"
+    },
+    {
+      "name": "publishPerfectSquare",
+      "type": "custom",
+      "operation": "rest:post:/publish/{type}/{number}",
+      "metadata" : 
+      {
+        "failOnStatusCode": false
+       }
+    },
+    {
+      "name": "printMessage",
+      "type": "custom",
+       "operation": "sysout"
+    }
+  ],
+  "states": [
+    {
+      "name": "checkEven",
+      "type": "operation",
+      "actions": [
+        {
+          "name": "checkEvenAction",
+          "functionRef": {
+            "refName": "isEven",
+            "arguments": {
+              "number": "$.number"
+            }
+          }
+        }
+      ],
+      "transition": "even",
+      "onErrors": [
+        {
+          "errorRef": "odd number",
+          "transition": "odd"
+        }
+      ]
+    },
+    {
+      "name": "even",
+      "type": "inject",
+      "data": {
+        "numberType": "even"
+      },
+      "transition": "print"
+    },
+    {
+      "name": "odd",
+      "type": "inject",
+      "data": {
+        "numberType": "odd"
+      },
+      "transition": "print"
+    },
+    {
+      "name": "print",
+      "type": "operation",
+      "actions": [
+        {
+          "name": "printAction",
+          "functionRef": {
+            "refName": "printMessage",
+            "arguments": {
+              "message": "$.numberType"
+            }
+          }
+        }
+      ],
+      "transition": "publish"
+    },
+    {
+      "name": "publish",
+      "type": "operation",
+      "actions": [
+        {
+          "name": "publishAction",
+          "functionRef" : {
+            "refName": "publishPerfectSquare",
+            "arguments": {
+              "type": "$.numberType",
+              "number": "$.number"
+          }
+          }
+        }
+      ],
+      "end": true,
+      "onErrors": [
+        {
+          "errorRef": "bad request",
+          "transition": "setError"
+        }
+      ]
+    },
+    {
+      "name": "setError",
+      "type": "inject",
+      "data": {
+        "perfect": "Error invoking publishPerfectSquare"
+       },
+      "end": true
+     } 
+  ]
+}
\ No newline at end of file
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ErrorRestIT.java
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ErrorRestIT.java
index 84afb41192..e7435a07f5 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ErrorRestIT.java
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/ErrorRestIT.java
@@ -36,6 +36,19 @@ public class ErrorRestIT {
         innerErrorRest("error");
     }
 
+    @Test
+    public void testErrorRestIgnoring() {
+        given()
+                .contentType(ContentType.JSON)
+                .accept(ContentType.JSON)
+                .body("{\"workflowdata\" : {\"number\" : 1}}").when()
+                .post("/errorIgnoring")
+                .then()
+                .statusCode(201)
+                .body("workflowdata.numberType", is("odd"))
+                .body("workflowdata.perfect", is(false));
+    }
+
     @Test
     public void testErrorGenericRest() {
         innerErrorRest("errorGeneric");
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/PerfectSquareServiceMock.java
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/PerfectSquareServiceMock.java
index 4e2b176183..e2177b173e 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/PerfectSquareServiceMock.java
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow-integration-test/src/test/java/org/kie/kogito/quarkus/workflows/PerfectSquareServiceMock.java
@@ -47,7 +47,7 @@ public class PerfectSquareServiceMock implements 
QuarkusTestResourceLifecycleMan
 
         // mock a successful invocation
         stubFor(post("/publish/odd/1")
-                .willReturn(badRequest()));
+                .willReturn(badRequest().withBody("{\"perfect\":false}")));
 
         stubFor(post("/publish/even/4")
                 .willReturn(aResponse().withBody("{\"perfect\":true}")));
diff --git 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml
 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml
index d45bbd8d55..6a2a4049ed 100644
--- 
a/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml
+++ 
b/quarkus/extensions/kogito-quarkus-serverless-workflow-extension/kogito-quarkus-serverless-workflow/pom.xml
@@ -100,6 +100,10 @@
       <groupId>org.kie.kogito</groupId>
       <artifactId>kogito-serverless-workflow-rest-runtime</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.kie.kogito</groupId>
+      <artifactId>kogito-serverless-workflow-openapi-generated</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.kie.kogito</groupId>
       <artifactId>kogito-jsonpath-expression</artifactId>


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


Reply via email to