{"record":{"id":"bb97f12fbc129d8d","repo":"quarkusio/quarkus","slug":"quarkus-funqy-export-does-not-match-a-function-bb97f1","errorCode":null,"errorMessage":"quarkus.funqy.export does not match a function: ${export}","messagePattern":"quarkus\\.funqy\\.export does not match a function: (.+?)","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":64,"sourceCode":"                ObjectReader reader = objectMapper.readerFor(javaInputType);\n                invoker.getBindingContext().put(ObjectReader.class.getName(), reader);\n            }\n            if (invoker.hasOutput()) {\n                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","sourceCodeStart":46,"sourceCodeEnd":82,"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#L46-L82","documentation":"At runtime, Funqy's Google Cloud Functions binding resolves the configured quarkus.funqy.export value to a registered function invoker. If the configured name matches no registered function, chooseInvoker throws a RuntimeException naming the bad export value.","triggerScenarios":"quarkus.funqy.export (often set via the FUNQY_EXPORT env var in GCF) contains a name that is not registered — misspelled, renamed, or the class containing the @Funq method is not in the deployment.","commonSituations":"Typo in the FUNQY_EXPORT environment variable; renaming the funq method without updating the export; deploying a jar that lacks the function class.","solutions":["Set quarkus.funqy.export / FUNQY_EXPORT to the exact name of a registered @Funq method","Verify the function class is included in the deployed uber-jar","Remove the export setting if there is only one function"],"exampleFix":"// before (env)\nFUNQY_EXPORT=myFunct\n// after\nFUNQY_EXPORT=myFunction","handlingStrategy":"validation","validationCode":"// verify the export matches a @Funq method before deploy\ngrep -rn \"@Funq\" src/main/java # confirm a method named exactly as FUNQY_EXPORT","typeGuard":null,"tryCatchPattern":"try {\n    binding.init();\n} catch (RuntimeException e) {\n    log.error(\"Check quarkus.funqy.export / FUNQY_EXPORT value\", e);\n}","preventionTips":["Keep FUNQY_EXPORT identical to the @Funq method name","Rename method and export together","Test locally with the same env var before deploying"],"tags":["configuration","google-cloud-functions","funqy","runtime"],"backgroundTag":"invalid-config-value","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"}