Class JsonSchemaFactory


  • public class JsonSchemaFactory
    extends java.lang.Object
    Factory for building JsonSchema instances. The factory should be typically be created using getInstance(VersionFlag, Consumer) and should be cached for performance.

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

    • Field Detail

      • logger

        private static final org.slf4j.Logger logger
      • jsonMapper

        private final com.fasterxml.jackson.databind.ObjectMapper jsonMapper
      • yamlMapper

        private final com.fasterxml.jackson.databind.ObjectMapper yamlMapper
      • defaultMetaSchemaIri

        private final java.lang.String defaultMetaSchemaIri
      • metaSchemas

        private final java.util.concurrent.ConcurrentMap<java.lang.String,​JsonMetaSchema> metaSchemas
      • enableSchemaCache

        private final boolean enableSchemaCache
      • DEFAULT_SCHEMA_LOADERS

        private static final java.util.List<SchemaLoader> DEFAULT_SCHEMA_LOADERS
      • DEFAULT_SCHEMA_MAPPERS

        private static final java.util.List<SchemaMapper> DEFAULT_SCHEMA_MAPPERS
    • Constructor Detail

      • JsonSchemaFactory

        private JsonSchemaFactory​(com.fasterxml.jackson.databind.ObjectMapper jsonMapper,
                                  com.fasterxml.jackson.databind.ObjectMapper yamlMapper,
                                  JsonNodeReader jsonNodeReader,
                                  java.lang.String defaultMetaSchemaIri,
                                  SchemaLoaders.Builder schemaLoadersBuilder,
                                  SchemaMappers.Builder schemaMappersBuilder,
                                  java.util.concurrent.ConcurrentMap<java.lang.String,​JsonMetaSchema> metaSchemas,
                                  boolean enableSchemaCache,
                                  JsonMetaSchemaFactory metaSchemaFactory)
    • Method Detail

      • getInstance

        public static JsonSchemaFactory getInstance​(SpecVersion.VersionFlag versionFlag)
        Creates a factory with a default schema dialect. The schema dialect will only be used if the input does not specify a $schema.
        Parameters:
        versionFlag - the default dialect
        Returns:
        the factory
      • getInstance

        public static JsonSchemaFactory getInstance​(SpecVersion.VersionFlag versionFlag,
                                                    java.util.function.Consumer<JsonSchemaFactory.Builder> customizer)
        Creates a factory with a default schema dialect. The schema dialect will only be used if the input does not specify a $schema.
        Parameters:
        versionFlag - the default dialect
        customizer - to customize the factory
        Returns:
        the factory
      • checkVersion

        public static JsonSchemaVersion checkVersion​(SpecVersion.VersionFlag versionFlag)
        Gets the json schema version to get the meta schema.

        This throws an IllegalArgumentException for an unsupported value.

        Parameters:
        versionFlag - the schema dialect
        Returns:
        the version
      • newJsonSchema

        protected JsonSchema newJsonSchema​(SchemaLocation schemaUri,
                                           com.fasterxml.jackson.databind.JsonNode schemaNode,
                                           SchemaValidatorsConfig config)
        Creates a json schema from initial input.
        Parameters:
        schemaUri - the schema location
        schemaNode - the schema data node
        config - the config to use
        Returns:
        the schema
      • preload

        private void preload​(JsonSchema jsonSchema,
                             SchemaValidatorsConfig config)
        Preloads the json schema if the configuration option is set.
        Parameters:
        jsonSchema - the schema to preload
        config - containing the configuration option
      • withMetaSchema

        private ValidationContext withMetaSchema​(ValidationContext validationContext,
                                                 com.fasterxml.jackson.databind.JsonNode schemaNode)
        Determines the validation context to use for the schema given the parent validation context.

        This is typically the same validation context unless the schema has a different $schema from the parent.

        If the schema does not define a $schema, the parent should be used.

        Parameters:
        validationContext - the parent validation context
        schemaNode - the schema node
        Returns:
        the validation context to use
      • getSchemaLocation

        protected SchemaLocation getSchemaLocation​(SchemaLocation schemaLocation)
        Gets the base IRI from the schema retrieval IRI if present otherwise return one with a null base IRI.

        Note that the resolving of the $id or id in the schema node will take place in the JsonSchema constructor.

        Parameters:
        schemaLocation - the schema retrieval uri
        Returns:
        the schema location
      • getMetaSchema

        public JsonMetaSchema getMetaSchema​(java.lang.String iri,
                                            SchemaValidatorsConfig config)
        Gets the meta-schema that is available to the factory.
        Parameters:
        iri - the IRI of the meta-schema
        config - the schema validators config
        Returns:
        the meta-schema
      • loadMetaSchema

        protected JsonMetaSchema loadMetaSchema​(java.lang.String iri,
                                                SchemaValidatorsConfig config)
        Loads the meta-schema from the configured meta-schema factory.
        Parameters:
        iri - the IRI of the meta-schema
        config - the schema validators config
        Returns:
        the meta-schema
      • readTree

        com.fasterxml.jackson.databind.JsonNode readTree​(java.lang.String content,
                                                         InputFormat inputFormat)
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readTree

        com.fasterxml.jackson.databind.JsonNode readTree​(java.io.InputStream content,
                                                         InputFormat inputFormat)
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • getObjectMapper

        com.fasterxml.jackson.databind.ObjectMapper getObjectMapper​(InputFormat inputFormat)
      • getSchema

        public JsonSchema getSchema​(java.lang.String schema,
                                    SchemaValidatorsConfig config)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schema - the schema data as a string
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.lang.String schema,
                                    InputFormat inputFormat,
                                    SchemaValidatorsConfig config)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schema - the schema data as a string
        inputFormat - input format
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.lang.String schema)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schema - the schema data as a string
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.lang.String schema,
                                    InputFormat inputFormat)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schema - the schema data as a string
        inputFormat - input format
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.io.InputStream schemaStream,
                                    SchemaValidatorsConfig config)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schemaStream - the input stream with the schema data
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.io.InputStream schemaStream,
                                    InputFormat inputFormat,
                                    SchemaValidatorsConfig config)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schemaStream - the input stream with the schema data
        inputFormat - input format
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.io.InputStream schemaStream)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Parameters:
        schemaStream - the input stream with the schema data
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(SchemaLocation schemaUri,
                                    SchemaValidatorsConfig config)
        Gets the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        config - the config
        Returns:
        the schema
      • loadSchema

        protected JsonSchema loadSchema​(SchemaLocation schemaUri,
                                        SchemaValidatorsConfig config)
        Loads the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        config - the config
        Returns:
        the schema
      • getYamlMapper

        com.fasterxml.jackson.databind.ObjectMapper getYamlMapper()
      • getJsonMapper

        com.fasterxml.jackson.databind.ObjectMapper getJsonMapper()
      • createSchemaValidatorsConfig

        protected SchemaValidatorsConfig createSchemaValidatorsConfig()
        Creates a schema validators config.
        Returns:
        the schema validators config
      • getSchema

        public JsonSchema getSchema​(java.net.URI schemaUri)
        Gets the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.net.URI schemaUri,
                                    com.fasterxml.jackson.databind.JsonNode jsonNode,
                                    SchemaValidatorsConfig config)
        Gets the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        jsonNode - the node
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(java.net.URI schemaUri,
                                    com.fasterxml.jackson.databind.JsonNode jsonNode)
        Gets the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        jsonNode - the node
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(SchemaLocation schemaUri)
        Gets the schema.
        Parameters:
        schemaUri - the absolute IRI of the schema which can map to the retrieval IRI.
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(SchemaLocation schemaUri,
                                    com.fasterxml.jackson.databind.JsonNode jsonNode,
                                    SchemaValidatorsConfig config)
        Gets the schema.
        Parameters:
        schemaUri - the base absolute IRI
        jsonNode - the node
        config - the config
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(SchemaLocation schemaUri,
                                    com.fasterxml.jackson.databind.JsonNode jsonNode)
        Gets the schema.
        Parameters:
        schemaUri - the base absolute IRI
        jsonNode - the node
        Returns:
        the schema
      • getSchema

        public JsonSchema getSchema​(com.fasterxml.jackson.databind.JsonNode jsonNode)
        Gets the schema.

        Using this is not recommended as there is potentially no base IRI for resolving references to the absolute IRI.

        Prefer getSchema(SchemaLocation, JsonNode) instead to ensure the base IRI if no id is present.

        Parameters:
        jsonNode - the node
        Returns:
        the schema
      • normalizeMetaSchemaUri

        protected static java.lang.String normalizeMetaSchemaUri​(java.lang.String id)
        Normalizes the standard JSON schema dialects.

        This should not normalize any other unrecognized dialects.

        Parameters:
        id - the $schema identifier
        Returns:
        the normalized uri