{"record":{"id":"a60c8cfec581704a","repo":"ssssssss-team/spider-flow","slug":"functionname","errorCode":null,"errorMessage":"functionName","messagePattern":"functionName","errorType":"exception","errorClass":"NoSuchMethodException","httpStatus":null,"severity":"error","filePath":"spider-flow-core/src/main/java/org/spiderflow/core/script/ScriptManager.java","lineNumber":108,"sourceCode":"        } finally {\n            lock.readLock().unlock();\n        }\n    }\n\n    public static void validScript(String functionName,String parameters,String script) throws Exception {\n        new ScriptEngineManager().getEngineByName(\"nashorn\").eval(concatScript(functionName,parameters,script));\n    }\n\n    public static Object eval(ExpressionTemplateContext context, String functionName, Object ... args) throws ScriptException, NoSuchMethodException {\n        if(\"_eval\".equals(functionName)){\n            if(args == null || args.length != 1){\n                throw new ScriptException(\"_eval必须要有一个参数\");\n            }else{\n                return ExpressionTemplate.create(args[0].toString()).render(context);\n            }\n        }\n        if(scriptEngine == null){\n            throw new NoSuchMethodException(functionName);\n        }\n        try{\n            lock.readLock().lock();\n            return convertObject(((Invocable) scriptEngine).invokeFunction(functionName, args));\n        } finally{\n            lock.readLock().unlock();\n        }\n    }\n\n    private static Object convertObject(Object object){\n        if(object instanceof ScriptObjectMirror){\n            ScriptObjectMirror mirror = (ScriptObjectMirror) object;\n            if(mirror.isArray()){\n                int size = mirror.size();\n                Object[] array = new Object[size];\n                for (int i = 0; i < size; i++) {\n                    array[i] = convertObject(mirror.getSlot(i));\n                }","sourceCodeStart":90,"sourceCodeEnd":126,"githubUrl":"https://github.com/ssssssss-team/spider-flow/blob/c799cca99c7d064673dc79e6ef06a08bbc0e292d/spider-flow-core/src/main/java/org/spiderflow/core/script/ScriptManager.java#L90-L126","documentation":"Sentinel error raised by ScriptManager.eval when the expression invokes a function name that has not been registered in the ScriptManager's function registry (the functions list guarded by containsFunction). The input at fault is functionName — the identifier used in the spider-flow expression does not correspond to any function defined via @Function or otherwise registered, so lookup fails with a ScriptException naming the missing function.","triggerScenarios":"Thrown at spider-flow-core/src/main/java/org/spiderflow/core/script/ScriptManager.java:108 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the function name in the expression matches a registered function (check @Function annotations and package scanning of function classes).","Register the missing function with ScriptManager before executing the flow.","Correct typos or wrong-case function names in the expression template.","Call ScriptManager.containsFunction(functionName) before eval to pre-check availability."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"c799cca99c7d064673dc79e6ef06a08bbc0e292d","analyzedAt":"2026-09-08T13:47:08.225Z","contentChangedAt":"2026-09-08T13:47:08.225Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}