Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to serialize CognitoUserPoolPreTokenGenerationEvent #433

Closed
NikolayMetchev opened this issue Aug 16, 2023 · 7 comments
Closed

Failed to serialize CognitoUserPoolPreTokenGenerationEvent #433

NikolayMetchev opened this issue Aug 16, 2023 · 7 comments

Comments

@NikolayMetchev
Copy link
Contributor

NikolayMetchev commented Aug 16, 2023

Hello,
I am trying to use cognito and a java pre-token generation event lambda https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token-generation.html

I wrote a lambda and used the following class as my lambda definition: com.amazonaws.services.lambda.runtime.RequestHandler<com.amazonaws.services.lambda.runtime.events.CognitoUserPoolPreTokenGenerationEvent, com.amazonaws.services.lambda.runtime.events.CognitoUserPoolPreTokenGenerationEvent>

this doesn't seem to be able to parse the input at all and I get the following output in the logs:

CognitoUserPoolPreTokenGenerationEvent(request=CognitoUserPoolPreTokenGenerationEvent.Request(clientMetadata=null, groupConfiguration=CognitoUserPoolPreTokenGenerationEvent.GroupConfiguration(groupsToOverride=[us-east-1_IWxv0Zfr1_Test], iamRolesToOverride=[], preferredRole=null)), response=CognitoUserPoolPreTokenGenerationEvent.Response(claimsOverrideDetails=null))

If however I use com.amazonaws.services.lambda.runtime.RequestStreamHandler I do in fact see the correct input in the lambda log. Please help

@msailes
Copy link
Collaborator

msailes commented Aug 16, 2023

If you change the method to <String, String> and log out the event. What does it look like?

Obviously please don't share any sensitive details.

@NikolayMetchev
Copy link
Contributor Author

An error occurred during JSON parsing: java.lang.RuntimeException
java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)
 at [Source: (ByteArrayInputStream); line: 1, column: 1]
	at com.amazonaws.services.lambda.runtime.serialization.factories.JacksonFactory$InternalSerializer.fromJson(JacksonFactory.java:176)
Caused by: com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)
 at [Source: (ByteArrayInputStream); line: 1, column: 1]
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1746)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1520)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1425)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:937)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseString(StdDeserializer.java:1421)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:48)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2105)
	at com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1481)
	at com.amazonaws.services.lambda.runtime.serialization.factories.JacksonFactory$InternalSerializer.fromJson(JacksonFactory.java:174)

@NikolayMetchev
Copy link
Contributor Author

any news here?

@NikolayMetchev
Copy link
Contributor Author

I have figured out what the problem is. The toString() method of CognitoUserPoolPreTokenGenerationEvent doesn't print out the object properly. It seems everything is working as expected.

@msailes
Copy link
Collaborator

msailes commented Sep 6, 2023

Would you like to submit a PR?

@NikolayMetchev
Copy link
Contributor Author

Can I get away with just a patch?

Create_toString_methods_that_call_super_toString().patch

@NikolayMetchev
Copy link
Contributor Author

Looks like I managed to create a pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants