Repository: quarkusio/quarkus
Issue: Amazon LambdaRecorder Handler Discovery fails if handleRequest is in abstract class

**Describe the bug**
If the handleRequest method is implemented in abstract class, then AmazonLambdaRecorder.discoverHandlerMethod fails on [line 88](https://github.com/quarkusio/quarkus/blob/0a7518157ce3fa1ecaf39d62d7b9005ec54f5ff6/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java#L88) with an ArrayIndexOutOfBoundsException.

**Expected behavior**
The handler discovery should include inherited methods or it should produce a better error message, e.g. "No handleRequest method found on class com.ExampleHandler. The handleRequest method should be implemented directly in the handler class. Inherited handler methods are not currently supported."

**Actual behavior**
```
2021-03-05 15:04:02,378 ERROR [io.qua.ama.lam.run.AbstractLambdaPollLoop] (Lambda Thread) Lambda init error: java.lang.IllegalStateException: Interrupted while waiting for another thread to start the application
at io.quarkus.runtime.Application.interruptedOnAwaitStart(Application.java:219)
at io.quarkus.runtime.Application.start(Application.java:75)
at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop.checkQuarkusBootstrapped(AbstractLambdaPollLoop.java:160)
at io.quarkus.amazon.lambda.runtime.AbstractLambdaPollLoop$1.run(AbstractLambdaPollLoop.java:46)
at java.lang.Thread.run(Thread.java:834)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:519)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)

2021-03-05 15:04:02,383 ERROR [io.qua.run.Application] (main) Failed to start application (with profile prod): java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder.discoverHandlerMethod(AmazonLambdaRecorder.java:88)
at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder.setHandlerClass(AmazonLambdaRecorder.java:47)
at io.quarkus.amazon.lambda.runtime.AmazonLambdaRecorder.chooseHandlerClass(AmazonLambdaRecorder.java:140)
at io.quarkus.deployment.steps.AmazonLambdaProcessor$recordHandlerClass-1619263778.deploy_0(AmazonLambdaProcessor$recordHandlerClass-1619263778.zig:196)
at io.quarkus.deployment.steps.AmazonLambdaProcessor$recordHandlerClass-1619263778.deploy(AmazonLambdaProcessor$recordHandlerClass-1619263778.zig:40)
at io.quarkus.runtime.Application.start(Application.java:90)
at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:100)
at io.quarkus.runtime.Quarkus.run(Quarkus.java:66)

```

**To Reproduce**
This was with a Graal Native custom Lambda runtime created following this guide: https://quarkus.io/guides/amazon-lambda
When the handleRequest method is implemented in an abstract class, and is not implemented in the concrete class, the lookup fails with the above error. 

**Work around**
Don't use an abstract handler. Yet another reason to prefer composition, I guess.

Changed files:
extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java

diff --git a/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java b/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java
index 959399a01ee..025873490e4 100644
--- a/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java
+++ b/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java
@@ -84,9 +84,12 @@ private Method discoverHandlerMethod(Class<? extends RequestHandler<?, ?>> handl
                 }
             }
         }
-        if (method == null) {
+        if (method == null && methods.length > 0) {
             method = methods[0];
         }
+        if (method == null) {
+            throw new RuntimeException("Unable to find a method which handles request on handler class " + handlerClass);
+        }
         return method;
     }