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]