diff --git a/src/main/java/com/networknt/schema/BaseJsonValidator.java b/src/main/java/com/networknt/schema/BaseJsonValidator.java index 69459730c..09b44bc78 100644 --- a/src/main/java/com/networknt/schema/BaseJsonValidator.java +++ b/src/main/java/com/networknt/schema/BaseJsonValidator.java @@ -82,7 +82,7 @@ private static JsonSchema obtainSubSchemaNode(final JsonNode schemaNode, final V else { final URI uri; try { - uri = validationContext.getJsonSchemaFactory().getURIFactory().create(node.textValue()); + uri = validationContext.getURIFactory().create(node.textValue()); } catch (IllegalArgumentException e) { return null; } diff --git a/src/main/java/com/networknt/schema/JsonSchema.java b/src/main/java/com/networknt/schema/JsonSchema.java index 9eea10d2a..642ebdd4b 100644 --- a/src/main/java/com/networknt/schema/JsonSchema.java +++ b/src/main/java/com/networknt/schema/JsonSchema.java @@ -81,7 +81,7 @@ private URI combineCurrentUriWithIds(URI currentUri, JsonNode schemaNode) { return currentUri; } else { try { - return this.validationContext.getJsonSchemaFactory().getURIFactory().create(currentUri, idNode.asText()); + return this.validationContext.getURIFactory().create(currentUri, idNode.asText()); } catch (IllegalArgumentException e) { throw new JsonSchemaException(ValidationMessage.of(ValidatorTypeCode.ID.getValue(), ValidatorTypeCode.ID, idNode.asText(), currentUri.toString())); } diff --git a/src/main/java/com/networknt/schema/JsonSchemaFactory.java b/src/main/java/com/networknt/schema/JsonSchemaFactory.java index 7c1b2d5ae..f5a264a5f 100644 --- a/src/main/java/com/networknt/schema/JsonSchemaFactory.java +++ b/src/main/java/com/networknt/schema/JsonSchemaFactory.java @@ -233,7 +233,7 @@ private JsonSchema newJsonSchema(final URI schemaUri, final JsonNode schemaNode, protected ValidationContext createValidationContext(final JsonNode schemaNode) { final JsonMetaSchema jsonMetaSchema = findMetaSchemaForSchema(schemaNode); - return new ValidationContext(jsonMetaSchema, this); + return new ValidationContext(this.uriFactory, jsonMetaSchema, this); } private JsonMetaSchema findMetaSchemaForSchema(final JsonNode schemaNode) { @@ -246,10 +246,6 @@ private JsonMetaSchema findMetaSchemaForSchema(final JsonNode schemaNode) { return jsonMetaSchema; } - public URIFactory getURIFactory() { - return this.uriFactory; - } - public JsonSchema getSchema(final String schema, final SchemaValidatorsConfig config) { try { final JsonNode schemaNode = mapper.readTree(schema); @@ -286,7 +282,7 @@ public JsonSchema getSchema(final URI schemaUri, final SchemaValidatorsConfig co final URI mappedUri; try { - mappedUri = URI.create(map.getOrDefault(schemaUri.toString(), schemaUri.toString())); + mappedUri = this.uriFactory.create(map.getOrDefault(schemaUri.toString(), schemaUri.toString())); } catch (IllegalArgumentException e) { logger.error("Failed to create URI.", e); throw new JsonSchemaException(e); @@ -297,7 +293,7 @@ public JsonSchema getSchema(final URI schemaUri, final SchemaValidatorsConfig co final JsonMetaSchema jsonMetaSchema = findMetaSchemaForSchema(schemaNode); if (idMatchesSourceUri(jsonMetaSchema, schemaNode, schemaUri)) { - return new JsonSchema(new ValidationContext(jsonMetaSchema, this), mappedUri, schemaNode, true /*retrieved via id, resolving will not change anything*/); + return new JsonSchema(new ValidationContext(this.uriFactory, jsonMetaSchema, this), mappedUri, schemaNode, true /*retrieved via id, resolving will not change anything*/); } return newJsonSchema(mappedUri, schemaNode, config); diff --git a/src/main/java/com/networknt/schema/RefValidator.java b/src/main/java/com/networknt/schema/RefValidator.java index 4c2ca0943..6e268143c 100644 --- a/src/main/java/com/networknt/schema/RefValidator.java +++ b/src/main/java/com/networknt/schema/RefValidator.java @@ -57,7 +57,7 @@ static JsonSchema getRefSchema(JsonSchema parentSchema, ValidationContext valida // This will determine the correct absolute uri for the refUri. This decision will take into // account the current uri of the parent schema. - URI schemaUri = determineSchemaUri(validationContext.getJsonSchemaFactory().getURIFactory(), parentSchema, refUri); + URI schemaUri = determineSchemaUri(validationContext.getURIFactory(), parentSchema, refUri); if (schemaUri == null) { return null; } diff --git a/src/main/java/com/networknt/schema/ValidationContext.java b/src/main/java/com/networknt/schema/ValidationContext.java index fee5e63a7..5638bdad2 100644 --- a/src/main/java/com/networknt/schema/ValidationContext.java +++ b/src/main/java/com/networknt/schema/ValidationContext.java @@ -17,19 +17,25 @@ package com.networknt.schema; import com.fasterxml.jackson.databind.JsonNode; +import com.networknt.schema.uri.URIFactory; public class ValidationContext { + private final URIFactory uriFactory; private final JsonMetaSchema metaSchema; private final JsonSchemaFactory jsonSchemaFactory; private SchemaValidatorsConfig config; - public ValidationContext(JsonMetaSchema metaSchema, JsonSchemaFactory jsonSchemaFactory) { + public ValidationContext(URIFactory uriFactory, JsonMetaSchema metaSchema, JsonSchemaFactory jsonSchemaFactory) { + if (uriFactory == null) { + throw new IllegalArgumentException("URIFactory must not be null"); + } if (metaSchema == null) { throw new IllegalArgumentException("JsonMetaSchema must not be null"); } if (jsonSchemaFactory == null) { throw new IllegalArgumentException("JsonSchemaFactory must not be null"); } + this.uriFactory = uriFactory; this.metaSchema = metaSchema; this.jsonSchemaFactory = jsonSchemaFactory; } @@ -39,6 +45,10 @@ public JsonValidator newValidator(String schemaPath, String keyword /* keyword * return metaSchema.newValidator(this, schemaPath, keyword, schemaNode, parentSchema); } + public URIFactory getURIFactory() { + return this.uriFactory; + } + public JsonSchemaFactory getJsonSchemaFactory() { return jsonSchemaFactory; } diff --git a/src/main/java/com/networknt/schema/uri/URISchemeFetcher.java b/src/main/java/com/networknt/schema/uri/URISchemeFetcher.java index a390c0f5f..60b43f6f4 100644 --- a/src/main/java/com/networknt/schema/uri/URISchemeFetcher.java +++ b/src/main/java/com/networknt/schema/uri/URISchemeFetcher.java @@ -43,9 +43,9 @@ public Map getURIFetchers() { */ public InputStream fetch(final URI uri) throws IOException { final URIFetcher uriFetcher = this.uriFetchers.get(uri.getScheme()); - if (uriFetcher == null) { + if (uriFetcher == null) { throw new IllegalArgumentException(String.format("Unsupported URI scheme encountered: %s", uri.getScheme())); - } + } return uriFetcher.fetch(uri); } }