{"record":{"id":"78e0993d61b9685d","repo":"quarkusio/quarkus","slug":"multiple-handler-classes-either-specify-the-quark","errorCode":null,"errorMessage":"Multiple handler classes, either specify the quarkus.lambda.handler property, or make sure there is only a single io.quarkus.amazon.lambda.runtime.RequestHandler or, io.quarkus.amazon.lambda.runtime.RequestStreamHandler implementation in the deployment","messagePattern":"Multiple handler classes, either specify the quarkus\\.lambda\\.handler property, or make sure there is only a single io\\.quarkus\\.amazon\\.lambda\\.runtime\\.RequestHandler or, io\\.quarkus\\.amazon\\.lambda\\.runtime\\.RequestStreamHandler implementation in the deployment","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java","lineNumber":129,"sourceCode":"        Class<? extends RequestStreamHandler> handlerStreamClass = null;\n        if (runtimeConfig.getValue().handler().isPresent()) {\n            handlerDefinition = namedHandlerDefinitions.get(runtimeConfig.getValue().handler().get());\n            handlerStreamClass = namedStreamHandlerClasses.get(runtimeConfig.getValue().handler().get());\n\n            if (handlerDefinition == null && handlerStreamClass == null) {\n                String errorMessage = \"Unable to find handler class with name \" + runtimeConfig.getValue().handler().get()\n                        + \" make sure there is a handler class in the deployment with the correct @Named annotation\";\n                throw new IllegalStateException(errorMessage);\n            }\n        } else {\n            int unnamedTotal = unnamedHandlerDefinitions.size() + unnamedStreamHandlerClasses.size();\n            int namedTotal = namedHandlerDefinitions.size() + namedStreamHandlerClasses.size();\n\n            if (unnamedTotal > 1 || namedTotal > 1 || (unnamedTotal > 0 && namedTotal > 0)) {\n                String errorMessage = \"Multiple handler classes, either specify the quarkus.lambda.handler property, or make sure there is only a single \"\n                        + RequestHandler.class.getName() + \" or, \" + RequestStreamHandler.class.getName()\n                        + \" implementation in the deployment\";\n                throw new IllegalStateException(errorMessage);\n            } else if (unnamedTotal == 0 && namedTotal == 0) {\n                String errorMessage = \"Unable to find handler class, make sure your deployment includes a single \"\n                        + RequestHandler.class.getName() + \" or, \" + RequestStreamHandler.class.getName() + \" implementation\";\n                throw new IllegalStateException(errorMessage);\n            } else if ((unnamedTotal + namedTotal) == 1) {\n                if (!unnamedHandlerDefinitions.isEmpty()) {\n                    handlerDefinition = unnamedHandlerDefinitions.get(0);\n                } else if (!namedHandlerDefinitions.isEmpty()) {\n                    handlerDefinition = namedHandlerDefinitions.values().iterator().next();\n                } else if (!unnamedStreamHandlerClasses.isEmpty()) {\n                    handlerStreamClass = unnamedStreamHandlerClasses.get(0);\n                } else if (!namedStreamHandlerClasses.isEmpty()) {\n                    handlerStreamClass = namedStreamHandlerClasses.values().iterator().next();\n                }\n            }\n        }\n\n        if (handlerStreamClass != null) {","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java#L111-L147","documentation":"chooseHandlerClass throws this when no handler is selected via quarkus.lambda.handler and the deployment contains more than one candidate — multiple unnamed handlers, multiple named handlers, or a mix — so the recorder cannot pick one unambiguously.","triggerScenarios":"Deploying two or more RequestHandler/RequestStreamHandler implementations without setting quarkus.lambda.handler.","commonSituations":"Projects accumulating several Lambda handlers in one deployment; adding a second handler for a new function while sharing the artifact.","solutions":["Set quarkus.lambda.handler to the exact handler bean name (or @Named value) of the intended handler","Mark handlers with @Named and reference the chosen name in config","Split handlers into separate deployments if each Lambda needs its own artifact"],"exampleFix":"// before\n// two handlers, no config\n// after\n# application.properties\nquarkus.lambda.handler=OrderHandler","handlingStrategy":"validation","validationCode":"int candidates = countHandlerImplementations();\nif (candidates > 1 && config.getValue(\"quarkus.lambda.handler\") == null) {\n    throw new IllegalStateException(\"Set quarkus.lambda.handler when deploying multiple handlers\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always set quarkus.lambda.handler in multi-handler deployments","Use @Named on every handler for explicit selection","Split unrelated handlers into separate artifacts"],"tags":["configuration","ambiguous-bean","cdi","amazon-lambda"],"backgroundTag":"ambiguous-bean-definition","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"}