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]