{"record":{"id":"6544be67eff942cc","repo":"quarkusio/quarkus","slug":"unable-to-find-a-concrete-handlerequest-method-on","errorCode":null,"errorMessage":"Unable to find a concrete handleRequest method on handler class <handlerClass.name()>","messagePattern":"Unable to find a concrete handleRequest method on handler class <handlerClass\\.name\\(\\)>","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/amazon-lambda/deployment/src/main/java/io/quarkus/amazon/lambda/deployment/RequestHandlerJandexUtil.java","lineNumber":35,"sourceCode":"\npublic class RequestHandlerJandexUtil {\n\n    private static final DotName REQUEST_HANDLER = DotName.createSimple(RequestHandler.class);\n    private static final DotName OBJECT = DotName.createSimple(\"java.lang.Object\");\n    private static final DotName COLLECTION = DotName.createSimple(Collection.class);\n\n    private RequestHandlerJandexUtil() {\n    }\n\n    public static RequestHandlerJandexDefinition discoverHandlerMethod(String handlerClassName, IndexView index) {\n        ClassInfo handlerClass = index.getClassByName(handlerClassName);\n        if (handlerClass == null) {\n            throw new IllegalArgumentException(\"RequestHandler class not found in the index: \" + handlerClassName);\n        }\n\n        MethodInfo concreteHandleRequestMethod = findConcreteHandleRequestMethod(handlerClass, index);\n        if (concreteHandleRequestMethod == null) {\n            throw new IllegalStateException(\n                    \"Unable to find a concrete handleRequest method on handler class \" + handlerClass.name());\n        }\n\n        Map<String, Type> typeMap = new HashMap<>();\n        InputOutputTypes inputOutputTypes = resolveInputOutputTypes(handlerClass.name(), index, typeMap);\n        if (isUnresolved(inputOutputTypes)) {\n            throw new IllegalStateException(\n                    \"Unable to resolve input and output types for handler class \" + handlerClass.name());\n        }\n\n        return new RequestHandlerJandexDefinition(handlerClass, concreteHandleRequestMethod, inputOutputTypes);\n    }\n\n    private static MethodInfo findConcreteHandleRequestMethod(ClassInfo handlerClass, IndexView index) {\n        ClassInfo currentClass = handlerClass;\n\n        // Look for implementations of the method in the class hierarchy\n        while (currentClass != null && !OBJECT.equals(currentClass.name())) {","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/amazon-lambda/deployment/src/main/java/io/quarkus/amazon/lambda/deployment/RequestHandlerJandexUtil.java#L17-L53","documentation":"Thrown by RequestHandlerJandexUtil.discoverHandlerMethod when the handler class found in the Jandex index does not expose a concrete handleRequest method to wire the Lambda entry point to. The util walks the class hierarchy (up to java.lang.Object and collection-based supertypes) looking for the RequestHandler.handleRequest implementation; if every candidate is abstract or absent, there is no method the generated Lambda glue code can call, so the build aborts with the offending class name.","triggerScenarios":"discoverHandlerMethod calls findConcreteHandleRequestMethod(handlerClass, index) and receives null — the class (and its hierarchy within the index) never implements handleRequest.","commonSituations":"Class implements the handler interface as a lambda/anonymous form the index cannot resolve; class only inherits from an abstract base that is not in the index; abstract class registered as the handler itself; implementing the wrong handleRequest signature.","solutions":["Implement a concrete (non-abstract) handleRequest method with the exact signature in the handler class or a superclass present in the index","Ensure the abstract base class with the concrete method is in the same indexed module or an indexed dependency","Make sure the method signature matches handleRequest(I input, Context context) returning O with correct parameter types"],"exampleFix":"// before\npublic abstract class Base implements RequestHandler<String,String> { }\n// after\npublic class MyHandler extends Base {\n  @Override\n  public String handleRequest(String input, Context context) { return input; }\n}","handlingStrategy":"validation","validationCode":"// ensure concrete implementation exists\nClass<?> c = Class.forName(\"com.acme.MyHandler\");\nif (java.lang.reflect.Modifier.isAbstract(c.getModifiers())) throw new IllegalStateException(\"Handler class must not be abstract\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Implement handleRequest concretely in the handler class or an indexed superclass","Match the exact handleRequest(I, Context) signature","Avoid anonymous/lambda handler implementations for configured handlers","Keep the hierarchy within indexed modules"],"tags":["quarkus","amazon-lambda","jandex","build"],"backgroundTag":"missing-handlerequest-method","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"}