-
Notifications
You must be signed in to change notification settings - Fork 90
fix: envelope is not taken into account with built-in types #960
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
Changes from 4 commits
3c8019a
ee7b512
4bd8305
e54c4d9
38fa03f
1864050
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,8 @@ | |
import org.aspectj.lang.annotation.Around; | ||
import org.aspectj.lang.annotation.Aspect; | ||
import org.aspectj.lang.annotation.Pointcut; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import software.amazon.lambda.powertools.validation.Validation; | ||
import software.amazon.lambda.powertools.validation.ValidationConfig; | ||
|
||
|
@@ -36,6 +38,8 @@ | |
*/ | ||
@Aspect | ||
public class ValidationAspect { | ||
private static final Logger LOG = LoggerFactory.getLogger(ValidationAspect.class); | ||
|
||
@SuppressWarnings({"EmptyMethod"}) | ||
@Pointcut("@annotation(validation)") | ||
public void callAt(Validation validation) { | ||
|
@@ -59,7 +63,9 @@ && placedOnRequestHandler(pjp)) { | |
JsonSchema inboundJsonSchema = getJsonSchema(validation.inboundSchema(), true); | ||
|
||
Object obj = pjp.getArgs()[0]; | ||
if (obj instanceof APIGatewayProxyRequestEvent) { | ||
if (validation.envelope() != null && !validation.envelope().isEmpty()) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could there be cases where customer functionality changes because of this reordering? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Potentially, if they have an envelope specified (which is not used today). It will be used after update. |
||
validate(obj, inboundJsonSchema, validation.envelope()); | ||
} else if (obj instanceof APIGatewayProxyRequestEvent) { | ||
APIGatewayProxyRequestEvent event = (APIGatewayProxyRequestEvent) obj; | ||
validate(event.getBody(), inboundJsonSchema); | ||
} else if (obj instanceof APIGatewayV2HTTPEvent) { | ||
|
@@ -105,7 +111,7 @@ && placedOnRequestHandler(pjp)) { | |
KinesisAnalyticsStreamsInputPreprocessingEvent event = (KinesisAnalyticsStreamsInputPreprocessingEvent) obj; | ||
event.getRecords().forEach(record -> validate(decode(record.getData()), inboundJsonSchema)); | ||
} else { | ||
validate(obj, inboundJsonSchema, validation.envelope()); | ||
LOG.warn("Unhandled event type {}, please use the 'envelope' parameter to specify what to validate", obj.getClass().getName()); | ||
} | ||
} | ||
} | ||
|
@@ -131,7 +137,7 @@ && placedOnRequestHandler(pjp)) { | |
KinesisAnalyticsInputPreprocessingResponse response = (KinesisAnalyticsInputPreprocessingResponse) result; | ||
response.getRecords().forEach(record -> validate(decode(record.getData()), outboundJsonSchema)); | ||
} else { | ||
validate(result, outboundJsonSchema, validation.envelope()); | ||
LOG.warn("Unhandled response type {}, please use the 'envelope' parameter to specify what to validate", result.getClass().getName()); | ||
} | ||
} | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright 2020 Amazon.com, Inc. or its affiliates. | ||
* Licensed under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package software.amazon.lambda.powertools.validation.handlers; | ||
|
||
import com.amazonaws.services.lambda.runtime.Context; | ||
import com.amazonaws.services.lambda.runtime.RequestHandler; | ||
import com.amazonaws.services.lambda.runtime.events.SQSEvent; | ||
import software.amazon.lambda.powertools.validation.Validation; | ||
|
||
public class SQSWithCustomEnvelopeHandler implements RequestHandler<SQSEvent, String> { | ||
|
||
@Override | ||
@Validation(inboundSchema = "classpath:/schema_v7.json", envelope = "Records[*].powertools_json(body).powertools_json(Message)") | ||
public String handleRequest(SQSEvent input, Context context) { | ||
return "OK"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright 2020 Amazon.com, Inc. or its affiliates. | ||
* Licensed under the Apache License, Version 2.0 (the | ||
* "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
* | ||
*/ | ||
package software.amazon.lambda.powertools.validation.handlers; | ||
|
||
import com.amazonaws.services.lambda.runtime.Context; | ||
import com.amazonaws.services.lambda.runtime.RequestHandler; | ||
import com.amazonaws.services.lambda.runtime.events.SQSEvent; | ||
import software.amazon.lambda.powertools.validation.Validation; | ||
|
||
public class SQSWithWrongEnvelopeHandler implements RequestHandler<SQSEvent, String> { | ||
|
||
@Override | ||
// real event contains Records with big R (https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html) | ||
@Validation(inboundSchema = "classpath:/schema_v7.json", envelope = "records[*].powertools_json(body).powertools_json(Message)") | ||
public String handleRequest(SQSEvent input, Context context) { | ||
return "OK"; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
{ | ||
"Records": [ | ||
{ | ||
"messageId": "d9144555-9a4f-4ec3-99a0-fc4e625a8db2", | ||
"receiptHandle": "7kam5bfzbDsjtcjElvhSbxeLJbeey3A==", | ||
"body": "{\n \"Message\": \"{\\n \\\"id\\\": 43242,\\n \\\"name\\\": \\\"FooBar XY\\\",\\n \\\"price\\\": 258\\n}\"}", | ||
"attributes": { | ||
"ApproximateReceiveCount": "1", | ||
"SentTimestamp": "1601975709495", | ||
"SenderId": "AROAIFU457DVZ5L2J53F2", | ||
"ApproximateFirstReceiveTimestamp": "1601975709499" | ||
}, | ||
"messageAttributes": { | ||
|
||
}, | ||
"md5OfBody": "0f96e88a291edb4429f2f7b9fdc3df96", | ||
"eventSource": "aws:sqs", | ||
"eventSourceARN": "arn:aws:sqs:eu-central-1:123456789012:TestLambda", | ||
"awsRegion": "eu-central-1" | ||
} | ||
] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can this error message be expanded to be clearer to a dev that hits it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just changed the message. But the exception is catch and the main message is just below, with more details.