flowable/flowable-engine · error · FlowableException

Could not find function method for

Error message

Could not find function method for 

What it means

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.

Solutions

  1. Check the expression for typos in prefix and function name
  2. Register the function delegate/resolver exposing that function in the process engine configuration
  3. Verify the backing method exists with the expected signature on the registered function class
  4. Confirm the function name against Flowable's documented built-in functions (e.g. variables:get, vars:exists) for the engine version in use

Example fix

// before (expression in BPMN)
${custom:upperCase(variables.name)}  // no 'custom' resolver registered
// after (engine config)
processEngineConfiguration.setFlowableFunctionResolver(
    new FlowableFunctionResolver() { ... resolves custom:upperCase ... });
Defensive patterns

Strategy: validation

Validate before calling

// validate expression functions before deploying/evaluating
Set<String> registered = engineConfig.getResolvers/delegates -> collect prefix:localName pairs;
if (!registered.contains("custom:upperCase")) {
    throw new IllegalStateException("Function custom:upperCase is not registered in engine config");
}

Type guard

// guard: resolver can resolve the function without throwing
boolean resolvable;
try { functionResolver.resolveFunction(prefix, localName); resolvable = true; }
catch (NoSuchMethodException e) { resolvable = false; }

Try / catch

try {
    evaluate(expressionString);
} catch (FlowableException e) {
    if (e.getMessage() != null && e.getMessage().startsWith("Could not find function method for")) {
        logger.error("Unknown EL function in expression '{}'", expressionString, e);
        // register the delegate or fix the expression
    } else { throw e; }
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11). Data as JSON: /api/errors/dc899282a97212f6. Report an issue: GitHub.

Appendix: source

Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/el/FlowableFunctionMapper.java:46

    protected FlowableFunctionResolver functionResolver;

    public FlowableFunctionMapper(FlowableFunctionResolver functionResolver) {
        setFunctionResolver(functionResolver);

    }

    public void setFunctionResolver(FlowableFunctionResolver functionResolver) {
        this.functionResolver = functionResolver;
    }

    @Override
    public Method resolveFunction(String prefix, String localName) {
        if (functionResolver != null) {
            try {
                return functionResolver.resolveFunction(prefix, localName);
            } catch (NoSuchMethodException e) {
                throw new FlowableException("Could not find function method for " + prefix + ":" + localName, e);
            }
        }
        return null;
    }

}

View on GitHub (pinned to d6d39ce1c6)