Class JsonSchemaFactory

java.lang.Object
com.networknt.schema.JsonSchemaFactory

public class JsonSchemaFactory extends 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 Details

    • 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
    • jsonNodeReader

      private final JsonNodeReader jsonNodeReader
    • defaultMetaSchemaIri

      private final String defaultMetaSchemaIri
    • schemaLoadersBuilder

      private final SchemaLoaders.Builder schemaLoadersBuilder
    • schemaMappersBuilder

      private final SchemaMappers.Builder schemaMappersBuilder
    • schemaLoader

      private final SchemaLoader schemaLoader
    • metaSchemas

      private final ConcurrentMap<String,JsonMetaSchema> metaSchemas
    • schemaCache

      private final ConcurrentMap<SchemaLocation,JsonSchema> schemaCache
    • enableSchemaCache

      private final boolean enableSchemaCache
    • metaSchemaFactory

      private final JsonMetaSchemaFactory metaSchemaFactory
    • DEFAULT_SCHEMA_LOADERS

      private static final List<SchemaLoader> DEFAULT_SCHEMA_LOADERS
    • DEFAULT_SCHEMA_MAPPERS

      private static final List<SchemaMapper> DEFAULT_SCHEMA_MAPPERS
  • Constructor Details

  • Method Details

    • getSchemaLoader

      public SchemaLoader getSchemaLoader()
    • builder

      public static JsonSchemaFactory.Builder builder()
      Builder without keywords or formats. Typically builder(JsonSchemaFactory) is what is required.
      Returns:
      a builder instance without any keywords or formats - usually not what one needs.
    • 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, 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
    • builder

      public static JsonSchemaFactory.Builder builder(JsonSchemaFactory blueprint)
      Builder from an existing JsonSchemaFactory.

      JsonSchemaFactory.builder(JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V201909));

      Parameters:
      blueprint - the existing factory
      Returns:
      the builder
    • 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
    • create

      public JsonSchema create(ValidationContext validationContext, SchemaLocation schemaLocation, JsonNodePath evaluationPath, com.fasterxml.jackson.databind.JsonNode schemaNode, JsonSchema parentSchema)
    • doCreate

      private JsonSchema doCreate(ValidationContext validationContext, SchemaLocation schemaLocation, JsonNodePath evaluationPath, com.fasterxml.jackson.databind.JsonNode schemaNode, JsonSchema parentSchema, boolean suppressSubSchemaRetrieval)
    • 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
    • createValidationContext

      protected ValidationContext createValidationContext(com.fasterxml.jackson.databind.JsonNode schemaNode, SchemaValidatorsConfig config)
    • getMetaSchema

      private JsonMetaSchema getMetaSchema(com.fasterxml.jackson.databind.JsonNode schemaNode, SchemaValidatorsConfig config)
    • getMetaSchemaOrDefault

      private JsonMetaSchema getMetaSchemaOrDefault(com.fasterxml.jackson.databind.JsonNode schemaNode, SchemaValidatorsConfig config)
    • getMetaSchema

      public JsonMetaSchema getMetaSchema(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(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(String content, InputFormat inputFormat) throws IOException
      Throws:
      IOException
    • readTree

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

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

      public JsonSchema getSchema(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(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(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(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(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(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(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
    • getMappedSchema

      protected JsonSchema getMappedSchema(SchemaLocation schemaUri, SchemaValidatorsConfig config)
    • getSchema

      public JsonSchema getSchema(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(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(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, SchemaValidatorsConfig config)
      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, SchemaValidatorsConfig) instead to ensure the base IRI if no id is present.

      Parameters:
      jsonNode - the node
      config - the config
      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
    • isYaml

      private boolean isYaml(SchemaLocation schemaUri)
    • normalizeMetaSchemaUri

      protected static String normalizeMetaSchemaUri(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