{"record":{"id":"8c42999e68beb4bb","repo":"quarkusio/quarkus","slug":"there-are-no-functions-to-process-lambda-8c4299","errorCode":null,"errorMessage":"There are no functions to process lambda","messagePattern":"There are no functions to process lambda","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/funqy/funqy-google-cloud-functions/runtime/src/main/java/io/quarkus/funqy/gcp/functions/FunqyCloudFunctionsBindingRecorder.java","lineNumber":68,"sourceCode":"                JavaType javaOutputType = objectMapper.constructType(invoker.getOutputType());\n                ObjectWriter writer = objectMapper.writerFor(javaOutputType);\n                invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);\n            }\n        }\n\n        FunctionConstructor.CONTAINER = bc;\n    }\n\n    public void chooseInvoker() {\n        // this is done at Runtime so that we can change it with an environment variable.\n        if (config.getValue().export().isPresent()) {\n            invoker = FunctionRecorder.registry.matchInvoker(config.getValue().export().get());\n            if (invoker == null) {\n                throw new RuntimeException(\n                        \"quarkus.funqy.export does not match a function: \" + config.getValue().export().get());\n            }\n        } else if (FunctionRecorder.registry.invokers().size() == 0) {\n            throw new RuntimeException(\"There are no functions to process lambda\");\n\n        } else if (FunctionRecorder.registry.invokers().size() > 1) {\n            throw new RuntimeException(\"Too many functions.  You need to set quarkus.funqy.export\");\n        } else {\n            invoker = FunctionRecorder.registry.invokers().iterator().next();\n        }\n        if (invoker.hasInput()) {\n            reader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());\n        }\n        if (invoker.hasOutput()) {\n            writer = (ObjectWriter) invoker.getBindingContext().get(ObjectWriter.class.getName());\n        }\n    }\n\n    /**\n     * Handle RawBackgroundFunction\n     *\n     * @param event","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/funqy/funqy-google-cloud-functions/runtime/src/main/java/io/quarkus/funqy/gcp/functions/FunqyCloudFunctionsBindingRecorder.java#L50-L86","documentation":"Funqy's Google Cloud Functions binding throws RuntimeException when quarkus.funqy.export is unset and the function registry contains zero invokers, i.e. no @Funq functions were found to process requests.","triggerScenarios":"chooseInvoker runs at startup with no export configured and FunctionRecorder.registry.invokers() is empty — the application contains no @Funq methods or the beans defining them were never registered.","commonSituations":"Deploying a project with no funq methods; missing funqy dependency/bean discovery so functions never register; deploying an empty scaffold project by mistake.","solutions":["Add at least one class with a @Funq method plus the funqy-google-cloud-functions dependency","Verify the function class is a discovered CDI bean in a scanned package","Do not rely on the export setting when no functions exist"],"exampleFix":"// before: no functions in project\n// after\nimport io.quarkus.funqy.Funq;\npublic class GreetingResource {\n    @Funq\n    public String greet(String name) { return \"Hello \" + name; }\n}","handlingStrategy":"validation","validationCode":"// before deploy, confirm at least one @Funq method exists\ngrep -rn \"@Funq\" src/main/java || echo \"no funq functions\"","typeGuard":null,"tryCatchPattern":"try {\n    binding.init();\n} catch (RuntimeException e) {\n    log.error(\"No @Funq functions registered\", e);\n}","preventionTips":["Ensure the project actually contains @Funq methods","Verify funqy dependencies and CDI bean discovery","Smoke-test the jar locally before GCF deploy"],"tags":["configuration","google-cloud-functions","funqy","runtime"],"backgroundTag":"no-functions-registered","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}