I have implemented a simple AWS lambda application with spring cloud function. When i create labmda function and send the request in AWS then the following error has thrown.
{
"errorMessage": "Error loading class com.benz.aws.lambda.api.handler.OrderHandler: org/springframework/cloud/function/adapter/aws/SpringBootRequestHandler",
"errorType": "java.lang.NoClassDefFoundError"
}
functon package
@Component
public class OrderFunction implements ApplicationContextInitializer<GenericApplicationContext>
{
private OrderDao orderDao;
@Autowired
public OrderFunction(OrderDao orderDao)
{
this.orderDao=orderDao;
}
@Bean
public Function<String,Object> getOrderByName()
{
return name-> {
System.out.println("Hello Benz");
return name;
};
}
@Override
public void initialize(GenericApplicationContext context) {
context.registerBean("getOrderByName", FunctionRegistration.class,
() -> new FunctionRegistration<Function<String,Object>>(getOrderByName())
.type(FunctionType.from(String.class).to(Object.class).getType()));
}
}
handler package
public class OrderHandler extends SpringBootRequestHandler<String,Object> {
}
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-aws</artifactId>
<version>3.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>3.8.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot.experimental</groupId>
<artifactId>spring-boot-thin-layout</artifactId>
<version>${wrapper.version}</version>
</dependency>
</dependencies>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
<finalName>
boot-lambda
</finalName>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<createDependencyReducedPom>
false
</createDependencyReducedPom>
<shadedArtifactAttached>
true
</shadedArtifactAttached>
<shadedClassifierName>
aws
</shadedClassifierName>
</configuration>
</plugin>
</plugins>
</build>
in AWS
I have tried to debug it many ways but didn't work. If there any simple ways to do the above things without extending SpringBootRequestHandler
class