@Override public ValidatorList process(final ProcessingReport report, final SchemaContext input) throws ProcessingException { final ValueHolder<SchemaTree> in = ValueHolder.hold("schema", input.getSchema()); /* * We have to go through an intermediate report. If we re-enter this * function with a report already telling there is an error, we don't * want to wrongly report that the schema is invalid. */ final ProcessingReport r = new ListProcessingReport(report); final ValueHolder<SchemaTree> out = resolver.process(r, in); report.mergeWith(r); if (!r.isSuccess()) return null; final SchemaContext output = new SchemaContext(out.getValue(), input.getInstanceType()); return builder.process(report, output); }
private static ValueHolder<SchemaTree> holder(final JsonNode node) { return ValueHolder.<SchemaTree>hold("schema", new CanonicalSchemaTree(SchemaKey.anonymousKey(), node)); } }
/** * Create a new processing message template depending on the stored value * * @return a new {@link ProcessingMessage} */ @Override public final ProcessingMessage newMessage() { return new ProcessingMessage().put(name, valueAsJson()); } }
@Test public void checkingWillNotDiveIntoUnknownKeywords() throws ProcessingException { final ObjectNode node = FACTORY.objectNode(); node.put(K1, K1); final ObjectNode schema = FACTORY.objectNode(); schema.put("foo", node); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), schema); final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree); processor.process(report, holder); verify(checker, never()).checkSyntax(anyCollectionOf(JsonPointer.class), any(MessageBundle.class), anyReport(), anySchema()); }
@Override protected int doHash(final ValueHolder<SchemaTree> t) { return t.getValue().hashCode(); } }
/** * Create a new processing message template depending on the stored value * * @return a new {@link ProcessingMessage} */ @Override public final ProcessingMessage newMessage() { return new ProcessingMessage().put(name, valueAsJson()); } }
@Test public void errorsAreCorrectlyReported() throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); final ObjectNode schema = FACTORY.objectNode(); schema.put(K2, ""); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), schema); final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree); processor.process(report, holder); verify(report).log(same(LogLevel.ERROR), captor.capture()); final ProcessingMessage msg = captor.getValue(); assertMessage(msg).hasMessage(ERRMSG); }
@Override public JsonRef apply(final ValueHolder<SchemaTree> input) { return input.getValue().getDollarSchema(); } };
/** * Create a new processing message template depending on the stored value * * @return a new {@link ProcessingMessage} */ @Override public final ProcessingMessage newMessage() { return new ProcessingMessage().put(name, valueAsJson()); } }
@Test public void danglingRefsAreReported() { final ObjectNode node = JacksonUtils.nodeFactory().objectNode(); node.put("$ref", "#/a"); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), node); final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree); try { processor.process(report, holder); fail("No exception thrown!"); } catch (ProcessingException e) { assertMessage(e.getProcessingMessage()) .hasMessage(BUNDLE.printf("refProcessing.danglingRef", "#/a")); } } }
final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree);
@Test public void refLoopsAreReported() { final ObjectNode node = JacksonUtils.nodeFactory().objectNode(); node.put("$ref", "#"); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), node); final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree); try { processor.process(report, holder); fail("No exception thrown!"); } catch (ProcessingException e) { assertMessage(e.getProcessingMessage()) .hasMessage(BUNDLE.printf("refProcessing.refLoop", "#")); } }
@Test(dataProvider = "notSchemas") public void syntaxProcessorYellsOnNonSchemas(final JsonNode node) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); final SchemaTree tree = new CanonicalSchemaTree(SchemaKey.anonymousKey(), node); final ValueHolder<SchemaTree> holder = ValueHolder.hold("schema", tree); processor.process(report, holder); verify(report).log(same(LogLevel.ERROR), captor.capture()); final ProcessingMessage message = captor.getValue(); final NodeType type = NodeType.getNodeType(node); assertMessage(message) .hasMessage(BUNDLE.printf("core.notASchema", type)) .hasField("found", type); }