{"record":{"id":"c95d7454cc3b176d","repo":"flowable/flowable-engine","slug":"the-field-language-should-be-set-on-the-tasklist-c95d74","errorCode":null,"errorMessage":"The field 'language' should be set on the TaskListener","messagePattern":"The field 'language' should be set on the TaskListener","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/ScriptTaskListener.java","lineNumber":45,"sourceCode":"\n    private static final long serialVersionUID = -8915149072830499057L;\n\n    protected Expression script;\n\n    protected Expression language;\n\n    protected Expression resultVariable;\n\n    protected boolean autoStoreVariables;\n\n    @Override\n    public void notify(DelegateTask delegateTask) {\n        if (script == null) {\n            throw new IllegalArgumentException(\"The field 'script' should be set on the TaskListener\");\n        }\n\n        if (language == null) {\n            throw new IllegalArgumentException(\"The field 'language' should be set on the TaskListener\");\n        }\n\n        ScriptingEngines scriptingEngines = Context.getProcessEngineConfiguration().getScriptingEngines();\n\n        Object result = scriptingEngines.evaluate(script.getExpressionText(), language.getExpressionText(), delegateTask, autoStoreVariables);\n\n        if (resultVariable != null) {\n            delegateTask.setVariable(resultVariable.getExpressionText(), result);\n        }\n    }\n\n    public void setScript(Expression script) {\n        this.script = script;\n    }\n\n    public void setLanguage(Expression language) {\n        this.language = language;\n    }","sourceCodeStart":27,"sourceCodeEnd":63,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable5-engine/src/main/java/org/activiti/engine/impl/bpmn/listener/ScriptTaskListener.java#L27-L63","documentation":"ScriptTaskListener requires a 'language' field expression identifying the script engine (e.g. javascript, groovy). When the 'script' field is set but 'language' is missing, notify() throws this IllegalArgumentException before evaluating the script.","triggerScenarios":"A ScriptTaskListener configured with a 'script' field but no <activiti:field name='language'> element fires on a task event.","commonSituations":"BPMN XML where the author remembered the script but forgot the language field; renaming/refactoring listener configs that dropped the language element; assuming a default script language exists when none is configured.","solutions":["Add <activiti:field name='language'><activiti:string>javascript</activiti:string></activiti:field> (or groovy, juel, etc.) to the ScriptTaskListener declaration","Verify the script engine name matches a scripting engine registered with the ScriptingEngines of the process engine configuration","Validate the process definition at deploy time to catch missing fields before runtime"],"exampleFix":"// before\n<activiti:field name=\"script\">\n  <activiti:string>println(task.name)</activiti:string>\n</activiti:field>\n// after\n<activiti:field name=\"script\">\n  <activiti:string>println(task.name)</activiti:string>\n</activiti:field>\n<activiti:field name=\"language\">\n  <activiti:string>javascript</activiti:string>\n</activiti:field>","handlingStrategy":"validation","validationCode":"// XML check before deployment\nif (!xml.contains(\"name=\\\"language\\\"\")) {\n  throw new IllegalStateException(\"ScriptTaskListener is missing the 'language' field\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  repositoryService.createDeployment().addClasspathResource(processXml).deploy();\n} catch (IllegalArgumentException e) {\n  // missing language field — fix BPMN config and redeploy\n}","preventionTips":["Always specify 'language' explicitly (javascript/groovy/juel); do not assume a default","Confirm the language name is registered with the engine's ScriptingEngines","Validate BPMN files in CI before deployment"],"tags":["bpmn","task-listener","scripting","configuration"],"backgroundTag":"missing-required-config-field","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}