{"record":{"id":"dc899282a97212f6","repo":"flowable/flowable-engine","slug":"could-not-find-function-method-for","errorCode":null,"errorMessage":"Could not find function method for ","messagePattern":"Could not find function method for ","errorType":"exception","errorClass":"FlowableException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/FlowableFunctionMapper.java","lineNumber":46,"sourceCode":"\n    protected FlowableFunctionResolver functionResolver;\n\n    public FlowableFunctionMapper(FlowableFunctionResolver functionResolver) {\n        setFunctionResolver(functionResolver);\n\n    }\n\n    public void setFunctionResolver(FlowableFunctionResolver functionResolver) {\n        this.functionResolver = functionResolver;\n    }\n\n    @Override\n    public Method resolveFunction(String prefix, String localName) {\n        if (functionResolver != null) {\n            try {\n                return functionResolver.resolveFunction(prefix, localName);\n            } catch (NoSuchMethodException e) {\n                throw new FlowableException(\"Could not find function method for \" + prefix + \":\" + localName, e);\n            }\n        }\n        return null;\n    }\n\n}\n","sourceCodeStart":28,"sourceCodeEnd":53,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/FlowableFunctionMapper.java#L28-L53","documentation":"FlowableFunctionMapper.resolveFunction() delegates to the configured FlowableFunctionResolver; when the resolver throws NoSuchMethodException, it is rethrown as FlowableException('Could not find function method for prefix:localName'). It means an EL expression referenced a function that no registered function class provides with a matching method.","triggerScenarios":"An expression like ${prefix:localName(...)} is evaluated (e.g. in BPMN conditions, listener expressions) and the functionResolver cannot resolve a Method for that prefix/localName pair.","commonSituations":"Typo in function name or prefix in the process XML/expression; custom function not registered in the engine configuration (flowableFunctionResolvers / function delegates missing); function removed or renamed after a Flowable version upgrade.","solutions":["Check the expression for typos in prefix and function name","Register the function delegate/resolver exposing that function in the process engine configuration","Verify the backing method exists with the expected signature on the registered function class","Confirm the function name against Flowable's documented built-in functions (e.g. variables:get, vars:exists) for the engine version in use"],"exampleFix":"// before (expression in BPMN)\n${custom:upperCase(variables.name)}  // no 'custom' resolver registered\n// after (engine config)\nprocessEngineConfiguration.setFlowableFunctionResolver(\n    new FlowableFunctionResolver() { ... resolves custom:upperCase ... });","handlingStrategy":"validation","validationCode":"// validate expression functions before deploying/evaluating\nSet<String> registered = engineConfig.getResolvers/delegates -> collect prefix:localName pairs;\nif (!registered.contains(\"custom:upperCase\")) {\n    throw new IllegalStateException(\"Function custom:upperCase is not registered in engine config\");\n}","typeGuard":"// guard: resolver can resolve the function without throwing\nboolean resolvable;\ntry { functionResolver.resolveFunction(prefix, localName); resolvable = true; }\ncatch (NoSuchMethodException e) { resolvable = false; }","tryCatchPattern":"try {\n    evaluate(expressionString);\n} catch (FlowableException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"Could not find function method for\")) {\n        logger.error(\"Unknown EL function in expression '{}'\", expressionString, e);\n        // register the delegate or fix the expression\n    } else { throw e; }\n}","preventionTips":["Register all custom function delegates/resolvers in the process engine configuration before deployment","Lint BPMN XML expressions against the set of registered function names","Check Flowable version release notes: built-in function names (variables:..., vars:...) change between versions"],"tags":["el-functions","expression-language","function-not-found","flowable"],"backgroundTag":"resource-not-found","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"}