Java v2 SDK Exception when Waiting for SES Identity

0

I'm using the Java SDK version 2.17.116. In my code, I'm calling:

            SES_CLIENT.verifyEmailIdentity(
                VerifyEmailIdentityRequest
                    .builder()
                    .emailAddress(eMailAddress)
                    .build()
            );

            // wait 5 seconds for the identity to be created
            Thread.sleep(5000);

            SES_CLIENT.waiter().waitUntilIdentityExists(
                GetIdentityVerificationAttributesRequest
                    .builder()
                    .identities(eMailAddress)
                    .build()
            );

But that is throwing the following exception on the call to waitUntilIdentityExists:

java.lang.IllegalArgumentException: Unsupported value type: class java.util.Collections$UnmodifiableMap
	at software.amazon.awssdk.services.ses.waiters.internal.WaitersRuntime$Value.<init>(WaitersRuntime.java:138)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.findAny(Unknown Source)
	at software.amazon.awssdk.services.ses.waiters.internal.WaitersRuntime$Value.field(WaitersRuntime.java:255)
	at software.amazon.awssdk.services.ses.waiters.DefaultSesWaiter.lambda$identityExistsWaiterAcceptors$3(DefaultSesWaiter.java:96)
	at software.amazon.awssdk.core.waiters.WaiterAcceptor$1.matches(WaiterAcceptor.java:81)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutorHelper.lambda$responseMatches$4(WaiterExecutorHelper.java:105)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.ArrayList$ArrayListSpliterator.tryAdvance(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.findFirst(Unknown Source)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutorHelper.responseMatches(WaiterExecutorHelper.java:106)
	at java.base/java.util.Optional.map(Unknown Source)
	at software.amazon.awssdk.utils.Either.map(Either.java:51)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutorHelper.firstWaiterAcceptorIfMatched(WaiterExecutorHelper.java:56)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutor.evaluate(WaiterExecutor.java:67)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutor.doExecute(WaiterExecutor.java:60)
	at software.amazon.awssdk.core.internal.waiters.WaiterExecutor.execute(WaiterExecutor.java:48)
	at software.amazon.awssdk.core.internal.waiters.DefaultWaiter.run(DefaultWaiter.java:49)
	at software.amazon.awssdk.services.ses.waiters.DefaultSesWaiter.waitUntilIdentityExists(DefaultSesWaiter.java:79)
	at com.company.ccr.ses.CloudFormationCustomResourceSesIdentity.createSesIdentity(CloudFormationCustomResourceSesIdentity.java:149)
	at com.company.ccr.ses.CloudFormationCustomResourceSesIdentity.doCreate(CloudFormationCustomResourceSesIdentity.java:46)
	at com.company.ccr.CloudFormationCustomResource.handleRequest(CloudFormationCustomResource.java:68)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at lambdainternal.EventHandlerLoader$PojoMethodRequestHandler.handleRequest(EventHandlerLoader.java:282)
	at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:199)
	at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:899)
	at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:262)
	at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:199)
	at lambdainternal.AWSLambda.main(AWSLambda.java:193)

This seems like a bug. The eMailAddress variable is a valid String, and the call to verifyEmailIdentity succeeds, and I see the requested identity in the SES console, so I'm sure it's not a null String or anything.

Can anyone confirm that I'm calling waitUntilIdentityExists correctly? What am I missing here? Or is this really a bug?

asked 2 years ago84 views
No Answers

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.

Guidelines for Answering Questions