A comprehensive Java implementation of the JSON Schema validation specification supporting both draft v4 and v3 with complete validation capabilities and extensibility.
npx @tessl/cli install tessl/maven-com-github-fge--json-schema-validator@2.2.0JSON Schema Validator is a comprehensive Java implementation of the JSON Schema specification supporting both draft v4 and v3 (with hyperschema syntax support for v4). It provides complete validation capabilities for JSON documents against JSON Schema definitions, includes command-line interface functionality, supports Android development environments, and offers extensive configuration options for validation behavior.
<dependency>
<groupId>com.github.fge</groupId>
<artifactId>json-schema-validator</artifactId>
<version>2.2.6</version>
</dependency>implementation 'com.github.fge:json-schema-validator:2.2.6'import com.github.fge.jsonschema.main.JsonSchemaFactory;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonValidator;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.fasterxml.jackson.databind.JsonNode;import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jsonschema.core.exceptions.ProcessingException;
import com.github.fge.jsonschema.core.report.ProcessingReport;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
// Basic validation using default factory
JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
JsonSchema schema = factory.getJsonSchema(schemaNode);
ProcessingReport report = schema.validate(instanceNode);
// Check if validation passed
boolean isValid = report.isSuccess();
if (!isValid) {
System.out.println("Validation failed: " + report);
}
// One-off validation without creating schema instance
JsonValidator validator = factory.getValidator();
ProcessingReport result = validator.validate(schemaNode, instanceNode);JSON Schema Validator is built around several key components:
JsonSchemaFactory serves as the main entry point for creating validators and schemasJsonSchema provides reusable validation instances for specific schemasValidationConfiguration and LoadingConfigurationLibrary componentsProcessingReportCore schema validation functionality for validating JSON instances against JSON Schema definitions. Supports both single-use and reusable validation patterns.
public final class JsonSchemaFactory {
public static JsonSchemaFactory byDefault();
public static JsonSchemaFactoryBuilder newBuilder();
public JsonValidator getValidator();
public SyntaxValidator getSyntaxValidator();
public JsonSchema getJsonSchema(JsonNode schema) throws ProcessingException;
public JsonSchema getJsonSchema(JsonNode schema, String ptr) throws ProcessingException;
public JsonSchema getJsonSchema(String uri) throws ProcessingException;
public Processor<FullData, FullData> getProcessor();
}
public final class JsonSchema {
public ProcessingReport validate(JsonNode instance) throws ProcessingException;
public ProcessingReport validate(JsonNode instance, boolean deepCheck) throws ProcessingException;
public ProcessingReport validateUnchecked(JsonNode instance);
public ProcessingReport validateUnchecked(JsonNode instance, boolean deepCheck);
public boolean validInstance(JsonNode instance) throws ProcessingException;
public boolean validInstanceUnchecked(JsonNode instance);
}
public final class JsonValidator {
public ProcessingReport validate(JsonNode schema, JsonNode instance) throws ProcessingException;
public ProcessingReport validate(JsonNode schema, JsonNode instance, boolean deepCheck) throws ProcessingException;
public ProcessingReport validateUnchecked(JsonNode schema, JsonNode instance);
public ProcessingReport validateUnchecked(JsonNode schema, JsonNode instance, boolean deepCheck);
}Advanced configuration options for customizing validation behavior, including schema loading, validation rules, and library management.
public final class ValidationConfiguration {
public static ValidationConfiguration byDefault();
public static ValidationConfigurationBuilder newBuilder();
public boolean getUseFormat();
public Library getDefaultLibrary();
public Map<JsonRef, Library> getLibraries();
public MessageBundle getSyntaxMessages();
public MessageBundle getValidationMessages();
}
public final class ValidationConfigurationBuilder {
public ValidationConfigurationBuilder setDefaultVersion(SchemaVersion version);
public ValidationConfigurationBuilder setUseFormat(boolean useFormat);
public ValidationConfigurationBuilder addLibrary(String uri, Library library);
public ValidationConfigurationBuilder setDefaultLibrary(String uri, Library library);
public ValidationConfigurationBuilder setSyntaxMessages(MessageBundle syntaxMessages);
public ValidationConfigurationBuilder setValidationMessages(MessageBundle validationMessages);
public ValidationConfiguration freeze();
}Configuration and Customization
Extensibility system for adding custom validation keywords, format attributes, and validation logic through the library system.
public final class Library {
public static LibraryBuilder newBuilder();
public Dictionary<SyntaxChecker> getSyntaxCheckers();
public Dictionary<Digester> getDigesters();
public Dictionary<Constructor<? extends KeywordValidator>> getValidators();
public Dictionary<FormatAttribute> getFormatAttributes();
}
public final class Keyword {
public static KeywordBuilder newBuilder(String name);
}
public interface KeywordValidator {
void validate(Processor<FullData, FullData> processor, ProcessingReport report,
MessageBundle bundle, FullData data) throws ProcessingException;
}Custom Keywords and Extensions
Dedicated functionality for validating JSON Schema syntax without performing instance validation.
public final class SyntaxValidator {
public boolean schemaIsValid(JsonNode schema);
public ProcessingReport validateSchema(JsonNode schema);
public Processor<ValueHolder<SchemaTree>, ValueHolder<SchemaTree>> getProcessor();
}Built-in format attribute validation for common data formats like email, URI, datetime, and extensible format validation system.
public interface FormatAttribute {
EnumSet<NodeType> supportedTypes();
void validate(ProcessingReport report, MessageBundle bundle, FullData data)
throws ProcessingException;
}Command-line tools for JSON Schema validation from the command line with various output formats and options.
public final class Main {
public static void main(String... args);
}
public enum RetCode {
OK, SCHEMA_SYNTAX_ERROR, VALIDATION_FAILURE, CMD_LINE_ERROR
}public class ProcessingException extends Exception {
public ProcessingException(ProcessingMessage message);
public ProcessingException(ProcessingMessage message, Throwable cause);
}
public class InvalidInstanceException extends ProcessingException {
public InvalidInstanceException(ProcessingMessage message);
}public interface ProcessingReport extends Iterable<ProcessingMessage> {
boolean isSuccess();
LogLevel getLogLevel();
ProcessingMessage getMessage();
}
public final class ProcessingMessage {
public String getMessage();
public LogLevel getLevel();
public JsonNode asJson();
}
public enum SchemaVersion {
DRAFTV3("http://json-schema.org/draft-03/schema#"),
DRAFTV4("http://json-schema.org/draft-04/schema#");
}
public enum NodeType {
ARRAY, BOOLEAN, INTEGER, NULL, NUMBER, OBJECT, STRING
}
public interface Processor<I, O> {
// Core processor interface for validation chains
}
public final class FullData {
// Complete data structure containing schema and instance information
}
public final class ValueHolder<T> {
// Generic value holder for processor chains
}
public final class SchemaTree {
// Immutable schema tree representation
}
public interface MessageBundle {
// Internationalized message bundle interface
}
public final class JsonRef {
// JSON Reference implementation
}
public interface Dictionary<T> {
// Generic dictionary interface for keyword collections
}
public enum LogLevel {
DEBUG, INFO, WARNING, ERROR, FATAL
}