1*78c4dd6aSAndroid Build Coastguard Worker## Quick Start 2*78c4dd6aSAndroid Build Coastguard Worker 3*78c4dd6aSAndroid Build Coastguard WorkerTo use the validator, we need to have the `JsonSchema` loaded and cached. 4*78c4dd6aSAndroid Build Coastguard Worker 5*78c4dd6aSAndroid Build Coastguard WorkerFor simplicity the following test loads a schema from a `String` or `JsonNode`. Note that loading a schema in this manner is not recommended as a relative `$ref` will not be properly resolved as there is no base IRI. 6*78c4dd6aSAndroid Build Coastguard Worker 7*78c4dd6aSAndroid Build Coastguard WorkerThe preferred method of loading a schema is by using a `SchemaLocation` and by configuring the appropriate `SchemaMapper` and `SchemaLoader` on the `JsonSchemaFactory`. 8*78c4dd6aSAndroid Build Coastguard Worker 9*78c4dd6aSAndroid Build Coastguard Worker```java 10*78c4dd6aSAndroid Build Coastguard Workerpackage com.example; 11*78c4dd6aSAndroid Build Coastguard Worker 12*78c4dd6aSAndroid Build Coastguard Workerimport static org.junit.jupiter.api.Assertions.assertEquals; 13*78c4dd6aSAndroid Build Coastguard Worker 14*78c4dd6aSAndroid Build Coastguard Workerimport java.util.Set; 15*78c4dd6aSAndroid Build Coastguard Worker 16*78c4dd6aSAndroid Build Coastguard Workerimport org.junit.jupiter.api.Test; 17*78c4dd6aSAndroid Build Coastguard Worker 18*78c4dd6aSAndroid Build Coastguard Workerimport com.fasterxml.jackson.core.JsonProcessingException; 19*78c4dd6aSAndroid Build Coastguard Workerimport com.fasterxml.jackson.databind.JsonMappingException; 20*78c4dd6aSAndroid Build Coastguard Workerimport com.fasterxml.jackson.databind.JsonNode; 21*78c4dd6aSAndroid Build Coastguard Workerimport com.networknt.schema.*; 22*78c4dd6aSAndroid Build Coastguard Workerimport com.networknt.schema.serialization.JsonMapperFactory; 23*78c4dd6aSAndroid Build Coastguard Worker 24*78c4dd6aSAndroid Build Coastguard Workerpublic class SampleTest { 25*78c4dd6aSAndroid Build Coastguard Worker @Test 26*78c4dd6aSAndroid Build Coastguard Worker void schemaFromString() throws JsonMappingException, JsonProcessingException { 27*78c4dd6aSAndroid Build Coastguard Worker JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); 28*78c4dd6aSAndroid Build Coastguard Worker /* 29*78c4dd6aSAndroid Build Coastguard Worker * This should be cached for performance. 30*78c4dd6aSAndroid Build Coastguard Worker * 31*78c4dd6aSAndroid Build Coastguard Worker * Loading from a String is not recommended as there is no base IRI to use for 32*78c4dd6aSAndroid Build Coastguard Worker * resolving relative $ref. 33*78c4dd6aSAndroid Build Coastguard Worker */ 34*78c4dd6aSAndroid Build Coastguard Worker JsonSchema schemaFromString = factory 35*78c4dd6aSAndroid Build Coastguard Worker .getSchema("{\"enum\":[1, 2, 3, 4],\"enumErrorCode\":\"Not in the list\"}"); 36*78c4dd6aSAndroid Build Coastguard Worker Set<ValidationMessage> errors = schemaFromString.validate("7", InputFormat.JSON); 37*78c4dd6aSAndroid Build Coastguard Worker assertEquals(1, errors.size()); 38*78c4dd6aSAndroid Build Coastguard Worker } 39*78c4dd6aSAndroid Build Coastguard Worker 40*78c4dd6aSAndroid Build Coastguard Worker @Test 41*78c4dd6aSAndroid Build Coastguard Worker void schemaFromJsonNode() throws JsonMappingException, JsonProcessingException { 42*78c4dd6aSAndroid Build Coastguard Worker JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); 43*78c4dd6aSAndroid Build Coastguard Worker JsonNode schemaNode = JsonMapperFactory.getInstance().readTree( 44*78c4dd6aSAndroid Build Coastguard Worker "{\"$schema\": \"http://json-schema.org/draft-06/schema#\", \"properties\": { \"id\": {\"type\": \"number\"}}}"); 45*78c4dd6aSAndroid Build Coastguard Worker /* 46*78c4dd6aSAndroid Build Coastguard Worker * This should be cached for performance. 47*78c4dd6aSAndroid Build Coastguard Worker * 48*78c4dd6aSAndroid Build Coastguard Worker * Loading from a JsonNode is not recommended as there is no base IRI to use for 49*78c4dd6aSAndroid Build Coastguard Worker * resolving relative $ref. 50*78c4dd6aSAndroid Build Coastguard Worker * 51*78c4dd6aSAndroid Build Coastguard Worker * Note that the V4 from the factory is the default version if $schema is not 52*78c4dd6aSAndroid Build Coastguard Worker * specified. As $schema is specified in the data, V6 is used. 53*78c4dd6aSAndroid Build Coastguard Worker */ 54*78c4dd6aSAndroid Build Coastguard Worker JsonSchema schemaFromNode = factory.getSchema(schemaNode); 55*78c4dd6aSAndroid Build Coastguard Worker /* 56*78c4dd6aSAndroid Build Coastguard Worker * By default all schemas are preloaded eagerly but ref resolve failures are not 57*78c4dd6aSAndroid Build Coastguard Worker * thrown. You check if there are issues with ref resolving using 58*78c4dd6aSAndroid Build Coastguard Worker * initializeValidators() 59*78c4dd6aSAndroid Build Coastguard Worker */ 60*78c4dd6aSAndroid Build Coastguard Worker schemaFromNode.initializeValidators(); 61*78c4dd6aSAndroid Build Coastguard Worker Set<ValidationMessage> errors = schemaFromNode.validate("{\"id\": \"2\"}", InputFormat.JSON); 62*78c4dd6aSAndroid Build Coastguard Worker assertEquals(1, errors.size()); 63*78c4dd6aSAndroid Build Coastguard Worker } 64*78c4dd6aSAndroid Build Coastguard Worker} 65*78c4dd6aSAndroid Build Coastguard Worker``` 66