лямбда-функция quarkus aws - cdi не работает в классе-обработчике

в настоящее время я пытаюсь реализовать функцию AWS Lambda с помощью quarkus. Проблема в том, что я не могу использовать cdi в своем классе обработчика. Например, если я хочу внедрить класс Greeter (пример выше), он всегда будет пустым (внедрение зависимостей здесь не работает с quarkus). Поэтому я получаю исключение NullPointer на AWS.

NullPointerException на AWS-Lambda-Console:

{
  "errorMessage": "java.lang.NullPointerException",
  "errorType": "java.lang.NullPointerException",
  "stackTrace": [
    "com.aws.vehicles.constructibility.boundary.ConstructibilityLambdaHandler.handleRequest(ConstructibilityLambdaHandler.java:24)",
    "sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)",
    "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
    "java.lang.reflect.Method.invoke(Method.java:498)"
  ]
}

Я использую следующую версию quarkus: <quarkus.version>0.16.1</quarkus.version> (но я пробовал ее и с предыдущими версиями)

Код лямбда-обработчика:

public class MyLambdaHandler implements RequestHandler<SimpleRequest, String> {

  private static final Logger LOGGER = Logger.getLogger(MyLambdaHandler.class.getName());

  @Inject
  Greeter greeter;

  @Override
  public String handleRequest(SimpleRequest simpleRequest, Context context) {
    return greeter.sayGoodMorning();
  }
}

Класс приветствующего - это очень простой класс, аннотированный с помощью @ApplicationScoped:

@ApplicationScoped
public class Greeter {

  public String sayGoodMorning(){
    return "good morning, hackers :)";
  }
}

Было бы очень хорошо, если бы кто-нибудь мог мне?


person Mojo    schedule 16.06.2019    source источник
comment
Я думаю, вы должны аннотировать MyLambdaHandler с помощью @ApplicationScoped   -  person Alexandre Cartapanis    schedule 16.06.2019
comment
привет Александр, нет, не помогло :(   -  person Mojo    schedule 16.06.2019
comment
У вас есть файл beans.xml? Что в нем?   -  person Steve C    schedule 18.06.2019
comment
привет, мне это разъяснено. Получил поддержку от Quarkus. Причина в том, что CDI в обработчике лямбда aws в quarkus работает только в том случае, если вы используете собственный образ. Для собственного образа требуется GraalVM, которая в настоящее время поддерживается только для Linux и Mac.   -  person Mojo    schedule 19.06.2019


Ответы (1)


Для тех, кто также борется с такой проблемой: не забудьте установить Handler (template.yml в разделе Resource - ›Project -› Properties) на io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler :: handleRequest. Не забывайте, что вы используете Quarkus, поэтому необходимо использовать обработчик quarkus.

person Bence    schedule 11.02.2021