【发布时间】:2021-06-08 05:20:49
【问题描述】:
我们使用 Micronaut AWS 创建了一个 Lambda。
处理程序如下所示:
@Singleton
public class ValidationRequestHandler extends MicronautRequestHandler<S3Event, Integer> {
@Inject private MessageService messageService;
@Override
public Integer execute(S3Event input) {
messageService.init();
[...]
}
}
MessageService 类是这样的:
@Singleton
public class MessageService {
private final SnsClient client;
@Inject
public MessageService(SnsClient client) {
this.client = client;
}
public void init() {
[...]
}
}
在调用 Lambda 时,我们收到以下错误:
java.lang.NullPointerException: java.lang.NullPointerException
NullPointerException 由调用 messageService.init() 产生。进一步调试确认messageService确实是null。
那么我们在这里缺少什么?
项目的gradle.build 如下:
plugins {
id("com.github.johnrengelman.shadow") version "6.1.0"
id("io.micronaut.library") version "1.3.4"
}
version = "1.0.0"
group = "our.project.group"
repositories {
mavenCentral()
}
ext {
micronautAwsVersion = '2.4.0'
junitVersion = '5.7.1'
awsSdkVersion = '2.16.14'
lambdaVersion = '1.2.1'
lambdaEventsVersion = '3.7.0'
mockitoVersion = '3.8.0'
}
micronaut {
testRuntime("junit5")
processing {
incremental(true)
annotations("our.project.group.*")
}
}
dependencies {
implementation("io.micronaut:micronaut-validation")
implementation("io.micronaut:micronaut-runtime")
implementation("javax.annotation:javax.annotation-api")
implementation("io.micronaut.aws:micronaut-function-aws")
implementation group: 'io.micronaut.aws', name: 'micronaut-aws-sdk-v2', version: micronautAwsVersion
implementation group: 'com.amazonaws', name: 'aws-lambda-java-events', version: lambdaEventsVersion
implementation group: 'software.amazon.awssdk', name: 'sns', version: awsSdkVersion
testImplementation("io.micronaut:micronaut-http-client")
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitVersion
testImplementation group: 'org.junit.vintage', name: 'junit-vintage-engine', version: junitVersion
testImplementation group: 'org.mockito', name: 'mockito-core', version: mockitoVersion
}
java {
sourceCompatibility = JavaVersion.toVersion("11")
targetCompatibility = JavaVersion.toVersion("11")
}
jar {
manifest {
attributes (
'Class-Path': configurations.compile.collect {it.getName()}.join(' ')
)
}
from {
configurations.runtimeClasspath.collect {it.isDirectory() ? it : zipTree(it) }
}
dirMode = 0777
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
此外,该项目使用 lombok 以及 mapstruct。为简单起见,我在gradle.build 中省略了它们。
【问题讨论】:
-
与您的问题无关,但仅供参考...我认为您的
@Inject构造函数上的@Inject注释是多余的。
标签: java aws-lambda micronaut