【问题标题】:AWS lambda is not able to find the class that is given in handlerAWS lambda 无法找到处理程序中给出的类
【发布时间】:2018-11-29 15:08:49
【问题描述】:

我编写了一个简单的 java 程序,它将接受一个 JSON 格式的 Person 对象并返回一个字符串消息。依赖项由 Maven 维护,以下是 pom.xml 中包含的所有依赖项

aws-lambda-java-core
maven-shade-plugin

除了依赖项之外,我还包含maven-shade-plugin 作为插件,并以package shade:shade 为目标运行了maven 构建。成功构建后,我将 app-1.0-SNAPSHOT-shaded.jar 文件部署到我创建的 lambda 函数中,当我测试此函数时,我得到以下响应并且无法解决问题。

{ "errorMessage": "Class not found: com.techm.nimbus.Handler", "errorType": "java.lang.ClassNotFoundException" }

下面是实现RequestHandler接口的类

package com.techm.nimbus;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
public class Handler implements RequestHandler<Person, String>{

    public String handleRequest(Person input, Context context) {
        return "Got the message";
    }
}

并且 lambda 函数的处理程序的值为 com.techm.nimbus.Handler::handleRequest

【问题讨论】:

  • 您能否提供一个重现您的错误的代码?
  • @statut 添加了代码

标签: java maven amazon-web-services aws-lambda


【解决方案1】:

根据我不那么广泛的经验,您可以检查一些事情:

  1. 检查上传的包的大小。当我没有正确构建 maven 项目时,我遇到了这个错误,当我意识到我在 S3 中检查文件时,它小于 1MB,而(在我的情况下)通常约为 70MB。所以它没有正确构建。

  2. 我个人使用 eclipse:eclipse 作为目标,也许你可以尝试一下,看看它是否有效。

  3. 检查 lambda 是否指向正确版本的打包代码,以及是否应配置任何 VPC。

希望对你有帮助。

【讨论】:

  • 代码的打包大小小于 10 MB,所以我认为没有必要将其上传到 S3 或其他地方。我不明白您所说的正确版本是什么意思,该 lambda 代码只有一个版本。
  • 我在 Eclipse 上使用 Java 编程,所以我使用 Eclipse 插件将 lambda 上传到 S3。然后我运行代码(在我的例子中,调用我的 API),然后检查日志。过去,当我使用错误的代码版本(不同的 git 分支,或者打包没有占用所有库,因此项目太轻)完成代码上传时,我发现了您的错误。我认为值得一试评论这方面。
【解决方案2】:

验证应用程序是否已正确构建。您还可以使用“安装阴影:阴影”命令来构建项目。 确保 aws 控制台中的配置指向 Lambda 代码的确切类和方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2019-02-08
    • 2016-08-06
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多