Class Schema

  • All Implemented Interfaces:
    Validator, Walker

    public class Schema
    extends Object
    implements Validator
    Used for creating a schema with validators for validating inputs. This is created using SchemaRegistry#withDefaultDialect(Version, Consumer) and should be cached for performance.

    This is the core of json constraint implementation. It parses json constraint file and generates KeywordValidators. The class is thread safe, once it is constructed, it can be used to validate multiple json data concurrently.

    Schema instances are thread-safe provided its configuration is not modified.

    • Field Detail

      • schemaNode

        protected final com.fasterxml.jackson.databind.JsonNode schemaNode
      • parentSchema

        protected final Schema parentSchema
      • suppressSubSchemaRetrieval

        protected final boolean suppressSubSchemaRetrieval
    • Constructor Detail

      • Schema

        protected Schema​(List<KeywordValidator> validators,
                         boolean validatorsLoaded,
                         boolean recursiveAnchor,
                         TypeValidator typeValidator,
                         String id,
                         boolean suppressSubSchemaRetrieval,
                         com.fasterxml.jackson.databind.JsonNode schemaNode,
                         SchemaContext schemaContext,
                         Schema parentSchema,
                         SchemaLocation schemaLocation,
                         Map<String,​String> errorMessage)
        Constructor to create a copy using fields.
        Parameters:
        validators - the validators
        validatorsLoaded - whether the validators are preloaded
        recursiveAnchor - whether this is has a recursive anchor
        id - the id
        suppressSubSchemaRetrieval - to suppress sub schema retrieval
        schemaNode - the schema node
        schemaContext - the schema context
        parentSchema - the parent schema
        schemaLocation - the schema location
        errorMessage - the error message
    • Method Detail

      • getSchemaNode

        public com.fasterxml.jackson.databind.JsonNode getSchemaNode()
      • getSchemaLocation

        public SchemaLocation getSchemaLocation()
        Description copied from interface: Validator
        The schema location is the canonical URI of the schema object plus a JSON Pointer fragment indicating the subschema that produced a result. In contrast with the evaluation path, the schema location MUST NOT include by-reference applicators such as $ref or $dynamicRef.
        Specified by:
        getSchemaLocation in interface Validator
        Returns:
        the schema location
      • getParentSchema

        public Schema getParentSchema()
      • isSuppressSubSchemaRetrieval

        public boolean isSuppressSubSchemaRetrieval()
      • validate

        public void validate​(ExecutionContext executionContext,
                             com.fasterxml.jackson.databind.JsonNode node)
      • atRoot

        protected NodePath atRoot()
        Get the root path.
        Returns:
        The path.
      • hasKeyword

        public boolean hasKeyword​(String keyword)
      • getRefSchemaNode

        public com.fasterxml.jackson.databind.JsonNode getRefSchemaNode​(String ref)
        Find the schema node for $ref attribute.
        Parameters:
        ref - String
        Returns:
        JsonNode
      • getSubSchema

        public Schema getSubSchema​(NodePath fragment)
        Gets the sub schema given the json pointer fragment.
        Parameters:
        fragment - the json pointer fragment
        Returns:
        the schema
      • getNode

        protected com.fasterxml.jackson.databind.JsonNode getNode​(Object propertyOrIndex)
      • getNode

        protected com.fasterxml.jackson.databind.JsonNode getNode​(com.fasterxml.jackson.databind.JsonNode node,
                                                                  Object propertyOrIndex)
      • findLexicalRoot

        public Schema findLexicalRoot()
      • findSchemaResourceRoot

        public Schema findSchemaResourceRoot()
        Finds the root of the schema resource.

        This is either the schema document root or the subschema resource root.

        Returns:
        the root of the schema
      • isSchemaResourceRoot

        public boolean isSchemaResourceRoot()
        Determines if this schema resource is a schema resource root.

        This is either the schema document root or the subschema resource root.

        Returns:
        if this schema is a schema resource root
      • getId

        public String getId()
      • findAncestor

        public Schema findAncestor()
      • validate

        public void validate​(ExecutionContext executionContext,
                             com.fasterxml.jackson.databind.JsonNode jsonNode,
                             com.fasterxml.jackson.databind.JsonNode rootNode,
                             NodePath instanceLocation)
        START OF VALIDATE METHODS
        Specified by:
        validate in interface Validator
        Parameters:
        executionContext - the execution context
        jsonNode - the instance node being processed
        rootNode - the instance document that the instance node belongs to
        instanceLocation - the location of the instance node being processed
      • validate

        public List<Error> validate​(com.fasterxml.jackson.databind.JsonNode rootNode)
        Validate the given root JsonNode, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        rootNode - the root node
        Returns:
        A list of Error if there is any validation error, or an empty list if there is no error.
      • validate

        public List<Error> validate​(com.fasterxml.jackson.databind.JsonNode rootNode,
                                    ExecutionContextCustomizer executionCustomizer)
        Validate the given root JsonNode, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        rootNode - the root node
        executionCustomizer - the execution customizer
        Returns:
        the assertions
      • validate

        public List<Error> validate​(com.fasterxml.jackson.databind.JsonNode rootNode,
                                    Consumer<ExecutionContext> executionCustomizer)
        Validate the given root JsonNode, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        rootNode - the root node
        executionCustomizer - the execution customizer
        Returns:
        the assertions
      • validate

        public <T> T validate​(com.fasterxml.jackson.databind.JsonNode rootNode,
                              OutputFormat<T> format)
        Validates the given root JsonNode, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        rootNode - the root node
        format - the formatter
        Returns:
        the result
      • validate

        public <T> T validate​(com.fasterxml.jackson.databind.JsonNode rootNode,
                              OutputFormat<T> format,
                              ExecutionContextCustomizer executionCustomizer)
        Validates the given root JsonNode, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        rootNode - the root node
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(com.fasterxml.jackson.databind.JsonNode rootNode,
                              OutputFormat<T> format,
                              Consumer<ExecutionContext> executionCustomizer)
        Validates the given root JsonNode, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        rootNode - the root node
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public List<Error> validate​(String input,
                                    InputFormat inputFormat)
        Validate the given input string using the input format, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        input - the input
        inputFormat - the inputFormat
        Returns:
        A list of Error if there is any validation error, or an empty list if there is no error.
      • validate

        public <T> T validate​(String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        Returns:
        the result
      • validate

        public <T> T validate​(String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              ExecutionContextCustomizer executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              Consumer<ExecutionContext> executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public List<Error> validate​(AbsoluteIri input,
                                    InputFormat inputFormat)
        Validate the given input string using the input format, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        input - the input
        inputFormat - the inputFormat
        Returns:
        A list of Error if there is any validation error, or an empty list if there is no error.
      • validate

        public <T> T validate​(AbsoluteIri input,
                              InputFormat inputFormat,
                              OutputFormat<T> format)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        Returns:
        the result
      • validate

        public <T> T validate​(AbsoluteIri input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              ExecutionContextCustomizer executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(AbsoluteIri input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              Consumer<ExecutionContext> executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public List<Error> validate​(ExecutionContext executionContext,
                                    String input,
                                    InputFormat inputFormat)
        Validate the given input string using the input format, starting at the root of the data path.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the inputFormat
        Returns:
        A list of Error if there is any validation error, or an empty list if there is no error.
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        Returns:
        the result
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              ExecutionContextCustomizer executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              String input,
                              InputFormat inputFormat,
                              OutputFormat<T> format,
                              Consumer<ExecutionContext> executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the inputFormat
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              com.fasterxml.jackson.databind.JsonNode node,
                              OutputFormat<T> format)
        Validates to a format.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        node - the node
        format - the format
        Returns:
        the result
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              com.fasterxml.jackson.databind.JsonNode node,
                              OutputFormat<T> format,
                              Consumer<ExecutionContext> executionCustomizer)
        Validates the given input string using the input format, starting at the root of the data path. The output will be formatted using the formatter specified.

        Note that since Draft 2019-09 by default format generates only annotations and not assertions.

        Use ExecutionConfig.BuilderSupport.formatAssertionsEnabled(Boolean) to override the default.

        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        node - the node
        format - the formatter
        executionCustomizer - the execution customizer
        Returns:
        the result
      • validate

        public <T> T validate​(ExecutionContext executionContext,
                              com.fasterxml.jackson.databind.JsonNode node,
                              OutputFormat<T> format,
                              ExecutionContextCustomizer executionCustomizer)
        Validates to a format.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        node - the node
        format - the format
        executionCustomizer - the customizer
        Returns:
        the result
      • walk

        public Result walk​(ExecutionContext executionContext,
                           com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate,
                           ExecutionContextCustomizer executionCustomizer)
        Walk the JSON node.
        Parameters:
        executionContext - the execution context
        node - the input
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public <T> T walk​(ExecutionContext executionContext,
                          com.fasterxml.jackson.databind.JsonNode node,
                          OutputFormat<T> outputFormat,
                          boolean validate,
                          ExecutionContextCustomizer executionCustomizer)
        Walk the JSON node.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        node - the input
        outputFormat - the output format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(ExecutionContext executionContext,
                           com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate,
                           Consumer<ExecutionContext> executionCustomizer)
        Walk the JSON node.
        Parameters:
        executionContext - the execution context
        node - the input
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public <T> T walk​(ExecutionContext executionContext,
                          com.fasterxml.jackson.databind.JsonNode node,
                          OutputFormat<T> outputFormat,
                          boolean validate,
                          Consumer<ExecutionContext> executionCustomizer)
        Walk the JSON node.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        node - the input
        outputFormat - the output format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(ExecutionContext executionContext,
                           com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate)
        Walk the JSON node.
        Parameters:
        executionContext - the execution context
        node - the input
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public Result walk​(ExecutionContext executionContext,
                           String input,
                           InputFormat inputFormat,
                           boolean validate)
        Walk the input.
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public <T> T walk​(ExecutionContext executionContext,
                          String input,
                          InputFormat inputFormat,
                          OutputFormat<T> outputFormat,
                          boolean validate)
        Walk the input.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the input format
        outputFormat - the output format
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public Result walk​(ExecutionContext executionContext,
                           String input,
                           InputFormat inputFormat,
                           boolean validate,
                           ExecutionContextCustomizer executionCustomizer)
        Walk the input.
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public <T> T walk​(ExecutionContext executionContext,
                          String input,
                          InputFormat inputFormat,
                          OutputFormat<T> outputFormat,
                          boolean validate,
                          ExecutionContextCustomizer executionCustomizer)
        Walk the input.
        Type Parameters:
        T - the result type
        Parameters:
        executionContext - the execution context
        input - the input
        inputFormat - the input format
        outputFormat - the output format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate)
        Walk the JSON node.
        Parameters:
        node - the input
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public Result walk​(com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate,
                           ExecutionContextCustomizer executionCustomizer)
        Walk the JSON node.
        Parameters:
        node - the input
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(com.fasterxml.jackson.databind.JsonNode node,
                           boolean validate,
                           Consumer<ExecutionContext> executionCustomizer)
        Walk the JSON node.
        Parameters:
        node - the input
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public <T> T walk​(com.fasterxml.jackson.databind.JsonNode node,
                          OutputFormat<T> outputFormat,
                          boolean validate)
        Walk the JSON node.
        Type Parameters:
        T - the result type
        Parameters:
        node - the input
        validate - true to validate the input against the schema
        outputFormat - the output format
        Returns:
        the validation result
      • walk

        public Result walk​(String input,
                           InputFormat inputFormat,
                           boolean validate)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public Result walk​(String input,
                           InputFormat inputFormat,
                           boolean validate,
                           ExecutionContextCustomizer executionCustomizer)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(String input,
                           InputFormat inputFormat,
                           boolean validate,
                           Consumer<ExecutionContext> executionCustomizer)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(AbsoluteIri input,
                           InputFormat inputFormat,
                           boolean validate)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public Result walk​(AbsoluteIri input,
                           InputFormat inputFormat,
                           boolean validate,
                           ExecutionContextCustomizer executionCustomizer)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walk

        public Result walk​(AbsoluteIri input,
                           InputFormat inputFormat,
                           boolean validate,
                           Consumer<ExecutionContext> executionCustomizer)
        Walk the input.
        Parameters:
        input - the input
        inputFormat - the input format
        validate - true to validate the input against the schema
        executionCustomizer - the customizer
        Returns:
        the validation result
      • walkAtNode

        public Result walkAtNode​(ExecutionContext executionContext,
                                 com.fasterxml.jackson.databind.JsonNode node,
                                 com.fasterxml.jackson.databind.JsonNode rootNode,
                                 NodePath instanceLocation,
                                 boolean validate)
        Walk at the node.
        Parameters:
        executionContext - the execution content
        node - the current node
        rootNode - the root node
        instanceLocation - the instance location
        validate - true to validate the input against the schema
        Returns:
        the validation result
      • walk

        public void walk​(ExecutionContext executionContext,
                         com.fasterxml.jackson.databind.JsonNode node,
                         com.fasterxml.jackson.databind.JsonNode rootNode,
                         NodePath instanceLocation,
                         boolean shouldValidateSchema)
        Description copied from interface: Validator
        This is default implementation of walk method. Its job is to call the validate method if shouldValidateSchema is enabled.
        Specified by:
        walk in interface Validator
        Specified by:
        walk in interface Walker
        Parameters:
        executionContext - the execution context
        node - the instance node being processed
        rootNode - the instance document that the instance node belongs to
        instanceLocation - the location of the instance node being processed
        shouldValidateSchema - true to validate the schema while walking
      • initializeValidators

        public void initializeValidators()
        Initializes the validators' Schema instances. For avoiding issues with concurrency, in 1.0.49 the Schema instances affiliated with validators were modified to no more preload the schema and lazy loading is used instead.

        This comes with the issue that this way you cannot rely on validating important schema features, in particular $ref resolution at instantiation from SchemaRegistry.

        By calling initializeValidators you can enforce preloading of the Schema instances of the validators.

      • isRecursiveAnchor

        public boolean isRecursiveAnchor()
      • createExecutionContext

        public ExecutionContext createExecutionContext()
        Creates an execution context.
        Returns:
        the execution context