docs: private void handleWorkItemHandlerException(ProcessWorkItemHandlerException handlerException, WorkItem workItem) {
          Map<String, Object> parameters = new HashMap<>();
          
          parameters.put("DeploymentId", workItem.getDeploymentId());
          parameters.put("ProcessInstanceId", workItem.getProcessInstanceId());
          parameters.put("WorkItemId", workItem.getId());
          parameters.put("NodeInstanceId", this.getId());
          parameters.put("ErrorMessage", handlerException.getMessage());        
          parameters.put("Error", handlerException);  
          
          // add all parameters of the work item to the newly started process instance
          parameters.putAll(workItem.getParameters());
          
          KieRuntime kruntime = getKieRuntimeForSubprocess();       
                  
          ProcessInstance processInstance = ( ProcessInstance ) kruntime.createProcessInstance(handlerException.getProcessId(), parameters);
          
          this.exceptionHandlingProcessInstanceId = processInstance.getId(); 
          ((ProcessInstanceImpl) processInstance).setMetaData("ParentProcessInstanceId", getProcessInstance().getId());
          ((ProcessInstanceImpl) processInstance).setMetaData("ParentNodeInstanceId", getUniqueId());
          
          ((ProcessInstanceImpl) processInstance).setParentProcessInstanceId(getProcessInstance().getId());
          ((ProcessInstanceImpl) processInstance).setSignalCompletion(true);
  
          kruntime.startProcessInstance(processInstance.getId());
          if (processInstance.getState() == ProcessInstance.STATE_COMPLETED
                  || processInstance.getState() == ProcessInstance.STATE_ABORTED) {
              exceptionHandlingCompleted(processInstance, handlerException);
          } else {
              addExceptionProcessListener();
          }
      }