Hi guys!Maybe this behavior must be a bug… a don't know.If, inside a scriptTask or serviceTask, whatever, throw a unexpected BpmnError like: "Hulk smash":and haven't a generic boundaryEvent to detect it or a specific errorEventDefinition to treat this, so, a NullPointerException is throwed! But why?
throw new BpmnError("Hulk smash");
I take a look in this code at AbstractEventAtomicOperation:
public void execute(InterpretableExecution execution) {
ScopeImpl scope = getScope(execution);
List<ExecutionListener> exectionListeners = scope.getExecutionListeners(getEventName());
int executionListenerIndex = execution.getExecutionListenerIndex();
(…)
the problem is this var scope, this is null when haven't a boundaryEvent to catch exceptions…The most weard is the warning before error:
11/10/2012 10:27:33 org.activiti.engine.impl.bpmn.helper.ErrorPropagation propagateError
INFO: testeScript throws error event with errorCode 'Hulk smash', but no catching boundary event was defined. Execution will simply be ended (none end event semantics).
11/10/2012 10:29:51 org.activiti.engine.impl.interceptor.CommandContext close
GRAVE: Error while closing command context
java.lang.NullPointerException
at org.activiti.engine.impl.pvm.runtime.AbstractEventAtomicOperation.execute(AbstractEventAtomicOperation.java:42)
at org.activiti.engine.impl.interceptor.CommandContext.performOperation(CommandContext.java:80)
(…)
If "Execution will simply be ended (none end event semantics)." , why NullPointerException?I can avoid this exception if put a generic or specific exception treatment, my code:
<scriptTask id="testeScript" name="Teste script" scriptFormat="groovy">
<script><![CDATA[
osama = "Osama";
throw new BpmnError("Hulk smash");
osama2="Osama2222";
]]></script>
</scriptTask>
<boundaryEvent id="catchErrorGeneric" attachedToRef="testeScript" cancelActivity="true">
<errorEventDefinition id="genericError" />
</boundaryEvent>
<sequenceFlow sourceRef="catchErrorGeneric" targetRef="printaGeneric" />
<scriptTask id="printaGeneric" name="Generic script" scriptFormat="groovy">
<script><![CDATA[
println("generic error/exception man!");
]]></script>
</scriptTask>
<sequenceFlow sourceRef="printaGeneric" targetRef="theEnd" />
Thank's in advance.