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 b42a86cfea [Fix #3995] Overriding ResultHandler for OpenAPIParser 
(#3996)
b42a86cfea is described below

commit b42a86cfea863870325966669f96ba12c563db0b
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Thu Jul 24 13:44:58 2025 +0200

    [Fix #3995] Overriding ResultHandler for OpenAPIParser (#3996)
---
 .../dynamic/WorkItemHandlerResultHolder.java       |  3 ++
 .../rest/DescriptorRestOperationHandler.java       |  3 +-
 .../parser/rest/JsonNodeResultHandlerSupplier.java | 24 +++++------
 .../kogito/workitem/rest/RestWorkItemHandler.java  |  6 ---
 .../workitem/rest/RestWorkItemHandlerUtils.java    | 11 +++++
 .../DefaultRestWorkItemHandlerResult.java          |  3 ++
 ...ndlerResult.java => JsonNodeResultHandler.java} |  9 ++--
 .../workitem/rest/JsonResultHandlerTest.java       | 49 ++++++++++++++++++++++
 .../workitem/rest/RestWorkItemHandlerTest.java     |  1 +
 .../process/dynamic/DynamicCallResourceTest.java   |  2 +-
 10 files changed, 84 insertions(+), 27 deletions(-)

diff --git 
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
 
b/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
index 620526f71d..43a2ceefbc 100644
--- 
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
+++ 
b/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
@@ -25,12 +25,15 @@ import 
org.kogito.workitem.rest.resulthandlers.RestWorkItemHandlerResult;
 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 WorkItemHandlerResultHolder implements RestWorkItemHandlerResult {
 
     private Map<String, Object> result;
 
     @Override
     public Object apply(HttpResponse<Buffer> buffer, Class<?> clazz) {
+        checkStatusCode(buffer);
         result = buffer.bodyAsJson(Map.class);
         return result;
     }
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 82a63c7cb2..dcb211eff9 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
@@ -98,7 +98,8 @@ public class DescriptorRestOperationHandler extends 
OpenAPITypeHandler {
                                         new 
MethodCallExpr(ConversionUtils.class.getCanonicalName() + ".concatPaths")
                                                 .addArgument(new 
NameExpr("calculatedKey")).addArgument(new 
StringLiteralExpr(openAPIDescriptor.getPath()))))))
                 .workParameter(RestWorkItemHandler.METHOD, 
openAPIDescriptor.getMethod())
-                .workParameter(RestWorkItemHandler.PARAMS_DECORATOR, new 
CollectionParamsDecoratorSupplier(openAPIDescriptor.getHeaderParams(), 
openAPIDescriptor.getQueryParams()));
+                .workParameter(RestWorkItemHandler.PARAMS_DECORATOR, new 
CollectionParamsDecoratorSupplier(openAPIDescriptor.getHeaderParams(), 
openAPIDescriptor.getQueryParams()))
+                .workParameter(RestWorkItemHandler.RESULT_HANDLER, new 
JsonNodeResultHandlerSupplier());
 
     }
 
diff --git 
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
similarity index 59%
copy from 
addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
copy to 
kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
index 620526f71d..5d0d710d1e 100644
--- 
a/addons/common/process-dynamic/src/main/java/org/kie/kogito/process/dynamic/WorkItemHandlerResultHolder.java
+++ 
b/kogito-serverless-workflow/kogito-serverless-workflow-openapi-parser/src/main/java/org/kie/kogito/serverless/workflow/parser/rest/JsonNodeResultHandlerSupplier.java
@@ -16,26 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.process.dynamic;
+package org.kie.kogito.serverless.workflow.parser.rest;
 
-import java.util.Map;
+import java.util.function.Supplier;
 
-import org.kogito.workitem.rest.resulthandlers.RestWorkItemHandlerResult;
+import org.kogito.workitem.rest.resulthandlers.JsonNodeResultHandler;
 
-import io.vertx.mutiny.core.buffer.Buffer;
-import io.vertx.mutiny.ext.web.client.HttpResponse;
+import com.github.javaparser.ast.expr.Expression;
 
-public class WorkItemHandlerResultHolder implements RestWorkItemHandlerResult {
+import static 
org.jbpm.compiler.canonical.descriptors.ExpressionUtils.getObjectCreationExpr;
 
-    private Map<String, Object> result;
+public class JsonNodeResultHandlerSupplier extends JsonNodeResultHandler 
implements Supplier<Expression> {
 
-    @Override
-    public Object apply(HttpResponse<Buffer> buffer, Class<?> clazz) {
-        result = buffer.bodyAsJson(Map.class);
-        return result;
-    }
+    private final Expression expression = 
getObjectCreationExpr(JsonNodeResultHandler.class);
 
-    public Map<String, Object> getResult() {
-        return result;
+    @Override
+    public Expression get() {
+        return expression;
     }
 }
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 48545be05e..69875c3e82 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
@@ -41,7 +41,6 @@ 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.WorkItemExecutionException;
 import org.kie.kogito.internal.process.workitem.WorkItemTransition;
 import org.kie.kogito.process.workitems.impl.DefaultKogitoWorkItemHandler;
 import org.kogito.workitem.rest.auth.ApiKeyAuthDecorator;
@@ -187,11 +186,6 @@ 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);
-        int statusCode = response.statusCode();
-        if (statusCode < 200 || statusCode >= 300) {
-            throw new WorkItemExecutionException(Integer.toString(statusCode), 
"Request for endpoint " + endPoint + " failed with message: " + 
response.statusMessage());
-        }
-
         return Optional.of(this.workItemLifeCycle.newTransition("complete", 
workItem.getPhaseStatus(), Collections.singletonMap(RESULT, 
resultHandler.apply(response, targetInfo))));
     }
 
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
index aa2f781f2d..85ccebdec8 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/RestWorkItemHandlerUtils.java
@@ -24,7 +24,11 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import org.kie.kogito.internal.process.workitem.WorkItemExecutionException;
+
 import io.vertx.ext.web.client.WebClientOptions;
+import io.vertx.mutiny.core.buffer.Buffer;
+import io.vertx.mutiny.ext.web.client.HttpResponse;
 
 import static org.kie.kogito.internal.utils.ConversionUtils.convert;
 
@@ -56,6 +60,13 @@ public class RestWorkItemHandlerUtils {
         }
     }
 
+    public static void checkStatusCode(HttpResponse<Buffer> response) {
+        int statusCode = response.statusCode();
+        if (statusCode < 200 || statusCode >= 300) {
+            throw new WorkItemExecutionException(Integer.toString(statusCode), 
"Request failed with message: " + response.statusMessage());
+        }
+    }
+
     private static <T> T getClassParam(Object param, Class<T> clazz, 
Map<String, T> instances) {
         //check if an instance of RestWorkItemHandlerBodyBuilder was set and 
just return it
         if (clazz.isAssignableFrom(param.getClass())) {
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
index b21e4e1995..5317c07658 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
@@ -23,10 +23,13 @@ import java.util.Map;
 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 DefaultRestWorkItemHandlerResult implements 
RestWorkItemHandlerResult {
 
     @Override
     public Object apply(HttpResponse<Buffer> response, Class<?> target) {
+        checkStatusCode(response);
         return target == null ? response.bodyAsJson(Map.class) : 
response.bodyAsJson(target);
     }
 }
diff --git 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
similarity index 77%
copy from 
kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
copy to 
kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
index b21e4e1995..7de2eb8b7f 100644
--- 
a/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/DefaultRestWorkItemHandlerResult.java
+++ 
b/kogito-workitems/kogito-rest-workitem/src/main/java/org/kogito/workitem/rest/resulthandlers/JsonNodeResultHandler.java
@@ -18,15 +18,14 @@
  */
 package org.kogito.workitem.rest.resulthandlers;
 
-import java.util.Map;
+import com.fasterxml.jackson.databind.JsonNode;
 
 import io.vertx.mutiny.core.buffer.Buffer;
 import io.vertx.mutiny.ext.web.client.HttpResponse;
 
-public class DefaultRestWorkItemHandlerResult implements 
RestWorkItemHandlerResult {
-
+public class JsonNodeResultHandler implements RestWorkItemHandlerResult {
     @Override
-    public Object apply(HttpResponse<Buffer> response, Class<?> target) {
-        return target == null ? response.bodyAsJson(Map.class) : 
response.bodyAsJson(target);
+    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/test/java/org/kogito/workitem/rest/JsonResultHandlerTest.java
 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/JsonResultHandlerTest.java
new file mode 100644
index 0000000000..bfa91451be
--- /dev/null
+++ 
b/kogito-workitems/kogito-rest-workitem/src/test/java/org/kogito/workitem/rest/JsonResultHandlerTest.java
@@ -0,0 +1,49 @@
+/*
+ * 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.kogito.workitem.rest;
+
+import org.junit.jupiter.api.Test;
+import org.kogito.workitem.rest.resulthandlers.JsonNodeResultHandler;
+import org.kogito.workitem.rest.resulthandlers.RestWorkItemHandlerResult;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import io.vertx.mutiny.core.buffer.Buffer;
+import io.vertx.mutiny.ext.web.client.HttpResponse;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class JsonResultHandlerTest {
+
+    @Test
+    void testObjectNode() {
+        ObjectMapper objectMapper = new ObjectMapper();
+        ObjectNode objectNode = objectMapper.createObjectNode().put("failed", 
"Carlos, trata de arrancarlo!!!!!");
+        RestWorkItemHandlerResult resultHandler = new JsonNodeResultHandler();
+        HttpResponse<Buffer> response = mock(HttpResponse.class);
+        when(response.statusCode()).thenReturn(500);
+        when(response.bodyAsJson(JsonNode.class)).thenReturn(objectNode);
+        assertThat(resultHandler.apply(response, null)).isSameAs(objectNode);
+    }
+
+}
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 a67ddb814d..3d1d133e15 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
@@ -159,6 +159,7 @@ public class RestWorkItemHandlerTest {
         ObjectNode objectNode = objectMapper.createObjectNode().put("id", 
26).put("name", "pepe");
         RestWorkItemHandlerResult resultHandler = new 
DefaultRestWorkItemHandlerResult();
         HttpResponse<Buffer> response = mock(HttpResponse.class);
+        when(response.statusCode()).thenReturn(200);
         when(response.bodyAsJson(ObjectNode.class)).thenReturn(objectNode);
         assertThat(resultHandler.apply(response, 
ObjectNode.class)).isSameAs(objectNode);
     }
diff --git 
a/quarkus/addons/dynamic/integration-tests/src/test/java/org/kie/kogito/process/dynamic/DynamicCallResourceTest.java
 
b/quarkus/addons/dynamic/integration-tests/src/test/java/org/kie/kogito/process/dynamic/DynamicCallResourceTest.java
index c0aa6e53fd..ebcabda7ee 100644
--- 
a/quarkus/addons/dynamic/integration-tests/src/test/java/org/kie/kogito/process/dynamic/DynamicCallResourceTest.java
+++ 
b/quarkus/addons/dynamic/integration-tests/src/test/java/org/kie/kogito/process/dynamic/DynamicCallResourceTest.java
@@ -136,7 +136,7 @@ public class DynamicCallResourceTest {
                 .post("/_dynamic/dynamicWait/" + id + "/rest")
                 .then()
                 .statusCode(404)
-                .body("message", containsString("endpoint 
invalid-endpoint-format failed"));
+                .body("message", containsString("failed"));
     }
 
     @Test


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

Reply via email to