quarkus aws lambda函数-CDI在处理程序类中不起作用

时间:2019-06-16 15:43:09

标签: java-ee aws-lambda quarkus

当前,我尝试使用 quarkus 实现 AWS Lambda函数。  问题是我不能在处理程序类中使用cdi。 例如,如果我想注入Greeter类(上面的示例),它总是为空(依赖注入在quarkus中不起作用)。 因此,我在AWS上收到NullPointer异常。

AWS-Lambda-Console上的NullPointerException:

{
  "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> (但我也尝试过使用以前的版本)

lambda处理程序的代码:

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();
  }
}

greeter类是一个非常简单的类,它带有@ApplicationScoped注释:

@ApplicationScoped
public class Greeter {

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

如果有人可以我会很好吗?

1 个答案:

答案 0 :(得分:0)

对于那些也在为这样的问题而苦苦挣扎的人: 确保将处理程序(Resource -> Project -> Properties 下的 template.yml)设置为 io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest。不要忘记您使用的是 Quarkus,因此必须使用 quarkus 的处理程序。