27package dev.rafex.ether.json;
30import java.util.Objects;
32import java.util.stream.Collectors;
34import com.fasterxml.jackson.core.type.TypeReference;
35import com.fasterxml.jackson.databind.JsonNode;
36import com.networknt.schema.JsonSchema;
37import com.networknt.schema.JsonSchemaFactory;
38import com.networknt.schema.SpecVersion;
40public final class JsonSchemaUtils {
42 private static final JsonSchemaFactory FACTORY = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012);
44 private JsonSchemaUtils() {
47 public static List<String>
validate(
final JsonNode schemaNode,
final JsonNode documentNode) {
48 Objects.requireNonNull(schemaNode,
"schemaNode");
49 Objects.requireNonNull(documentNode,
"documentNode");
51 final JsonSchema schema = FACTORY.getSchema(schemaNode);
52 final Set<com.networknt.schema.ValidationMessage> errors = schema.validate(documentNode);
54 return errors.stream().map(com.networknt.schema.ValidationMessage::getMessage).sorted().toList();
57 public static List<String>
validate(
final String schemaJson,
final String documentJson) {
61 public static void validateOrThrow(
final JsonNode schemaNode,
final JsonNode documentNode) {
62 final var violations =
validate(schemaNode, documentNode);
63 if (!violations.isEmpty()) {
68 public static void validateOrThrow(
final String schemaJson,
final String documentJson) {
73 final TypeReference<T> typeReference) {
79 Objects.requireNonNull(violations,
"violations");
80 return violations.stream().collect(Collectors.joining(
"; "));
static List< String > validate(final String schemaJson, final String documentJson)
static List< String > validate(final JsonNode schemaNode, final JsonNode documentNode)
static void validateOrThrow(final String schemaJson, final String documentJson)
static< T > T parseAndValidateOrThrow(final String schemaJson, final String documentJson, final TypeReference< T > typeReference)
static void validateOrThrow(final JsonNode schemaNode, final JsonNode documentNode)
static String violationsAsText(final List< String > violations)
static JsonNode parseTree(final String json)
static< T > T fromJson(final String json, final Class< T > clazz)