|
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