| ## Quick Start |
| |
| To use the validator, we need to have both the `JsonSchema` object and `JsonNode` object constructed. |
| There are many ways to do that. |
| Here is base test class, that shows several ways to construct these from `String`, `Stream`, `Url`, and `JsonNode`. |
| Please pay attention to the `JsonSchemaFactory` class as it is the way to construct the `JsonSchema` object. |
| |
| ```java |
| public class BaseJsonSchemaValidatorTest { |
| |
| private ObjectMapper mapper = new ObjectMapper(); |
| |
| protected JsonNode getJsonNodeFromClasspath(String name) throws IOException { |
| InputStream is1 = Thread.currentThread().getContextClassLoader() |
| .getResourceAsStream(name); |
| return mapper.readTree(is1); |
| } |
| |
| protected JsonNode getJsonNodeFromStringContent(String content) throws IOException { |
| return mapper.readTree(content); |
| } |
| |
| protected JsonNode getJsonNodeFromUrl(String url) throws IOException { |
| return mapper.readTree(new URL(url)); |
| } |
| |
| protected JsonSchema getJsonSchemaFromClasspath(String name) { |
| JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); |
| InputStream is = Thread.currentThread().getContextClassLoader() |
| .getResourceAsStream(name); |
| return factory.getSchema(is); |
| } |
| |
| protected JsonSchema getJsonSchemaFromStringContent(String schemaContent) { |
| JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); |
| return factory.getSchema(schemaContent); |
| } |
| |
| protected JsonSchema getJsonSchemaFromUrl(String uri) throws URISyntaxException { |
| JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); |
| return factory.getSchema(new URI(uri)); |
| } |
| |
| protected JsonSchema getJsonSchemaFromJsonNode(JsonNode jsonNode) { |
| JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); |
| return factory.getSchema(jsonNode); |
| } |
| |
| // Automatically detect version for given JsonNode |
| protected JsonSchema getJsonSchemaFromJsonNodeAutomaticVersion(JsonNode jsonNode) { |
| JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersionDetector.detect(jsonNode)); |
| return factory.getSchema(jsonNode); |
| } |
| |
| } |
| ``` |
| And the following is one of the test cases in one of the test classes that extend from the above base class. As you can see, it constructs `JsonSchema` and `JsonNode` from `String`. |
| |
| ```java |
| class Sample extends BaseJsonSchemaValidatorTest { |
| |
| void test() { |
| JsonSchema schema = getJsonSchemaFromStringContent("{\"enum\":[1, 2, 3, 4],\"enumErrorCode\":\"Not in the list\"}"); |
| JsonNode node = getJsonNodeFromStringContent("7"); |
| Set<ValidationMessage> errors = schema.validate(node); |
| assertThat(errors.size(), is(1)); |
| |
| // With automatic version detection |
| JsonNode schemaNode = getJsonNodeFromStringContent( |
| "{\"$schema\": \"http://json-schema.org/draft-06/schema#\", \"properties\": { \"id\": {\"type\": \"number\"}}}"); |
| JsonSchema schema = getJsonSchemaFromJsonNodeAutomaticVersion(schemaNode); |
| |
| schema.initializeValidators(); // by default all schemas are loaded lazily. You can load them eagerly via |
| // initializeValidators() |
| |
| JsonNode node = getJsonNodeFromStringContent("{\"id\": \"2\"}"); |
| Set<ValidationMessage> errors = schema.validate(node); |
| assertThat(errors.size(), is(1)); |
| } |
| |
| } |
| |
| ``` |