{"record":{"id":"541177c913286acd","repo":"flowable/flowable-engine","slug":"no-tasklistener-implementation-found-for-implement","errorCode":null,"errorMessage":"No TaskListener implementation found for implementationType=\" + listener.getImplementationType() + \" implementation=\" + listener.getImplementation()","messagePattern":"No TaskListener implementation found for implementationType=\" \\+ listener\\.getImplementationType\\(\\) \\+ \" implementation=\" \\+ listener\\.getImplementation\\(\\)","errorType":"validation","errorClass":"FlowableIllegalStateException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/listener/ListenerNotificationHelper.java","lineNumber":162,"sourceCode":"        BaseTaskListener taskListener = null;\n\n        ListenerFactory listenerFactory = CommandContextUtil.getProcessEngineConfiguration().getListenerFactory();\n        if (ImplementationType.IMPLEMENTATION_TYPE_CLASS.equalsIgnoreCase(listener.getImplementationType())) {\n            taskListener = listenerFactory.createClassDelegateTaskListener(listener);\n        } else if (ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION.equalsIgnoreCase(listener.getImplementationType())) {\n            taskListener = listenerFactory.createExpressionTaskListener(listener);\n        } else if (ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION.equalsIgnoreCase(listener.getImplementationType())) {\n            if (listener.getOnTransaction() != null) {\n                taskListener = listenerFactory.createTransactionDependentDelegateExpressionTaskListener(listener);\n            } else {\n                taskListener = listenerFactory.createDelegateExpressionTaskListener(listener);\n            }\n        } else if (ImplementationType.IMPLEMENTATION_TYPE_INSTANCE.equalsIgnoreCase(listener.getImplementationType())) {\n            taskListener = (TaskListener) listener.getInstance();\n        } else if (ImplementationType.IMPLEMENTATION_TYPE_SCRIPT.equalsIgnoreCase(listener.getImplementationType())) {\n            taskListener = listenerFactory.createScriptTypeTaskListener(listener);\n        } else {\n            throw new FlowableIllegalStateException(\n                    \"No TaskListener implementation found for implementationType=\" + listener.getImplementationType() + \" implementation=\"\n                            + listener.getImplementation());\n        }\n        return taskListener;\n    }\n\n    protected void planTransactionDependentTaskListener(DelegateExecution execution, TransactionDependentTaskListener taskListener, FlowableListener listener) {\n        Map<String, Object> executionVariablesToUse = execution.getVariables();\n        CustomPropertiesResolver customPropertiesResolver = createCustomPropertiesResolver(listener);\n        Map<String, Object> customPropertiesMapToUse = invokeCustomPropertiesResolver(execution, customPropertiesResolver);\n\n        TransactionDependentTaskListenerExecutionScope scope = new TransactionDependentTaskListenerExecutionScope(\n                execution.getProcessInstanceId(), execution.getId(), (Task) execution.getCurrentFlowElement(), executionVariablesToUse, customPropertiesMapToUse);\n        addTransactionListener(listener, new ExecuteTaskListenerTransactionListener(taskListener, scope,\n                        CommandContextUtil.getProcessEngineConfiguration().getCommandExecutor()));\n    }\n\n    protected CustomPropertiesResolver createCustomPropertiesResolver(FlowableListener listener) {","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine/src/main/java/org/flowable/engine/impl/bpmn/listener/ListenerNotificationHelper.java#L144-L180","documentation":"createTaskListener instantiates a TaskListener from a FlowableListener based on its implementationType (class, expression, delegateExpression, instance, script). If the type matches none of the known implementation types, it throws FlowableIllegalStateException because no factory path can build a listener.","triggerScenarios":"A task listener is registered with an implementationType other than class/expression/delegateExpression/instance/script (e.g. misspelled type string in XML, or a listener built programmatically with an unsupported/empty implementation type).","commonSituations":"Typo like implentation=\"class\" or implementationType=\"javaclass\" in BPMN XML; custom tooling writing listener definitions with a wrong type constant; version drift where a new implementation type isn't handled by this engine version.","solutions":["Correct the implementationType to one of: class, expression, delegateExpression, instance, script","If using XML, fix the flowable:class / flowable:expression / flowable:delegateExpression attribute so the parser infers the right type","Check the Flowable version — older XML with non-standard types may need migration"],"exampleFix":"// before\n<flowable:taskListener event=\"create\" implentation=\"com.example.MyListener\" />\n// after\n<flowable:taskListener event=\"create\" class=\"com.example.MyListener\" />","handlingStrategy":"validation","validationCode":"Set<String> valid = Set.of(\"class\",\"expression\",\"delegateExpression\",\"instance\",\"script\");\nif (!valid.contains(listener.getImplementationType())) throw new IllegalStateException(\"bad implementationType: \" + listener.getImplementationType());","typeGuard":null,"tryCatchPattern":"try {\n    repositoryService.createDeployment().addClasspathResource(p).deploy();\n} catch (FlowableIllegalStateException e) {\n    if (e.getMessage().contains(\"No TaskListener implementation found\")) log.error(\"Unsupported listener implementationType\");\n}","preventionTips":["Only use the five supported implementation types","Prefer XML attributes (flowable:class/expression/delegateExpression) so the parser sets the type","Pin listener builder constants from Flowable API instead of hand-written strings"],"tags":["bpmn","task-listener","invalid-enum-value"],"backgroundTag":"invalid-enum-value","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}