{"record":{"id":"81fd563db72b118d","repo":"flowable/flowable-engine","slug":"variablelistenereventdefinition-is-only-supported","errorCode":null,"errorMessage":"variableListenerEventDefinition is only supported for events, not for activity id ${parentElement.getId()}","messagePattern":"variableListenerEventDefinition is only supported for events, not for activity id (.+?)","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/child/VariableListenerEventDefinitionParser.java","lineNumber":38,"sourceCode":"import org.flowable.bpmn.model.BpmnModel;\nimport org.flowable.bpmn.model.Event;\nimport org.flowable.bpmn.model.VariableListenerEventDefinition;\nimport org.flowable.common.engine.api.FlowableException;\n\n/**\n * @author Tijs Rademakers\n */\npublic class VariableListenerEventDefinitionParser extends BaseChildElementParser {\n\n    @Override\n    public String getElementName() {\n        return ELEMENT_EVENT_VARIABLELISTENERDEFINITION;\n    }\n\n    @Override\n    public void parseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model) throws Exception {\n        if (!(parentElement instanceof Event event)) {\n            throw new FlowableException(\"variableListenerEventDefinition is only supported for events, not for activity id \" + parentElement.getId());\n        }\n        \n        VariableListenerEventDefinition eventDefinition = new VariableListenerEventDefinition();\n        BpmnXMLUtil.addXMLLocation(eventDefinition, xtr);\n        \n        String variableName = xtr.getAttributeValue(null, ATTRIBUTE_VARIABLE_NAME);\n        if (StringUtils.isEmpty(variableName)) {\n            LOGGER.warn(\"variable name is required for variable listener with activity id {}\", parentElement.getId());\n        }\n        eventDefinition.setVariableName(variableName);\n        \n        String variableChangeType = xtr.getAttributeValue(null, ATTRIBUTE_VARIABLE_CHANGE_TYPE);\n        eventDefinition.setVariableChangeType(variableChangeType);\n\n        event.addEventDefinition(eventDefinition);\n        \n        model.addActivityIdForVariableListenerName(variableName, parentElement.getId());\n    }","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-bpmn-converter/src/main/java/org/flowable/bpmn/converter/child/VariableListenerEventDefinitionParser.java#L20-L56","documentation":"The converter maps a variableListenerEventDefinition child element to an event definition, but this definition is only meaningful on event elements (catch/intermediate/boundary events). If the parent activity is a task, service task, etc., Flowable throws a FlowableException naming the offending activity id.","triggerScenarios":"BPMN XML places <flowable:variableListenerEventDefinition> inside a non-event activity (e.g. a serviceTask or userTask) instead of an intermediateCatchEvent or boundaryEvent.","commonSituations":"Hand-edited XML moving event definitions between elements; refactoring a task into an event but forgetting to move the child definition; modeler exports with misplaced children.","solutions":["Move the variableListenerEventDefinition into an event element (e.g. intermediateCatchEvent) that references the same activity id","Remove the variableListenerEventDefinition from the non-event element","Redeploy the corrected BPMN XML"],"exampleFix":"<!-- before -->\n<serviceTask id=\"task1\">\n  <flowable:variableListenerEventDefinition variableName=\"v\"/>\n</serviceTask>\n<!-- after -->\n<intermediateCatchEvent id=\"evt1\">\n  <flowable:variableListenerEventDefinition variableName=\"v\"/>\n</intermediateCatchEvent>","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { bpmnXMLConverter.convertToBpmnModel(xmlInput); } catch (FlowableException e) { /* move event definition into an Event element */ }","preventionTips":["Place variableListenerEventDefinition only under Event elements"],"tags":["bpmn","xml-parsing","event-definition"],"backgroundTag":"unsupported-operation","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}