I’m trying to run a lambda function in Java, which accesses an SQS queue. However, I am getting the error below.
{
"errorMessage": "software/amazon/awssdk/core/SdkProtocolMetadata",
"errorType": "java.lang.NoClassDefFoundError",
"stackTrace": [
"software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:42)",
"software.amazon.awssdk.services.s3.DefaultS3ClientBuilder.buildClient(DefaultS3ClientBuilder.java:28)",
"software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder.build(SdkDefaultClientBuilder.java:157)",
...
}
I’m using powertools-large-messages to support large SQS messages. Below is the relevant part of the code where the error occurs.
public class LambdaOutput implements IOutput {
private static final String BUCKET_NAME = System.getenv("BUCKET_NAME");
private final SqsClient sqs;
private final String queueUrl;
public LambdaOutput(String queueUrl) {
this.queueUrl = queueUrl;
final S3Client s3 = S3Client.create(); // ERROR!
final ExtendedClientConfiguration extendedClientConfig = new ExtendedClientConfiguration()
.withPayloadSupportEnabled(s3, BUCKET_NAME);
this.sqs = new AmazonSQSExtendedClient(SqsClient.create(), extendedClientConfig);
}
//...
}
With version 1.x I just use:
final AmazonS3 s3 = AmazonS3ClientBuilder.defaultClient();
it works. But with version 2.x I can’t create an S3 client.
The error appears to be a missing dependency, but even adding the software.amazon.awssdk.core
package, which in theory contains the SdkProtocolMetadata
class, the error persists.
What am I missing here?
Below is the relevant part of my pom.xml:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-events</artifactId>
<version>3.11.6</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.12.744</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-extended-client-lib</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.744</version>
</dependency>
<dependency>
<groupId>software.amazon.lambda</groupId>
<artifactId>powertools-large-messages</artifactId>
<version>1.18.0</version>
</dependency>
</dependencies>