Я написал следующий обработчик синтаксиса служебных задач, и мое требование заключается в добавлении обработчика завершения задачи для задачи обслуживания. Если я использую этот обработчик синтаксиса для пользовательской задачи, он работает нормально. Но когда я развертываю 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());
}
}
}