{"record":{"id":"84be507b61c47c9e","repo":"quarkusio/quarkus","slug":"quarkus-funqy-export-does-not-match-a-function","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-amazon-lambda/runtime/src/main/java/io/quarkus/funqy/lambda/FunqyLambdaBindingRecorder.java","lineNumber":91,"sourceCode":"            if (invoker.hasInput()) {\n                JavaType javaInputType = objectMapper.constructType(invoker.getInputType());\n                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\n    public void chooseInvoker() {\n        // this is done at Runtime so that we can change it with an environment variable.\n        if (runtimeConfig.getValue().export().isPresent()) {\n            invoker = FunctionRecorder.registry.matchInvoker(runtimeConfig.getValue().export().get());\n            if (invoker == null) {\n                throw new RuntimeException(\n                        \"quarkus.funqy.export does not match a function: \" + runtimeConfig.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\n        ObjectReader objectReader = null;\n        if (invoker.hasInput()) {\n            objectReader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());\n\n            if (amazonBuildTimeConfig.advancedEventHandling().enabled()) {\n                // We create a copy, because the mapper will be reconfigured for the advanced event handling,\n                // and we do not want to adjust the ObjectMapper, which is available in arc context.","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/funqy/funqy-amazon-lambda/runtime/src/main/java/io/quarkus/funqy/lambda/FunqyLambdaBindingRecorder.java#L73-L109","documentation":"Funqy Amazon Lambda must know which registered function to bind to the Lambda handler. When quarkus.funqy.export is set at runtime, the registry looks up a matching invoker; if the name matches no function, this RuntimeException is thrown.","triggerScenarios":"quarkus.funqy.export is set to a value that does not equal any registered Funqy function name (function names come from method names or @Funq naming).","commonSituations":"Typo in the export value; renaming a function method without updating quarkus.funqy.export; export set via env var in Lambda console pointing at a removed function; case mismatch.","solutions":["Set quarkus.funqy.export to the exact name of an existing @Funq function (usually the method name)","List functions in the app (grep for @Funq) and align the export value","Remove quarkus.funqy.export if there is only one function — it is auto-selected","Rebuild/redeploy after renaming functions so the registry matches config"],"exampleFix":"// before\nquarkus.funqy.export=myFuntion\n// after\nquarkus.funqy.export=myFunction","handlingStrategy":"validation","validationCode":"String export = System.getenv(\"QUARKUS_FUNQY_EXPORT\");\nif (export != null && !registeredFunctionNames.contains(export)) {\n    throw new IllegalStateException(\"quarkus.funqy.export '\" + export + \"' matches no function\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    handler.handleRequest(input, output, context);\n} catch (RuntimeException e) {\n    if (e.getMessage().startsWith(\"quarkus.funqy.export\")) log.error(\"Check QUARKUS_FUNQY_EXPORT value\");\n    throw e;\n}","preventionTips":["Keep export value identical to the @Funq method name","Update Lambda env vars whenever functions are renamed","Add a build-time check that the export matches a registered function"],"tags":["funqy","aws-lambda","configuration","serverless"],"backgroundTag":"function-not-found","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}