@Override public void validate(final ValidationReport report, final JsonNode instance) { final JsonNode oldParent = report.getSchema(); report.setSchema(parent); for (final KeywordValidator validator : validators) validator.validateInstance(report, instance); if (!(instance.isContainerNode() || report.isSuccess())) { report.setSchema(oldParent); return; } final JsonPointer ptr = report.getPath(); JsonPointer current; if (instance.isArray()) { JsonNode subSchema; int i = 0; for (final JsonNode element : instance) { current = ptr.append(i); report.setPath(current); subSchema = arrayPath(i); JsonSchema.fromNode(parent, subSchema).validate(report, element); i++; } report.setSchema(oldParent); report.setPath(ptr); return; } // Can only be an object now final Map<String, JsonNode> map = CollectionUtils.toMap(instance.fields()); String key; JsonNode value; for (final Map.Entry<String, JsonNode> entry : map.entrySet()) { key = entry.getKey(); value = entry.getValue(); current = ptr.append(key); report.setPath(current); for (final JsonNode subSchema : objectPath(key)) JsonSchema.fromNode(parent, subSchema).validate(report, value); } report.setSchema(oldParent); report.setPath(ptr); }
@Override public void visitChildren(ModelHandler modelHandler) { super.visitChildren(modelHandler); for (JsonTable jsonTable : tables) { jsonTable.accept(modelHandler); } }