Skip to content

Commit

Permalink
feat/networknt#199-fail-fast - Moving fail-fast flat to SchemaValidat…
Browse files Browse the repository at this point in the history
…orsConfig.java.
  • Loading branch information
khiftikhar committed Oct 27, 2019
1 parent 9b4f10c commit 5e7f6d6
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 28 deletions.
3 changes: 2 additions & 1 deletion src/main/java/com/networknt/schema/BaseJsonValidator.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public abstract class BaseJsonValidator implements JsonValidator {

public BaseJsonValidator(String schemaPath, JsonNode schemaNode, JsonSchema parentSchema,
ValidatorTypeCode validatorType, ValidationContext validationContext) {
this(schemaPath, schemaNode, parentSchema, validatorType, false , validationContext.isFailFast());
this(schemaPath, schemaNode, parentSchema, validatorType, false ,
validationContext.getConfig() != null && validationContext.getConfig().isFailFast());
this.config = validationContext.getConfig() == null ? new SchemaValidatorsConfig() : validationContext.getConfig();
}

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/com/networknt/schema/JsonSchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ public JsonSchema(ValidationContext validationContext, URI baseUri, JsonNode sch

private JsonSchema(ValidationContext validationContext, String schemaPath, URI currentUri, JsonNode schemaNode,
JsonSchema parent, boolean suppressSubSchemaRetrieval) {
super(schemaPath, schemaNode, parent, null, suppressSubSchemaRetrieval, validationContext.isFailFast());
super(schemaPath, schemaNode, parent, null, suppressSubSchemaRetrieval,
validationContext.getConfig() != null && validationContext.getConfig().isFailFast());
this.validationContext = validationContext;
this.config = validationContext.getConfig();
this.currentUri = this.combineCurrentUriWithIds(currentUri, schemaNode);
Expand Down
20 changes: 1 addition & 19 deletions src/main/java/com/networknt/schema/JsonSchemaFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,8 @@
public class JsonSchemaFactory {
private static final Logger logger = LoggerFactory
.getLogger(JsonSchemaFactory.class);
private final boolean failFast;

public boolean isFailFast() {
return this.failFast;
}


public static class Builder {
private boolean failFast;
private ObjectMapper objectMapper = new ObjectMapper();
private String defaultMetaSchemaURI;
private final Map<String, URIFactory> uriFactoryMap = new HashMap<String, URIFactory>();
Expand Down Expand Up @@ -78,15 +71,6 @@ public Builder() {
this.uriFetcherMap.put(scheme, classpathURLFetcher);
}
}
/**
* When enabled, {@link JsonValidator#validate(JsonNode, JsonNode, String)}
* or {@link JsonValidator#validate(JsonNode)} doesn't return any {@link Set}&lt;{@link ValidationMessage}&gt;,
* instead a {@link JsonSchemaException} is thrown as soon as a validation errors is discovered.
* */
public Builder failFast(){
this.failFast = true;
return this;
}

public Builder objectMapper(final ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
Expand Down Expand Up @@ -146,7 +130,6 @@ public Builder addUriMappings(final Map<String, String> map) {
public JsonSchemaFactory build() {
// create builtin keywords with (custom) formats.
return new JsonSchemaFactory(
failFast,
objectMapper == null ? new ObjectMapper() : objectMapper,
defaultMetaSchemaURI,
new URISchemeFactory(uriFactoryMap),
Expand All @@ -165,13 +148,12 @@ public JsonSchemaFactory build() {
private final Map<String, String> uriMap;

private JsonSchemaFactory(
boolean failFast, final ObjectMapper mapper,
final ObjectMapper mapper,
final String defaultMetaSchemaURI,
final URISchemeFactory uriFactory,
final URISchemeFetcher uriFetcher,
final Map<String, JsonMetaSchema> jsonMetaSchemas,
final Map<String, String> uriMap) {
this.failFast = failFast;
if (mapper == null) {
throw new IllegalArgumentException("ObjectMapper must not be null");
}
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/com/networknt/schema/SchemaValidatorsConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,20 @@

package com.networknt.schema;

import com.fasterxml.jackson.databind.JsonNode;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class SchemaValidatorsConfig {
/**
* when validate type, if TYPE_LOOSE = true, will try to convert string to different types to match the type defined in schema.
*/
private boolean typeLoose;
/**
* When set to true, validator process is stop immediately when a very first validation error is discovered.
*/
private boolean failFast;

/**
* Map of public, normally internet accessible schema URLs to alternate locations; this allows for offline
Expand All @@ -50,6 +56,19 @@ public void setTypeLoose(boolean typeLoose) {
this.typeLoose = typeLoose;
}

/**
* When enabled, {@link JsonValidator#validate(JsonNode, JsonNode, String)}
* or {@link JsonValidator#validate(JsonNode)} doesn't return any {@link Set}&lt;{@link ValidationMessage}&gt;,
* instead a {@link JsonSchemaException} is thrown as soon as a validation errors is discovered.
* */
public void setFailFast(final boolean failFast) {
this.failFast = failFast;
}

public boolean isFailFast(){
return this.failFast;
}

public Map<String, String> getUriMappings() {
// return a copy of the mappings
return new HashMap<String, String>(uriMappings);
Expand Down
5 changes: 0 additions & 5 deletions src/main/java/com/networknt/schema/ValidationContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ public class ValidationContext {
private final JsonSchemaFactory jsonSchemaFactory;
private SchemaValidatorsConfig config;
private final Map<String, JsonSchemaRef> refParsingInProgress = new HashMap<>();
private final boolean failFast;

public ValidationContext(URIFactory uriFactory, JsonMetaSchema metaSchema, JsonSchemaFactory jsonSchemaFactory, SchemaValidatorsConfig config) {
if (uriFactory == null) {
Expand All @@ -44,7 +43,6 @@ public ValidationContext(URIFactory uriFactory, JsonMetaSchema metaSchema, JsonS
this.metaSchema = metaSchema;
this.jsonSchemaFactory = jsonSchemaFactory;
this.config = config;
this.failFast = jsonSchemaFactory.isFailFast();
}

public JsonValidator newValidator(String schemaPath, String keyword /* keyword */, JsonNode schemaNode,
Expand Down Expand Up @@ -76,7 +74,4 @@ public JsonSchemaRef getReferenceParsingInProgress(String refValue) {
return refParsingInProgress.get(refValue);
}

public boolean isFailFast() {
return this.failFast;
}
}
5 changes: 3 additions & 2 deletions src/test/java/com/networknt/schema/JsonSchemaTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -386,12 +386,13 @@ private Set<ValidationMessage> validateFailingFastSchemaFor(final String schemaF
final ObjectMapper objectMapper = new ObjectMapper();
final JsonNode schema = getJsonNodeFromResource(objectMapper, schemaFileName);
final JsonNode dataFile = getJsonNodeFromResource(objectMapper, dataFileName);
final SchemaValidatorsConfig config = new SchemaValidatorsConfig();
config.setFailFast(true);
return JsonSchemaFactory
.builder(JsonSchemaFactory.getInstance())
.objectMapper(objectMapper)
.failFast()
.build()
.getSchema(schema)
.getSchema(schema, config)
.validate(dataFile);
}

Expand Down

0 comments on commit 5e7f6d6

Please sign in to comment.