in powertools-validation/src/main/java/software/amazon/lambda/powertools/validation/ValidationUtils.java [61:88]
public static void validate(Object obj, JsonSchema jsonSchema, String envelope) throws ValidationException {
if (envelope == null || envelope.isEmpty()) {
validate(obj, jsonSchema);
return;
}
JsonNode subNode;
try {
JsonNode jsonNode = ValidationConfig.get().getObjectMapper().valueToTree(obj);
Expression<JsonNode> expression = ValidationConfig.get().getJmesPath().compile(envelope);
subNode = expression.search(jsonNode);
} catch (Exception e) {
throw new ValidationException("Cannot find envelope <"+envelope+"> in the object <"+obj+">", e);
}
if (subNode.getNodeType() == JsonNodeType.ARRAY) {
subNode.forEach(jsonNode -> validate(jsonNode, jsonSchema));
} else if (subNode.getNodeType() == JsonNodeType.OBJECT) {
validate(subNode, jsonSchema);
} else if (subNode.getNodeType() == JsonNodeType.STRING) {
// try to validate as json string
try {
validate(subNode.asText(), jsonSchema);
} catch (ValidationException e) {
throw new ValidationException("Invalid format for '" + envelope + "': 'STRING' and no JSON found in it.");
}
} else {
throw new ValidationException("Invalid format for '" + envelope + "': '" + subNode.getNodeType() + "'");
}
}