|
13 | 13 | */
|
14 | 14 | package software.amazon.lambda.powertools.validation;
|
15 | 15 |
|
| 16 | +import java.io.ByteArrayOutputStream; |
16 | 17 | import java.io.IOException;
|
17 | 18 | import java.io.InputStream;
|
18 | 19 | import java.util.Collections;
|
|
21 | 22 | import java.util.concurrent.ConcurrentHashMap;
|
22 | 23 | import java.util.stream.Collectors;
|
23 | 24 |
|
| 25 | +import com.amazonaws.services.lambda.runtime.serialization.PojoSerializer; |
| 26 | +import com.amazonaws.services.lambda.runtime.serialization.events.LambdaEventSerializers; |
24 | 27 | import com.fasterxml.jackson.core.JsonProcessingException;
|
25 | 28 | import com.fasterxml.jackson.databind.JsonNode;
|
26 | 29 | import com.fasterxml.jackson.databind.node.JsonNodeType;
|
| 30 | +import com.fasterxml.jackson.databind.node.NullNode; |
27 | 31 | import com.networknt.schema.JsonSchema;
|
28 | 32 | import com.networknt.schema.ValidationMessage;
|
29 | 33 | import io.burt.jmespath.Expression;
|
@@ -65,9 +69,15 @@ public static void validate(Object obj, JsonSchema jsonSchema, String envelope)
|
65 | 69 | }
|
66 | 70 | JsonNode subNode;
|
67 | 71 | try {
|
68 |
| - JsonNode jsonNode = ValidationConfig.get().getObjectMapper().valueToTree(obj); |
| 72 | + PojoSerializer pojoSerializer = LambdaEventSerializers.serializerFor(obj.getClass(), ClassLoader.getSystemClassLoader()); |
| 73 | + ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| 74 | + pojoSerializer.toJson(obj, out); |
| 75 | + JsonNode jsonNode = ValidationConfig.get().getObjectMapper().readTree(out.toString("UTF-8")); |
69 | 76 | Expression<JsonNode> expression = ValidationConfig.get().getJmesPath().compile(envelope);
|
70 | 77 | subNode = expression.search(jsonNode);
|
| 78 | + if (subNode == null || subNode instanceof NullNode) { |
| 79 | + throw new ValidationException("Not found"); |
| 80 | + } |
71 | 81 | } catch (Exception e) {
|
72 | 82 | throw new ValidationException("Cannot find envelope <"+envelope+"> in the object <"+obj+">", e);
|
73 | 83 | }
|
|
0 commit comments