for (ProcessingMessage processingMessage : validate) { String fieldPointer = ""; if (processingMessage.asJson().get("instance") != null && processingMessage.asJson().get("instance").get("pointer") != null) { fieldPointer = String.valueOf(processingMessage.asJson().get("instance").get("pointer")).replaceAll("\"", ""); " \"xpath\": \"\"" + NEW_LINE + " }"); } else if (String.valueOf(processingMessage.asJson().get("keyword")).equals("\"oneOf\"")) { StringBuilder oneOfErrorMessage = new StringBuilder("oneOf of the following must be specified "); if (fieldPointer.isEmpty()) { )); } else { for (JsonNode jsonNode : processingMessage.asJson().get("reports")) { if (jsonNode.get(0) != null && jsonNode.get(0).get("required") != null && jsonNode.get(0).get("required").get(0) != null) { oneOfErrorMessage.append(String.valueOf(jsonNode.get(0).get("required").get(0))).append(" "); oneOfErrorMessage.append(" but ").append(String.valueOf(processingMessage.asJson().get("matched"))).append(" found"); validationErrors.add(oneOfErrorMessage.toString() + (fieldPointer.isEmpty() ? "" : " for field \"" + fieldPointer + "\"")); } else if (fieldPointer.endsWith("/times") && processingMessage.toString().contains("has properties which are not allowed by the schema") && String.valueOf(processingMessage.asJson().get("schema")).contains("verificationTimes")) { validationErrors.add(processingMessage.getMessage() + " for field \"" + fieldPointer + "\", allowed fields are [\"atLeast\", \"atMost\"]"); } else {
private ProcessingMessage collectSyntaxErrors(final ProcessingReport report) { /* * OK, that's for issue #99 but that's ugly nevertheless. * * We want syntax error messages to appear in the exception text. */ final String msg = syntaxMessages.getMessage("core.invalidSchema"); final ArrayNode arrayNode = JacksonUtils.nodeFactory().arrayNode(); JsonNode node; for (final ProcessingMessage message: report) { node = message.asJson(); if ("syntax".equals(node.path("domain").asText())) arrayNode.add(node); } final StringBuilder sb = new StringBuilder(msg); sb.append("\nSyntax errors:\n"); sb.append(JacksonUtils.prettyPrint(arrayNode)); return new ProcessingMessage().setMessage(sb.toString()); } }
@Override protected void checkKoKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), oneReport); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.common.schema.noMatch", 2)) .hasField("reports", reports); }
@Override protected void checkKoKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), oneReport); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.common.schema.noMatch", 2)) .hasField("reports", reports); }
@Override protected void checkKoKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), oneReport); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.draftv4.oneOf.fail", 0, 2)) .hasField("reports", reports).hasField("nrSchemas", 2) .hasField("matched", 0); }
@Override protected void checkKoKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), oneReport); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.draftv4.allOf.fail", 0, 2)) .hasField("reports", reports).hasField("nrSchemas", 2) .hasField("matched", 0); }
@Override protected void checkOkKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), FACTORY.arrayNode()); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.draftv4.allOf.fail", 1, 2)) .hasField("reports", reports).hasField("nrSchemas", 2) .hasField("matched", 1); }
@Override protected void checkOkKo(final ProcessingReport report) throws ProcessingException { final ArgumentCaptor<ProcessingMessage> captor = ArgumentCaptor.forClass(ProcessingMessage.class); verify(report).error(captor.capture()); final ProcessingMessage message = captor.getValue(); final ObjectNode reports = FACTORY.objectNode(); final ArrayNode oneReport = FACTORY.arrayNode(); oneReport.add(MSG.asJson()); reports.put(ptr1.toString(), FACTORY.arrayNode()); reports.put(ptr2.toString(), oneReport); assertMessage(message) .isValidationError(keyword, BUNDLE.printf("err.draftv3.disallow.schema", 1, 2)) .hasField("matched", 1).hasField("nrSchemas", 2) .hasField("reports", reports); }
/** * Returns set of {@link SwaggerError} created from a validation message. * * @param message * to process * @return set of validation errors */ public Set<SwaggerError> processMessage(ProcessingMessage message) { return fromNode(message.asJson(), 0); }
@Override public JsonNode asJson() { final ArrayNode ret = FACTORY.arrayNode(); for (final ProcessingMessage message: messages) ret.add(message.asJson()); return ret; }
@Override public JsonNode asJson() { final ArrayNode ret = FACTORY.arrayNode(); for (final ProcessingMessage message: messages) ret.add(message.asJson()); return ret; }
private ProcessingMessageAssert(final ProcessingMessage actual) { super(ProcessingMessageAssert.class, actual); msg = actual.asJson(); }
@Override public JsonNode asJson() { final ArrayNode ret = FACTORY.arrayNode(); for (final ProcessingMessage message: messages) ret.add(message.asJson()); return ret; }
private static boolean append(final List<Violation> violations, final ProcessingMessage message, final Optional<String> requiredLevel) { if (requiredLevel.isPresent()) { final Optional<String> level = ofNullable(message.asJson()).flatMap(node -> ofNullable(node.get("level"))) .flatMap(node -> ofNullable(node.textValue())); if (!level.equals(requiredLevel)) { return false; // skip } } final Optional<String> property = ofNullable(message.asJson()).flatMap(node -> ofNullable(node.get("instance"))) .flatMap(node -> ofNullable(node.get("pointer"))).flatMap(node -> ofNullable(node.textValue())); final Optional<String> error = ofNullable(message.asJson()).flatMap(node -> ofNullable(node.get("domain"))) .flatMap(node -> ofNullable(node.textValue())); violations.add(new Violation.Builder().error(error.orElse("")).message(message.getMessage()).property(property.orElse("")).build()); return true; }
public String encode(ProcessingReport report, JsonNode instance) { ObjectNode objectNode = Json.nodeFactory().objectNode(); objectNode.set(JSONConstants.INSTANCE, instance); ArrayNode errors = objectNode.putArray(JSONConstants.ERRORS); for (ProcessingMessage m : report) { errors.add(m.asJson()); } return Json.print(objectNode); }
private static boolean fillMessages(final ProcessingReport report, final MessageBuilder builder) { final Severity severity = LEVEL_MAP.get(report.getLogLevel()); final ArrayNode node = JacksonUtils.nodeFactory().arrayNode(); for (final ProcessingMessage processingMessage : report) { node.add(processingMessage.asJson()); } final String reportAsString = JacksonUtils.prettyPrint(node); final Message message = new Message("", reportAsString, severity); builder.append(message); return report.isSuccess(); }
private ConnectJsonSchemaValidationResult validate(JsonNode descriptorNode, JsonSchema schema) { ConnectJsonSchemaValidationResult result; try { ListProcessingReport report = (ListProcessingReport) schema.validate(descriptorNode); result = new DescriptorValidationResult(report); } catch (ProcessingException e) { result = new DescriptorValidationResult(true, false, e.getProcessingMessage().asJson().toString(), e.getProcessingMessage().toString()); } return result; }
private ConnectJsonSchemaValidationResult validate(JsonNode descriptorNode, JsonSchema schema) { ConnectJsonSchemaValidationResult result; try { ListProcessingReport report = (ListProcessingReport) schema.validate(descriptorNode); result = new DescriptorValidationResult(report); } catch (ProcessingException e) { result = new DescriptorValidationResult(true, false, e.getProcessingMessage().asJson().toString(), e.getProcessingMessage().toString()); } return result; }
@Test public void messageInRawJsonReflectsArguments() { final ProcessingMessage message = new ProcessingMessage() .setMessage("Hello %s!").putArgument("greeted", "world"); assertEquals(message.asJson().get("message").textValue(), "Hello world!"); }
@Test(dataProvider = "validationPairProvider") public void validateTestData(SchemaFile schemaFile, DataFile dataFile) throws Exception { ProcessingReport report = schemaFile.getJsonSchema().validate(dataFile.getData()); DataFileValidationResult validationResult = report.isSuccess() ? PASS : FAIL; if (validationResult != dataFile.getExpectedValidationResult()) { for (ProcessingMessage processingMessage : report) { logger.error(JacksonUtils.prettyPrint(processingMessage.asJson())); } } assertThat(dataFile.getExpectedValidationResult(), equalTo(validationResult)); }