private void processObject(final ProcessingReport report, final FullData input) throws ProcessingException { final SchemaTree tree = input.getSchema(); final JsonTree instance = input.getInstance(); final JsonNode schema = tree.getNode(); final JsonNode node = instance.getNode(); final JsonNode digest = ObjectSchemaDigester.getInstance() .digest(schema); final ObjectSchemaSelector selector = new ObjectSchemaSelector(digest); final List<String> fields = Lists.newArrayList(node.fieldNames()); Collections.sort(fields); FullData data; JsonTree newInstance; for (final String field: fields) { newInstance = instance.append(JsonPointer.of(field)); data = input.withInstance(newInstance); for (final JsonPointer ptr: selector.selectSchemas(field)) { data = data.withSchema(tree.append(ptr)); process(report, data); } } }
private void processArray(final ProcessingReport report, final FullData input) throws ProcessingException { final SchemaTree tree = input.getSchema(); final JsonTree instance = input.getInstance(); final JsonNode schema = tree.getNode(); final JsonNode node = instance.getNode(); final JsonNode digest = ArraySchemaDigester.getInstance() .digest(schema); final ArraySchemaSelector selector = new ArraySchemaSelector(digest); final int size = node.size(); FullData data; JsonTree newInstance; for (int index = 0; index < size; index++) { newInstance = instance.append(JsonPointer.of(index)); data = input.withInstance(newInstance); for (final JsonPointer ptr: selector.selectSchemas(index)) { data = data.withSchema(tree.append(ptr)); process(report, data); } } }