This is an automated email from the ASF dual-hosted git repository.

egonzalez 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 e1b6dcc4eb [incubator-kie-issues-1308] Exceptions in Service process 
(#3553)
e1b6dcc4eb is described below

commit e1b6dcc4eba862e3a512c94ef0c73c61259c2976
Author: Enrique <[email protected]>
AuthorDate: Fri Jun 21 17:17:52 2024 +0200

    [incubator-kie-issues-1308] Exceptions in Service process (#3553)
---
 .../bpmn2/handler/LoggingTaskHandlerDecorator.java |   6 +-
 .../workflow/instance/impl/NodeInstanceImpl.java   |   1 +
 .../java/org/jbpm/bpmn2/services/Interface1.java   |  32 +++++++
 .../jbpm/bpmn2/service}/BPMN2-ServiceProcess.bpmn2 |   2 +-
 ...N2-ServiceProcessWithCustomTransformation.bpmn2 |   2 +-
 .../jbpm/bpmn2/service}/BPMN2-ServiceTask.bpmn2    |  17 +++-
 .../service/BPMN2-ServiceTaskWebService.bpmn2}     |   6 +-
 ...2-ExceptionServiceProcessErrorSignalling.bpmn2} |   2 +-
 .../BPMN2-ExceptionServiceProcessSignalling.bpmn2} |   4 +-
 .../BPMN2-ExceptionThrowingServiceProcess.bpmn2    |   2 +-
 .../src/test/java/org/jbpm/bpmn2/ActivityTest.java |  90 +++++++-----------
 .../test/java/org/jbpm/bpmn2/ErrorEventTest.java   |  53 ++++++++++-
 .../java/org/jbpm/bpmn2/IntermediateEventTest.java |   6 --
 .../org/jbpm/bpmn2/StandaloneBPMNProcessTest.java  | 104 ---------------------
 .../handler/LoggingTaskHandlerWrapperTest.java     |  77 ++++++++++-----
 15 files changed, 196 insertions(+), 208 deletions(-)

diff --git 
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerDecorator.java
 
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerDecorator.java
index be049745f4..087d09ece7 100755
--- 
a/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerDecorator.java
+++ 
b/jbpm/jbpm-bpmn2/src/main/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerDecorator.java
@@ -65,7 +65,7 @@ import org.slf4j.LoggerFactory;
  */
 public class LoggingTaskHandlerDecorator extends 
AbstractExceptionHandlingTaskHandler {
 
-    private static final Logger logger = 
LoggerFactory.getLogger(LoggingTaskHandlerDecorator.class);
+    private static Logger logger = 
LoggerFactory.getLogger(LoggingTaskHandlerDecorator.class);
     private int loggedExceptionsLimit = 100;
     private Queue<WorkItemExceptionInfo> exceptionInfoList = new 
ArrayDeque<>(loggedExceptionsLimit);
 
@@ -210,6 +210,10 @@ public class LoggingTaskHandlerDecorator extends 
AbstractExceptionHandlingTaskHa
         logMessage(false, workItem, cause);
     }
 
+    public static void setLogger(Logger logger) {
+        LoggingTaskHandlerDecorator.logger = logger;
+    }
+
     private void logMessage(boolean onExecute, KogitoWorkItem workItem, 
Throwable cause) {
         String handlerMethodStem = "execut";
         if (!onExecute) {
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
index e23c5b4bc8..f71a5ef44f 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
@@ -258,6 +258,7 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
 
     protected void captureError(Exception e) {
         logger.error("capture error", e);
+        e.printStackTrace();
         getProcessInstance().setErrorState(this, e);
     }
 
diff --git 
a/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/services/Interface1.java 
b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/services/Interface1.java
new file mode 100644
index 0000000000..9fe7b02d26
--- /dev/null
+++ b/jbpm/jbpm-tests/src/main/java/org/jbpm/bpmn2/services/Interface1.java
@@ -0,0 +1,32 @@
+/*
+ * 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.jbpm.bpmn2.services;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Interface1 {
+
+    Logger LOGGER = LoggerFactory.getLogger(Interface1.class);
+
+    public void operation1(String value) {
+        LOGGER.info("operation1 in interface1 = {}", value);
+    }
+}
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcess.bpmn2 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcess.bpmn2
similarity index 97%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcess.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcess.bpmn2
index ab68586d06..a86de045b3 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcess.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcess.bpmn2
@@ -40,7 +40,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" >
+  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" tns:packageName="org.jbpm.bpmn2.service">
 
     <!-- process variables -->
     <property id="s" itemSubjectRef="_sItem"/>
diff --git 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
similarity index 97%
rename from 
jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
index 35dacbb1e2..0e12a85489 100755
--- 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceProcessWithCustomTransformation.bpmn2
@@ -40,7 +40,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" >
+  <process processType="Private" isExecutable="true" 
id="ServiceProcessWithCustomTransformation" 
tns:packageName="org.jbpm.bpmn2.service">
 
     <!-- process variables -->
     <property id="s" itemSubjectRef="_sItem"/>
diff --git a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask.bpmn2 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTask.bpmn2
similarity index 91%
rename from jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTask.bpmn2
index cdd5481203..8e28087544 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTask.bpmn2
@@ -18,9 +18,18 @@
   ~ under the License.
   -->
 
-<bpmn:definitions id="EAPK_CCE882F2_23D3_4e7e_80FE_6D8C0AF83CAA" 
targetNamespace="www.sparxsystems.com.au/bpmn20" 
xmlns:ssbp="www.sparxsystems.com.au/bpmn20" 
xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:di="http://www.omg.org/spec/DD/20100524/DI"; 
xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"; 
xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"; exporter="Enterprise 
Architect" exporterVersion="10.0.1004">
+<bpmn:definitions id="EAPK_CCE882F2_23D3_4e7e_80FE_6D8C0AF83CAA" 
+targetNamespace="www.sparxsystems.com.au/bpmn20" 
+xmlns:ssbp="www.sparxsystems.com.au/bpmn20" 
+xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL"; 
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
+xmlns:di="http://www.omg.org/spec/DD/20100524/DI"; 
+xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"; 
+xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"; 
+xmlns:drools="http://www.jboss.org/drools";
+exporter="Enterprise Architect" exporterVersion="10.0.1004">
        
-       <bpmn:process id="EAID_DP000000_23D3_4e7e_80FE_6D8C0AF83CAA">
+       <bpmn:process id="ServiceTask" 
drools:packageName="org.jbpm.bpmn2.service">
                <bpmn:startEvent id="EAID_010AED45_CEDD_4cba_9153_7ED25329D3E2" 
name="StartEvent1" isInterrupting="true" parallelMultiple="false">
                        
<bpmn:outgoing>EAID_DE09F4BA_6B35_4699_8AC9_84819B916A98</bpmn:outgoing>
                </bpmn:startEvent>
@@ -48,8 +57,8 @@
        </bpmn:process>
        <bpmn:itemDefinition id="EAID_691666AE_9DFF_4003_B94E_D40F037565C1" 
isCollection="false" structureRef="java.lang.String"/>
        <bpmn:message id="EAID_137CB429_F782_4fee_8CC8_D57206264E3E" 
name="Message1" itemRef="EAID_691666AE_9DFF_4003_B94E_D40F037565C1"/>
-       <bpmn:interface id="EAID_B73BF5BB_A892_460d_B3BA_5D8873850689" 
name="Interface1">
-               <bpmn:operation id="EAID_6F76C1D0_E4CA_4b76_8A2F_9F7C33D2C90F" 
name="Operation1">
+       <bpmn:interface id="EAID_B73BF5BB_A892_460d_B3BA_5D8873850689" 
name="org.jbpm.bpmn2.services.Interface1">
+               <bpmn:operation id="EAID_6F76C1D0_E4CA_4b76_8A2F_9F7C33D2C90F" 
name="operation1">
                        
<bpmn:inMessageRef>EAID_137CB429_F782_4fee_8CC8_D57206264E3E</bpmn:inMessageRef>
                </bpmn:operation>
        </bpmn:interface>
diff --git 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask-web-service.bpmn2 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTaskWebService.bpmn2
similarity index 96%
rename from 
jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask-web-service.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTaskWebService.bpmn2
index dd1777fba9..f340b2b894 100755
--- a/jbpm/jbpm-tests/src/test/resources/BPMN2-ServiceTask-web-service.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/service/BPMN2-ServiceTaskWebService.bpmn2
@@ -27,12 +27,12 @@
   <bpmn2:itemDefinition id="_sItem2" structureRef="java.lang.String"/>
   <bpmn2:itemDefinition id="_2_InMessageType" structureRef="java.lang.String"/>
   <bpmn2:message id="_2_InMessage" itemRef="_2_InMessageType" 
name="_2_InMessage"/>
-  <bpmn2:interface id="_2_ServiceInterface" name="justaname" 
implementationRef="SimpleService">
-    <bpmn2:operation id="_2_ServiceOperation" implementationRef="hello" 
name="hello">
+  <bpmn2:interface id="_2_ServiceInterface" name="justaname" 
implementationRef="org.jbpm.bpmn2.services.Interface1">
+    <bpmn2:operation id="_2_ServiceOperation" implementationRef="operation1" 
name="operation1">
       <bpmn2:inMessageRef>_2_InMessage</bpmn2:inMessageRef>
     </bpmn2:operation>
   </bpmn2:interface>
-  <bpmn2:process id="org.jboss.qa.jbpm.CallWS" tns:version="1" 
tns:packageName="defaultPackage" tns:adHoc="false" name="CallWS" 
isExecutable="true" processType="Private">
+  <bpmn2:process id="ServiceTaskWebService" tns:version="1" 
tns:packageName="org.jbpm.bpmn2.service" tns:adHoc="false" name="CallWS" 
isExecutable="true" processType="Private">
     <bpmn2:startEvent id="StartEvent_1" name="Start">
       <bpmn2:outgoing>SequenceFlow_3</bpmn2:outgoing>
     </bpmn2:startEvent>
diff --git 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-ErrorSignalling.bpmn2
 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessErrorSignalling.bpmn2
similarity index 97%
rename from 
jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-ErrorSignalling.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessErrorSignalling.bpmn2
index ee463734de..f2b3d63627 100755
--- 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-ErrorSignalling.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessErrorSignalling.bpmn2
@@ -49,7 +49,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" >
+  <process processType="Private" isExecutable="true" 
id="ExceptionServiceProcessErrorSignalling" name="Service Process" 
tns:packageName="org.jbpm.bpmn2.service">
 
     <!-- process variables -->
     <property id="serviceInputItem" itemSubjectRef="_stringItem"/>
diff --git 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-Signalling.bpmn2
 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessSignalling.bpmn2
similarity index 96%
rename from 
jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-Signalling.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessSignalling.bpmn2
index a19dc5623a..aa3663715a 100755
--- 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionServiceProcess-Signalling.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionServiceProcessSignalling.bpmn2
@@ -49,7 +49,9 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" >
+  <process processType="Private" isExecutable="true" 
id="ExceptionServiceProcessSignalling" 
+    tns:packageName="org.jbpm.bpmn2.subprocess"
+    name="Service Process" >
 
     <!-- process variables -->
     <property id="serviceInputItem" itemSubjectRef="_stringItem"/>
diff --git 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionThrowingServiceProcess.bpmn2
 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionThrowingServiceProcess.bpmn2
similarity index 95%
rename from 
jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionThrowingServiceProcess.bpmn2
rename to 
jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionThrowingServiceProcess.bpmn2
index 25d3e932c0..9e07fce205 100755
--- 
a/jbpm/jbpm-tests/src/test/resources/BPMN2-ExceptionThrowingServiceProcess.bpmn2
+++ 
b/jbpm/jbpm-tests/src/test/bpmn/org/jbpm/bpmn2/subprocess/BPMN2-ExceptionThrowingServiceProcess.bpmn2
@@ -40,7 +40,7 @@
     </operation>
   </interface>
 
-  <process processType="Private" isExecutable="true" id="ServiceProcess" 
name="Service Process" >
+  <process processType="Private" isExecutable="true" 
id="ExceptionThrowingServiceProcess" 
tns:packageName="org.jbpm.bpmn2.subprocess" >
 
     <!-- process variables -->
     <property id="serviceInputItem" itemSubjectRef="_sItem"/>
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
index df4988a093..2578981db0 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ActivityTest.java
@@ -59,18 +59,23 @@ import org.jbpm.bpmn2.flow.XORSameTargetModel;
 import org.jbpm.bpmn2.flow.XORSameTargetProcess;
 import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
 import org.jbpm.bpmn2.handler.SendTaskHandler;
-import org.jbpm.bpmn2.handler.ServiceTaskHandler;
 import org.jbpm.bpmn2.objects.Account;
 import org.jbpm.bpmn2.objects.Address;
 import org.jbpm.bpmn2.objects.HelloService;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
+import org.jbpm.bpmn2.service.ServiceProcessModel;
+import org.jbpm.bpmn2.service.ServiceProcessProcess;
 import 
org.jbpm.bpmn2.service.ServiceProcessWithMvelCollectionTransformationModel;
 import 
org.jbpm.bpmn2.service.ServiceProcessWithMvelCollectionTransformationProcess;
 import org.jbpm.bpmn2.service.ServiceProcessWithMvelJaxbTransformationModel;
 import org.jbpm.bpmn2.service.ServiceProcessWithMvelJaxbTransformationProcess;
 import org.jbpm.bpmn2.service.ServiceProcessWithMvelTransformationModel;
 import org.jbpm.bpmn2.service.ServiceProcessWithMvelTransformationProcess;
+import org.jbpm.bpmn2.service.ServiceTaskModel;
+import org.jbpm.bpmn2.service.ServiceTaskProcess;
+import org.jbpm.bpmn2.service.ServiceTaskWebServiceModel;
+import org.jbpm.bpmn2.service.ServiceTaskWebServiceProcess;
 import org.jbpm.bpmn2.subprocess.AssignmentProcessModel;
 import org.jbpm.bpmn2.subprocess.AssignmentProcessProcess;
 import org.jbpm.bpmn2.subprocess.AssignmentSubProcessModel;
@@ -154,13 +159,14 @@ import org.kie.kogito.Application;
 import org.kie.kogito.auth.SecurityPolicy;
 import org.kie.kogito.handlers.HelloService_hello__2_Handler;
 import org.kie.kogito.handlers.HelloService_validate__2_Handler;
+import 
org.kie.kogito.handlers.Interface1_operation1_EAID_3344916D_2BAC_4ab6_92D4_F739156D0933_Handler;
+import org.kie.kogito.handlers.Interface1_operation1_ServiceTask_2_Handler;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoNode;
 import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
 import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItem;
-import org.kie.kogito.internal.process.runtime.KogitoWorkItemManager;
 import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.kie.kogito.process.ProcessInstance;
 import org.kie.kogito.process.workitems.InternalKogitoWorkItem;
@@ -811,63 +817,32 @@ public class ActivityTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testServiceTask() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcess.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task",
-                new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "john");
-        KogitoWorkflowProcessInstance processInstance = 
(KogitoWorkflowProcessInstance) kruntime
-                .startProcess("ServiceProcess", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertThat(processInstance.getVariable("s")).isEqualTo("Hello john!");
-    }
-
-    @Test
-    public void testServiceTaskWithAccessToWorkItemInfo() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcess.bpmn2");
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.HelloService_hello__2_Handler", new 
HelloService_hello__2_Handler());
+        org.kie.kogito.process.Process<ServiceProcessModel> definition = 
ServiceProcessProcess.newProcess(app);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task",
-                new ServiceTaskHandler() {
+        ServiceProcessModel model = definition.createModel();
+        model.setS("john");
+        org.kie.kogito.process.ProcessInstance<ServiceProcessModel> instance = 
definition.createInstance(model);
+        instance.start();
 
-                    @Override
-                    public void 
executeWorkItem(org.kie.kogito.internal.process.runtime.KogitoWorkItem 
workItem, KogitoWorkItemManager manager) {
-                        assertThat(workItem.getProcessInstance()).isNotNull();
-                        assertThat(workItem.getNodeInstance()).isNotNull();
-                        super.executeWorkItem(workItem, manager);
-                    }
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(instance.variables().getS()).isEqualTo("Hello john!");
 
-                });
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "john");
-        KogitoWorkflowProcessInstance processInstance = 
(KogitoWorkflowProcessInstance) kruntime.startProcess("ServiceProcess", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
-        assertThat(processInstance.getVariable("s")).isEqualTo("Hello john!");
     }
 
     @Test
     public void testServiceTaskNoInterfaceName() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ServiceTask-web-service.bpmn2");
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.services.Interface1_operation1_ServiceTask_2_Handler", new 
Interface1_operation1_ServiceTask_2_Handler());
+        org.kie.kogito.process.Process<ServiceTaskWebServiceModel> definition 
= ServiceTaskWebServiceProcess.newProcess(app);
 
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task",
-                new SystemOutWorkItemHandler() {
+        ServiceTaskWebServiceModel model = definition.createModel();
+        org.kie.kogito.process.ProcessInstance<ServiceTaskWebServiceModel> 
instance = definition.createInstance(model);
+        instance.start();
 
-                    @Override
-                    public void executeWorkItem(KogitoWorkItem workItem, 
KogitoWorkItemManager manager) {
-                        
assertThat(workItem.getParameter("Interface")).isEqualTo("SimpleService");
-                        
assertThat(workItem.getParameter("Operation")).isEqualTo("hello");
-                        
assertThat(workItem.getParameter("ParameterType")).isEqualTo("java.lang.String");
-                        
assertThat(workItem.getParameter("implementation")).isEqualTo("##WebService");
-                        
assertThat(workItem.getParameter("operationImplementationRef")).isEqualTo("hello");
-                        
assertThat(workItem.getParameter("interfaceImplementationRef")).isEqualTo("SimpleService");
-                        super.executeWorkItem(workItem, manager);
-                    }
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
 
-                });
-        Map<String, Object> params = new HashMap<>();
-        KogitoWorkflowProcessInstance processInstance = 
(KogitoWorkflowProcessInstance) kruntime
-                .startProcess("org.jboss.qa.jbpm.CallWS", params);
-        assertProcessInstanceFinished(processInstance, kruntime);
     }
 
     @Test
@@ -1131,17 +1106,16 @@ public class ActivityTest extends JbpmBpmn2TestCase {
         assertThatExceptionOfType(RuntimeException.class).isThrownBy(() -> 
createKogitoProcessRuntime("BPMN2-InvalidServiceProcess.bpmn2"));
     }
 
-    @Test // JBPM-3951
+    @Test
     public void testServiceTaskInterface() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceTask.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", new SystemOutWorkItemHandler());
-        Map<String, Object> params = new HashMap<>();
-
-        KogitoWorkflowProcessInstance processInstance = 
(KogitoWorkflowProcessInstance) kruntime
-                .startProcess("EAID_DP000000_23D3_4e7e_80FE_6D8C0AF83CAA", 
params);
-        assertProcessInstanceFinished(processInstance, kruntime);
+        Application app = ProcessTestHelper.newApplication();
+        
Interface1_operation1_EAID_3344916D_2BAC_4ab6_92D4_F739156D0933_Handler handler 
= new Interface1_operation1_EAID_3344916D_2BAC_4ab6_92D4_F739156D0933_Handler();
+        ProcessTestHelper.registerHandler(app, handler.getName(), handler);
+        org.kie.kogito.process.Process<ServiceTaskModel> definition = 
ServiceTaskProcess.newProcess(app);
+        org.kie.kogito.process.ProcessInstance<ServiceTaskModel> instance = 
definition.createInstance(definition.createModel());
+        instance.start();
 
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
     }
 
     @SuppressWarnings("unchecked")
diff --git a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java
index 48374b5bd7..98611a1f17 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/ErrorEventTest.java
@@ -38,9 +38,14 @@ import 
org.jbpm.bpmn2.event.BoundaryErrorEventSubProcessExceptionMappingModel;
 import 
org.jbpm.bpmn2.event.BoundaryErrorEventSubProcessExceptionMappingProcess;
 import org.jbpm.bpmn2.handler.SignallingTaskHandlerDecorator;
 import org.jbpm.bpmn2.objects.ExceptionOnPurposeHandler;
+import org.jbpm.bpmn2.objects.ExceptionService;
 import org.jbpm.bpmn2.objects.MyError;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
+import org.jbpm.bpmn2.service.ExceptionServiceProcessErrorSignallingModel;
+import org.jbpm.bpmn2.service.ExceptionServiceProcessErrorSignallingProcess;
+import org.jbpm.bpmn2.subprocess.ExceptionServiceProcessSignallingModel;
+import org.jbpm.bpmn2.subprocess.ExceptionServiceProcessSignallingProcess;
 import org.jbpm.process.instance.event.listeners.RuleAwareProcessEventListener;
 import org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler;
@@ -52,6 +57,9 @@ import org.junit.jupiter.api.Test;
 import org.kie.api.event.process.ProcessNodeLeftEvent;
 import org.kie.kogito.Application;
 import 
org.kie.kogito.handlers.AlwaysThrowingComponent_throwException__8DA0CD88_0714_43C1_B492_A70FADE42361_Handler;
+import org.kie.kogito.handlers.ExceptionService_handleException__X_2_Handler;
+import org.kie.kogito.handlers.ExceptionService_throwException__2_Handler;
+import org.kie.kogito.handlers.ExceptionService_throwException__3_Handler;
 import 
org.kie.kogito.handlers.HelloService_helloException_ServiceTask_2_Handler;
 import 
org.kie.kogito.handlers.LoggingComponent_logException__E5B0E78B_0112_42F4_89FF_0DCC4FCB6BCD_Handler;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
@@ -331,16 +339,53 @@ public class ErrorEventTest extends JbpmBpmn2TestCase {
 
     @Test
     public void testErrorSignallingExceptionServiceTask() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionServiceProcess-ErrorSignalling.bpmn2");
+        String input = "this is my service input";
 
-        
StandaloneBPMNProcessTest.runTestErrorSignallingExceptionServiceTask(kruntime);
+        Application app = ProcessTestHelper.newApplication();
+        SignallingTaskHandlerDecorator signallingTaskWrapper = new 
SignallingTaskHandlerDecorator(ExceptionService_throwException__3_Handler.class,
 "Error-code");
+        
signallingTaskWrapper.setWorkItemExceptionParameterName(ExceptionService.exceptionParameterName);
+        Object[] caughtEventObjectHolder = new Object[1];
+        caughtEventObjectHolder[0] = null;
+        ExceptionService.setCaughtEventObjectHolder(caughtEventObjectHolder);
+
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_throwException__3_Handler", 
signallingTaskWrapper);
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_handleException__X_2_Handler", new 
ExceptionService_handleException__X_2_Handler());
+        
org.kie.kogito.process.Process<ExceptionServiceProcessErrorSignallingModel> 
definition = ExceptionServiceProcessErrorSignallingProcess.newProcess(app);
+
+        ExceptionServiceProcessErrorSignallingModel model = 
definition.createModel();
+        model.setServiceInputItem(input);
+        
org.kie.kogito.process.ProcessInstance<ExceptionServiceProcessErrorSignallingModel>
 instance = definition.createInstance(model);
+        instance.start();
+
+        ProcessTestHelper.completeWorkItem(instance, "john", 
Collections.emptyMap());
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ABORTED);
+        assertThat(caughtEventObjectHolder[0] != null && 
caughtEventObjectHolder[0] instanceof KogitoWorkItem).withFailMessage("Event 
was not passed to Event Subprocess.").isTrue();
     }
 
     @Test
     public void testSignallingExceptionServiceTask() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionServiceProcess-Signalling.bpmn2");
+        String input = "this is my service input";
+
+        SignallingTaskHandlerDecorator signallingTaskWrapper = new 
SignallingTaskHandlerDecorator(ExceptionService_throwException__2_Handler.class,
 "exception-signal");
+        
signallingTaskWrapper.setWorkItemExceptionParameterName(ExceptionService.exceptionParameterName);
+        Object[] caughtEventObjectHolder = new Object[1];
+        caughtEventObjectHolder[0] = null;
+        ExceptionService.setCaughtEventObjectHolder(caughtEventObjectHolder);
+
+        Application app = ProcessTestHelper.newApplication();
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_throwException__2_Handler", 
signallingTaskWrapper);
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_handleException__X_2_Handler", new 
ExceptionService_handleException__X_2_Handler());
+        org.kie.kogito.process.Process<ExceptionServiceProcessSignallingModel> 
definition = ExceptionServiceProcessSignallingProcess.newProcess(app);
+
+        ExceptionServiceProcessSignallingModel model = 
definition.createModel();
+        model.setServiceInputItem(input);
+        
org.kie.kogito.process.ProcessInstance<ExceptionServiceProcessSignallingModel> 
instance = definition.createInstance(model);
+        instance.start();
+
+        ProcessTestHelper.completeWorkItem(instance, "john", 
Collections.emptyMap());
+        
assertThat(instance.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_COMPLETED);
+        assertThat(caughtEventObjectHolder[0] != null && 
caughtEventObjectHolder[0] instanceof KogitoWorkItem).withFailMessage("Event 
was not passed to Event Subprocess.").isTrue();
 
-        
StandaloneBPMNProcessTest.runTestSignallingExceptionServiceTask(kruntime);
     }
 
     @Test
diff --git 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
index 3ea81f5e6f..6cf4149454 100755
--- a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
+++ b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/IntermediateEventTest.java
@@ -1632,12 +1632,6 @@ public class IntermediateEventTest extends 
JbpmBpmn2TestCase {
 
     }
 
-    @Test
-    public void testSignallingExceptionServiceTask() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionServiceProcess-Signalling.bpmn2");
-        
StandaloneBPMNProcessTest.runTestSignallingExceptionServiceTask(kruntime);
-    }
-
     @Test
     public void testSignalBoundaryEventOnSubprocessTakingDifferentPaths() 
throws Exception {
         kruntime = createKogitoProcessRuntime(
diff --git 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
index 32c2874cb4..640515b1e1 100755
--- 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
+++ 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/StandaloneBPMNProcessTest.java
@@ -40,11 +40,8 @@ import org.jbpm.bpmn2.adhoc.AdHocTerminateEndEventModel;
 import org.jbpm.bpmn2.adhoc.AdHocTerminateEndEventProcess;
 import org.jbpm.bpmn2.handler.ReceiveTaskHandler;
 import org.jbpm.bpmn2.handler.SendTaskHandler;
-import org.jbpm.bpmn2.handler.ServiceTaskHandler;
-import org.jbpm.bpmn2.handler.SignallingTaskHandlerDecorator;
 import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageModel;
 import org.jbpm.bpmn2.intermediate.IntermediateThrowEventMessageProcess;
-import org.jbpm.bpmn2.objects.ExceptionService;
 import org.jbpm.bpmn2.objects.Person;
 import org.jbpm.bpmn2.objects.TestWorkItemHandler;
 import org.jbpm.process.instance.impl.demo.DoNothingWorkItemHandler;
@@ -63,7 +60,6 @@ import org.kie.kogito.Application;
 import org.kie.kogito.event.impl.MessageProducer;
 import org.kie.kogito.internal.process.event.DefaultKogitoProcessEventListener;
 import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
-import org.kie.kogito.internal.process.runtime.KogitoProcessRuntime;
 import org.kie.kogito.internal.process.runtime.KogitoWorkItem;
 import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
 import org.w3c.dom.Document;
@@ -651,18 +647,6 @@ public class StandaloneBPMNProcessTest extends 
JbpmBpmn2TestCase {
         assertProcessInstanceAborted(processInstance.getStringId(), kruntime);
     }
 
-    @Test
-    public void testServiceTask() throws Exception {
-        kruntime = createKogitoProcessRuntime("BPMN2-ServiceProcess.bpmn2");
-
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", new ServiceTaskHandler());
-        Map<String, Object> params = new HashMap<>();
-        params.put("s", "john");
-        KogitoWorkflowProcessInstance processInstance = 
(KogitoWorkflowProcessInstance) kruntime.startProcess("ServiceProcess", params);
-        assertProcessInstanceCompleted(processInstance.getStringId(), 
kruntime);
-        assertThat(processInstance.getVariable("s")).isEqualTo("Hello john!");
-    }
-
     @Test
     public void testSendTask() throws Exception {
         kruntime = 
createKogitoProcessRuntime("org/jbpm/bpmn2/task/BPMN2-SendTask.bpmn2");
@@ -793,60 +777,6 @@ public class StandaloneBPMNProcessTest extends 
JbpmBpmn2TestCase {
         
assertThat(processInstance.getState()).isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
     }
 
-    @Test
-    public void testErrorSignallingExceptionServiceTask() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionServiceProcess-ErrorSignalling.bpmn2");
-
-        runTestErrorSignallingExceptionServiceTask(kruntime);
-    }
-
-    public static void 
runTestErrorSignallingExceptionServiceTask(KogitoProcessRuntime kruntime) 
throws Exception {
-
-        // Setup
-        String eventType = "Error-code";
-        SignallingTaskHandlerDecorator signallingTaskWrapper = new 
SignallingTaskHandlerDecorator(ServiceTaskHandler.class, eventType);
-        
signallingTaskWrapper.setWorkItemExceptionParameterName(ExceptionService.exceptionParameterName);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", signallingTaskWrapper);
-
-        Object[] caughtEventObjectHolder = new Object[1];
-        caughtEventObjectHolder[0] = null;
-        ExceptionService.setCaughtEventObjectHolder(caughtEventObjectHolder);
-
-        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Human 
Task", workItemHandler);
-        // Start process
-        Map<String, Object> params = new HashMap<>();
-        String input = "this is my service input";
-        params.put("serviceInputItem", input);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("ServiceProcess", params);
-
-        
assertThat(processInstance.getState()).isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
-
-        KogitoWorkItem workItem = workItemHandler.getWorkItem();
-        assertThat(workItem).isNotNull();
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
-        // Check that event was passed to Event SubProcess (and grabbed by 
WorkItemHandler);
-        assertThat(caughtEventObjectHolder[0] != null && 
caughtEventObjectHolder[0] instanceof KogitoWorkItem).withFailMessage("Event 
was not passed to Event Subprocess.").isTrue();
-        workItem = (KogitoWorkItem) caughtEventObjectHolder[0];
-        Object throwObj = 
workItem.getParameter(ExceptionService.exceptionParameterName);
-        assertThat(throwObj).withFailMessage("KogitoWorkItem doesn't contain 
Throwable.").isInstanceOf(Throwable.class);
-        assertThat(((Throwable) 
throwObj).getMessage()).withFailMessage("Exception message does not match 
service input.").endsWith(input);
-
-        // Complete process
-        processInstance = 
kruntime.getProcessInstance(processInstance.getStringId());
-        assertThat(processInstance == null || processInstance.getState() == 
KogitoProcessInstance.STATE_ABORTED).withFailMessage("Process instance has not 
been aborted.").isTrue();
-
-    }
-
-    @Test
-    public void testSignallingExceptionServiceTask() throws Exception {
-        // dump/reread functionality seems to work for this test 
-        // .. but I'm pretty sure that's more coincidence than design (mriet, 
2013-03-06)
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionServiceProcess-Signalling.bpmn2");
-
-        runTestSignallingExceptionServiceTask(kruntime);
-    }
-
     @Test
     public void testXXEProcessVulnerability() throws Exception {
         Resource processResource = 
ResourceFactory.newClassPathResource("xxe-protection/BPMN2-XXE-Process.bpmn2");
@@ -898,38 +828,4 @@ public class StandaloneBPMNProcessTest extends 
JbpmBpmn2TestCase {
         assertThat(processInstance).isNotNull();
     }
 
-    public static void 
runTestSignallingExceptionServiceTask(KogitoProcessRuntime kruntime) throws 
Exception {
-
-        // Setup
-        String eventType = "exception-signal";
-        SignallingTaskHandlerDecorator signallingTaskWrapper = new 
SignallingTaskHandlerDecorator(ServiceTaskHandler.class, eventType);
-        
signallingTaskWrapper.setWorkItemExceptionParameterName(ExceptionService.exceptionParameterName);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", signallingTaskWrapper);
-
-        Object[] caughtEventObjectHolder = new Object[1];
-        caughtEventObjectHolder[0] = null;
-        ExceptionService.setCaughtEventObjectHolder(caughtEventObjectHolder);
-
-        // Start process
-        Map<String, Object> params = new HashMap<>();
-        String input = "this is my service input";
-        params.put("serviceInputItem", input);
-        KogitoProcessInstance processInstance = 
kruntime.startProcess("ServiceProcess", params);
-
-        // Check that event was passed to Event SubProcess (and grabbed by 
WorkItemHandler);
-        assertThat(caughtEventObjectHolder[0] != null && 
caughtEventObjectHolder[0] instanceof KogitoWorkItem).withFailMessage("Event 
was not passed to Event Subprocess.").isTrue();
-        KogitoWorkItem workItem = (KogitoWorkItem) caughtEventObjectHolder[0];
-        Object throwObj = 
workItem.getParameter(ExceptionService.exceptionParameterName);
-        assertThat(throwObj).withFailMessage("KogitoWorkItem doesn't contain 
Throwable.").isInstanceOf(Throwable.class);
-        assertThat(((Throwable) 
throwObj).getMessage()).withFailMessage("Exception message does not match 
service input.").endsWith(input);
-
-        // Complete process
-        assertThat(processInstance.getState()).withFailMessage("Process 
instance is not active.").isEqualTo(KogitoProcessInstance.STATE_ACTIVE);
-        
kruntime.getKogitoWorkItemManager().completeWorkItem(workItem.getStringId(), 
null);
-        processInstance = 
kruntime.getProcessInstance(processInstance.getStringId());
-        if (processInstance != null) {
-            assertThat(processInstance.getState()).withFailMessage("Process 
instance is not completed.").isEqualTo(KogitoProcessInstance.STATE_COMPLETED);
-        } // otherwise, persistence use => processInstance == null => process 
is completed
-    }
-
 }
diff --git 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerWrapperTest.java
 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerWrapperTest.java
index d830287b1b..9668f485b0 100755
--- 
a/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerWrapperTest.java
+++ 
b/jbpm/jbpm-tests/src/test/java/org/jbpm/bpmn2/handler/LoggingTaskHandlerWrapperTest.java
@@ -19,31 +19,47 @@
 package org.jbpm.bpmn2.handler;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
-import org.jbpm.bpmn2.JbpmBpmn2TestCase;
 import org.jbpm.bpmn2.handler.LoggingTaskHandlerDecorator.InputParameter;
+import org.jbpm.bpmn2.subprocess.ExceptionThrowingServiceProcessModel;
+import org.jbpm.bpmn2.subprocess.ExceptionThrowingServiceProcessProcess;
+import org.jbpm.test.utils.ProcessTestHelper;
 import org.junit.jupiter.api.Test;
+import org.kie.kogito.Application;
+import org.kie.kogito.handlers.ExceptionService_throwException__2_Handler;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class LoggingTaskHandlerWrapperTest extends JbpmBpmn2TestCase {
+public class LoggingTaskHandlerWrapperTest {
 
     @Test
     public void testLimitExceptionInfoList() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionThrowingServiceProcess.bpmn2");
+        Application app = ProcessTestHelper.newApplication();
 
-        LoggingTaskHandlerDecorator loggingTaskHandlerWrapper = new 
LoggingTaskHandlerDecorator(ServiceTaskHandler.class, 2);
-        loggingTaskHandlerWrapper.setPrintStackTrace(false);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", loggingTaskHandlerWrapper);
+        LoggingTaskHandlerDecorator loggingTaskHandlerWrapper = new 
LoggingTaskHandlerDecorator(ExceptionService_throwException__2_Handler.class, 
2);
+
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_throwException__2_Handler", 
loggingTaskHandlerWrapper);
+
+        org.kie.kogito.process.Process<ExceptionThrowingServiceProcessModel> 
definition = ExceptionThrowingServiceProcessProcess.newProcess(app);
+        ExceptionThrowingServiceProcessModel model = definition.createModel();
+        model.setServiceInputItem("exception message");
+        
org.kie.kogito.process.ProcessInstance<ExceptionThrowingServiceProcessModel> 
instance1 = definition.createInstance(model);
+        instance1.start();
+        
assertThat(instance1.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
-        Map<String, Object> params = new HashMap<>();
-        params.put("serviceInputItem", "exception message");
-        kruntime.startProcess("ServiceProcess", params);
-        kruntime.startProcess("ServiceProcess", params);
-        kruntime.startProcess("ServiceProcess", params);
+        
org.kie.kogito.process.ProcessInstance<ExceptionThrowingServiceProcessModel> 
instance2 = definition.createInstance(model);
+        instance2.start();
+        
assertThat(instance2.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        
org.kie.kogito.process.ProcessInstance<ExceptionThrowingServiceProcessModel> 
instance3 = definition.createInstance(model);
+        instance3.start();
+        
assertThat(instance3.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
 
         int size = 
loggingTaskHandlerWrapper.getWorkItemExceptionInfoList().size();
         assertThat(size).as("WorkItemExceptionInfoList is too large: " + 
size).isEqualTo(2);
@@ -51,26 +67,41 @@ public class LoggingTaskHandlerWrapperTest extends 
JbpmBpmn2TestCase {
 
     @Test
     public void testFormatLoggingError() throws Exception {
-        kruntime = 
createKogitoProcessRuntime("BPMN2-ExceptionThrowingServiceProcess.bpmn2");
+        ListAppender<ILoggingEvent> logAppender = new ListAppender<>();
+        LoggerContext loggerContext = (LoggerContext) 
LoggerFactory.getILoggerFactory();
+        logAppender.setContext(loggerContext);
+        ch.qos.logback.classic.Logger decoratorLogger = 
(ch.qos.logback.classic.Logger) 
LoggerFactory.getLogger(LoggingTaskHandlerDecorator.class);
+        decoratorLogger.addAppender(logAppender);
+
+        logAppender.start();
+
+        Application app = ProcessTestHelper.newApplication();
 
-        LoggingTaskHandlerDecorator loggingTaskHandlerWrapper = new 
LoggingTaskHandlerDecorator(ServiceTaskHandler.class, 2);
+        LoggingTaskHandlerDecorator loggingTaskHandlerWrapper = new 
LoggingTaskHandlerDecorator(ExceptionService_throwException__2_Handler.class, 
2);
+        LoggingTaskHandlerDecorator.setLogger(decoratorLogger);
         loggingTaskHandlerWrapper.setLoggedMessageFormat("{0} - {1} - {2} - 
{3}");
         List<InputParameter> inputParameters = new 
ArrayList<LoggingTaskHandlerDecorator.InputParameter>();
         inputParameters.add(InputParameter.EXCEPTION_CLASS);
         inputParameters.add(InputParameter.WORK_ITEM_ID);
         inputParameters.add(InputParameter.WORK_ITEM_NAME);
         inputParameters.add(InputParameter.PROCESS_INSTANCE_ID);
-
         loggingTaskHandlerWrapper.setLoggedMessageInput(inputParameters);
-
         loggingTaskHandlerWrapper.setPrintStackTrace(false);
-        kruntime.getKogitoWorkItemManager().registerWorkItemHandler("Service 
Task", loggingTaskHandlerWrapper);
 
-        Map<String, Object> params = new HashMap<>();
-        params.put("serviceInputItem", "exception message");
-        kruntime.startProcess("ServiceProcess", params);
-        kruntime.startProcess("ServiceProcess", params);
-        kruntime.startProcess("ServiceProcess", params);
+        ProcessTestHelper.registerHandler(app, 
"org.jbpm.bpmn2.objects.ExceptionService_throwException__2_Handler", 
loggingTaskHandlerWrapper);
+
+        org.kie.kogito.process.Process<ExceptionThrowingServiceProcessModel> 
definition = ExceptionThrowingServiceProcessProcess.newProcess(app);
+        ExceptionThrowingServiceProcessModel model = definition.createModel();
+        model.setServiceInputItem("exception message");
+        
org.kie.kogito.process.ProcessInstance<ExceptionThrowingServiceProcessModel> 
instance1 = definition.createInstance(model);
+        instance1.start();
+        
assertThat(instance1.status()).isEqualTo(org.kie.kogito.process.ProcessInstance.STATE_ACTIVE);
+
+        String wid = 
loggingTaskHandlerWrapper.getWorkItemExceptionInfoList().get(0).getWorkItemId();
+        
assertThat(logAppender.list.get(0).getFormattedMessage()).isEqualTo("RuntimeException
 - " + wid + " - 
org.jbpm.bpmn2.objects.ExceptionService_throwException__2_Handler - " + 
instance1.id());
+
+        decoratorLogger.detachAppender(logAppender);
+
     }
 
 }


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


Reply via email to