我编写了以下Service task parse handler,我的要求是为服务任务添加任务完成处理程序。如果我将这个解析处理程序用于用户任务,它工作正常。但是当我部署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 :(得分:0)
查看用于邮件,驼峰,骡子和shell swrvice任务的默认服务Task Parse处理程序。
模块/ Activiti的引擎/ SRC /主/ JAVA /组织/ Activiti的/发动机/ IMPL / BPMN /分析器/处理器/ ServiceTaskParseHandler.java
这应该指向正确的方向。
希望这有帮助, 格雷格