Details
Description
Line 631 in BpmnParse causes a NPE if sourceActivity is null:
if(sourceActivity.getProperty("type").equals("compensationBoundaryCatch")) {
Sample process that causes the NPE:
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd" targetNamespace="foo"> <process id="textAnnotation2" name="textAnnotation2"> <startEvent id="start"/> <userTask id="firstTask" name="firstTask"/> <userTask id="secondTask" name="secondTask"/> <endEvent id="end"/> <sequenceFlow id="sequenceFlow95" sourceRef="start" targetRef="firstTask"/> <sequenceFlow id="sequenceFlow96" sourceRef="firstTask" targetRef="secondTask"/> <sequenceFlow id="sequenceFlow97" sourceRef="secondTask" targetRef="end"/> <association associationDirection="None" id="sid-BC23D2A5-6B2D-4A71-B570-CCE5501D70BD" sourceRef="firstTask" targetRef="textAnnotation"/> <association associationDirection="None" id="sid-CA66917D-33DF-4748-9F7E-5EF2E35DCA38" sourceRef="textAnnotation" targetRef="secondTask"/> <textAnnotation id="textAnnotation" textFormat="text/plain"> <text>Doubly annotated</text> </textAnnotation> </process> </definitions>
Patch (added sourceActivity !=null to first if statement below (line 631)):
if(sourceActivity !=null && sourceActivity.getProperty("type").equals("compensationBoundaryCatch")) { Object isForCompensation = targetActivity.getProperty(PROPERTYNAME_IS_FOR_COMPENSATION); if(isForCompensation == null || !(Boolean) isForCompensation) { addError("compensation boundary catch must be connected to element with isForCompensation=true", associationElement); } else { ActivityImpl compensatedActivity = sourceActivity.getParentActivity(); compensatedActivity.setProperty(PROPERTYNAME_COMPENSATION_HANDLER_ID, targetActivity.getId()); } }
The BpmnParse class contains the null check