2016-07-08 68 views
1

我已经编写了以下服务任务分析处理程序,并且我的要求是为服务任务添加任务完成处理程序。如果我为这个用户任务使用这个解析处理程序,它工作正常。但是当我部署一个BPMN(我的服务器运行这个解析处理程序)时,这给了我空指针异常,因为没有任务定义服务任务。为服务任务添加任务完成侦听器

(TaskDefinition) bpmnParse.getCurrentActivity().getProperty("taskDefinition") 

这样做的正确方法是什么?

public class MyServiceTaskParseHandler extends AbstractBpmnParseHandler { 

private static final Log log = 

LogFactory.getLog(ServiceTskParseHandler.class); 

    @Override 
    protected Class<? extends BaseElement> getHandledType() {return ServiceTask.class; 
    } 

    @Override 
    protected void executeParse(BpmnParse bpmnParse, BaseElement element) { 

     TaskDefinition taskDefinition = (TaskDefinition) bpmnParse.getCurrentActivity().getProperty("taskDefinition"); 

     // We have to check if data publishing listener has already been associated at server startup 
     TaskListener taskCompletionListener = null; 
     List<TaskListener> completionListeners = taskDefinition.getTaskListener(TaskListener.EVENTNAME_COMPLETE); 
     if (completionListeners != null) { 
      for (TaskListener listener : completionListeners) { 
       if (listener instanceof TaskCompletionListener) { 
        taskCompletionListener = listener; 
       } 
      } 
     } 
     if (taskCompletionListener == null) { 
      if (log.isDebugEnabled()) { 
       log.debug("Adding data publishing listener to task: " + taskDefinition.getKey()); 
      } 
      taskDefinition.addTaskListener(TaskListener.EVENTNAME_COMPLETE, new TaskCompletionListener()); 
     } 
    } 
} 

回答

0

看看用于邮件,骆驼,骡子和shell swrvice任务的默认服务Task Parse处理程序。

模块/ Activiti的引擎/ src目录/主/ JAVA /组织/ Activiti的/发动机/ IMPL/BPMN /分析器/处理器/ ServiceTaskParseHandler.java

这应该指向你在正确的方向。

希望这会有所帮助, Greg