public static void validate()

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() + "'");
        }
    }