diff --git a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/parser/handler/StartEventParseHandler.java b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/parser/handler/StartEventParseHandler.java index 024c4ca56d7..f40a139e4ef 100644 --- a/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/parser/handler/StartEventParseHandler.java +++ b/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/parser/handler/StartEventParseHandler.java @@ -79,13 +79,11 @@ protected void executeParse(BpmnParse bpmnParse, StartEvent element) { element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessVariableListenerlStartEventActivityBehavior(element, variableListenerEventDefinition)); } - } else { + } else if (hasEventTypeElement(element)) { List eventTypeElements = element.getExtensionElements().get(BpmnXMLConstants.ELEMENT_EVENT_TYPE); - if (eventTypeElements != null && !eventTypeElements.isEmpty()) { - String eventType = eventTypeElements.get(0).getElementText(); - if (StringUtils.isNotEmpty(eventType)) { - element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessEventRegistryStartEventActivityBehavior(element, eventType)); - } + String eventType = eventTypeElements.get(0).getElementText(); + if (StringUtils.isNotEmpty(eventType)) { + element.setBehavior(bpmnParse.getActivityBehaviorFactory().createEventSubProcessEventRegistryStartEventActivityBehavior(element, eventType)); } } @@ -99,7 +97,7 @@ protected void executeParse(BpmnParse bpmnParse, StartEvent element) { } } - if (element.getSubProcess() == null && (CollectionUtil.isEmpty(element.getEventDefinitions()) || + if (element.getSubProcess() == null && (hasNoEventDefinitionOrTypeElement(element) || bpmnParse.getCurrentProcess().getInitialFlowElement() == null)) { bpmnParse.getCurrentProcess().setInitialFlowElement(element); @@ -118,5 +116,18 @@ protected MessageEventDefinition fillMessageRef(BpmnParse bpmnParse, EventDefini return messageDefinition; } + + protected boolean hasNoEventDefinitionOrTypeElement(StartEvent element) { + return CollectionUtil.isEmpty(element.getEventDefinitions()) && !hasEventTypeElement(element); + } + protected boolean hasEventTypeElement(StartEvent element) { + boolean foundEventTypeElement = false; + List eventTypeElements = element.getExtensionElements().get(BpmnXMLConstants.ELEMENT_EVENT_TYPE); + if (eventTypeElements != null && !eventTypeElements.isEmpty()) { + foundEventTypeElement = true; + } + + return foundEventTypeElement; + } } diff --git a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java index db28eab9a15..821d0faa043 100644 --- a/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java +++ b/modules/flowable-event-registry-integration-test/src/test/java/org/flowable/eventregistry/integrationtest/ProcessWithEventRegistryTest.java @@ -21,6 +21,8 @@ import java.util.Comparator; import java.util.List; +import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.Process; import org.flowable.common.engine.impl.interceptor.EngineConfigurationConstants; import org.flowable.engine.ManagementService; import org.flowable.engine.ProcessEngine; @@ -665,6 +667,15 @@ public void testMultiInstanceSendSystemEvent() { } } + @Test + @Deployment(resources = "org/flowable/eventregistry/integrationtest/testMultipleStartEvents.bpmn20.xml") + public void testMultipleStartEventsForInitialStartEvent() { + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("multipleStartEvents").singleResult(); + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + Process process = bpmnModel.getMainProcess(); + assertThat(process.getInitialFlowElement().getId()).isEqualTo("start3"); + } + protected EventRepositoryService getEventRepositoryService() { return getEventRegistryEngineConfiguration().getEventRepositoryService(); } diff --git a/modules/flowable-event-registry-integration-test/src/test/resources/org/flowable/eventregistry/integrationtest/testMultipleStartEvents.bpmn20.xml b/modules/flowable-event-registry-integration-test/src/test/resources/org/flowable/eventregistry/integrationtest/testMultipleStartEvents.bpmn20.xml index fe1b2abfaa4..7b148c93d4f 100644 --- a/modules/flowable-event-registry-integration-test/src/test/resources/org/flowable/eventregistry/integrationtest/testMultipleStartEvents.bpmn20.xml +++ b/modules/flowable-event-registry-integration-test/src/test/resources/org/flowable/eventregistry/integrationtest/testMultipleStartEvents.bpmn20.xml @@ -38,6 +38,14 @@ + + + + + + + +