{"record":{"id":"40377f8dd8b45e34","repo":"flowable/flowable-engine","slug":"only-argcount-arguments-were-provided-for-a-l","errorCode":null,"errorMessage":"Only '${argCount}' arguments were provided for a lambda expression that requires at least '${formalParamCount}''","messagePattern":"Only '(.+?)' arguments were provided for a lambda expression that requires at least '(.+?)''","errorType":"exception","errorClass":"ELException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/LambdaExpression.java","lineNumber":57,"sourceCode":"    }\n\n    @SuppressWarnings(\"null\") // args[i] can't be null due to earlier checks\n    public Object invoke(ELContext context, Object... args) throws ELException {\n\n        Objects.requireNonNull(context, \"context is null\");\n\n        int formalParamCount = 0;\n        if (formalParameters != null) {\n            formalParamCount = formalParameters.size();\n        }\n\n        int argCount = 0;\n        if (args != null) {\n            argCount = args.length;\n        }\n\n        if (formalParamCount > argCount) {\n            throw new ELException(\"Only '\" + argCount + \"' arguments were provided for a lambda expression that requires at least '\" + formalParamCount + \"''\");\n        }\n\n        // Build the argument map\n        // Start with the arguments from any outer expressions so if there is\n        // any overlap the local arguments have priority\n        Map<String, Object> lambdaArguments = new HashMap<>(nestedArguments);\n        for (int i = 0; i < formalParamCount; i++) {\n            lambdaArguments.put(formalParameters.get(i), args[i]);\n        }\n\n        context.enterLambdaScope(lambdaArguments);\n\n        try {\n            Object result = expression.getValue(context);\n            // Make arguments from this expression available to any nested\n            // expression\n            if (result instanceof LambdaExpression) {\n                ((LambdaExpression) result).nestedArguments.putAll(lambdaArguments);","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/javax/el/LambdaExpression.java#L39-L75","documentation":"Arity guard in LambdaExpression.invoke: fewer arguments were passed to an EL lambda expression than it has formal parameters (lambdas are not curried beyond their declared params here), so invocation is rejected before evaluation.","triggerScenarios":"Calling lambdaExpression.invoke(o1) for a lambda declared with two or more parameters, or evaluating an EL lambda expression like x -> y -> x+y with insufficient arguments.","commonSituations":"Programmatic EL evaluation of lambdas where argument arrays are built dynamically; expression changes in config adding parameters without updating call sites.","solutions":["Pass one argument per declared formal parameter of the lambda","Provide defaulting logic in the expression if optional arguments are needed"],"exampleFix":"// before\nexpr.invoke(new Object[]{5}); // lambda declared (a,b)\n// after\nexpr.invoke(new Object[]{5, 10});","handlingStrategy":"validation","validationCode":"if (args == null || args.length < lambda.getFormalParamCount()) {\n  throw new IllegalArgumentException(\"Insufficient lambda arguments\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  return lambda.invoke(args);\n} catch (ELException e) {\n  throw new IllegalArgumentException(\"Lambda called with too few arguments\", e);\n}","preventionTips":["Match invoke() argument count to the lambda's declared parameters","Pad missing arguments with nulls/defaults at call sites","Cover lambda expressions with evaluation tests"],"tags":["el","lambda","argument-count","flowable"],"backgroundTag":"missing-required-argument","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"}