Reputation: 1806
I am getting following exception and not able to figure out what exactly is going wrong?
START RequestId: 6e561b8c-2fd0-11e8-8bd0-edfc4c9a75aa Version: $LATEST
com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder: **java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder**
at com.tarkshala.dynamodb.StudentDAOImpl.create(StudentDAOImpl.java:12)
at com.tarkshala.lambda.StudentController.handleRequest(StudentController.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more
My pom.xml looks like below:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.301</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.0</version>
</dependency>
Even my IDE is resolving class defination then why it is creating problem on runtime?
Upvotes: 1
Views: 2792
Reputation: 55720
From the error message it looks like you are trying to query DynamoDb from a Lambda function implemented in Java.
When using Java based AWS Lambda functions your function code must contain all dependencies. You can’t rely on Lambda to resolve your dependencies from a pom.xml, the way a local system using Maven would.
The most common way is to generate a single JAR (commonly called a “fat JAR”) containing your code and all dependencies required by your code (typically everything in the classpath that would be required to execute your code).
Once you get the dependencies deployed to Lambda along with your code, things should start working as you expect.
See: more info about how to generate a fat JAR using a Maven plugin
Upvotes: 3