Skip to content

Commit

Permalink
Fixed validation error reporting to avoid throwing exceptions. Report…
Browse files Browse the repository at this point in the history
  • Loading branch information
david-waltermire authored Jul 4, 2023
1 parent cbeedb8 commit afb5173
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 197 deletions.
181 changes: 0 additions & 181 deletions metaschema-cli/schema-test.json

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,9 @@ public ExitStatus executeCommand(CallingContext callingContext, CommandLine cmdL
LOGGER.info("Validation identified the following in file '{}'.", source);
}

LoggingValidationHandler.handleValidationResults(validationResult);
LoggingValidationHandler.instance().handleValidationResults(validationResult);

if (!cmdLine.hasOption(CLIProcessor.QUIET_OPTION) && LOGGER.isInfoEnabled()) {
if (validationResult.isPassing() && !cmdLine.hasOption(CLIProcessor.QUIET_OPTION) && LOGGER.isInfoEnabled()) {
LOGGER.info("The file '{}' is valid.", source);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,13 @@ public ExitStatus executeCommand(CallingContext callingContext, CommandLine cmdL

if (!schemaValidationResult.isPassing()) {
if (LOGGER.isErrorEnabled()) {
LOGGER.error("The file '{}' has schema validation issue(s). The issues are:", target);
LOGGER.error("The file '{}' has validation issue(s). The issues are:", target);
}
LoggingValidationHandler.handleValidationResults(schemaValidationResult);
LoggingValidationHandler.instance().handleValidationResults(schemaValidationResult);
return ExitCode.FAIL.exit();
}

if (!cmdLine.hasOption(CLIProcessor.QUIET_OPTION) && LOGGER.isInfoEnabled()) {
if (schemaValidationResult.isPassing() && !cmdLine.hasOption(CLIProcessor.QUIET_OPTION) && LOGGER.isInfoEnabled()) {
LOGGER.info("The file '{}' is valid.", target);
}
return ExitCode.OK.exit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,36 @@

public final class LoggingValidationHandler {
private static final Logger LOGGER = LogManager.getLogger(LoggingValidationHandler.class);

private static final LoggingValidationHandler NO_LOG_EXCPTION_INSTANCE = new LoggingValidationHandler(false);
private static final LoggingValidationHandler LOG_EXCPTION_INSTANCE = new LoggingValidationHandler(true);

private LoggingValidationHandler() {
// disable construction
private final boolean logExceptions;

public static LoggingValidationHandler instance() {
return instance(false);
}

public static LoggingValidationHandler instance(boolean logExceptions) {
return logExceptions ? LOG_EXCPTION_INSTANCE : NO_LOG_EXCPTION_INSTANCE;
}

protected LoggingValidationHandler(boolean logExceptions) {
this.logExceptions = logExceptions;
}

public static boolean handleValidationResults(IValidationResult result) {

public boolean isLogExceptions() {
return logExceptions;
}


public boolean handleValidationResults(IValidationResult result) {
handleValidationFindings(result.getFindings());
return result.isPassing();
}

public static void handleValidationFindings(@NonNull List<? extends IValidationFinding> findings) {
public void handleValidationFindings(@NonNull List<? extends IValidationFinding> findings) {
for (IValidationFinding finding : findings) {
if (finding instanceof JsonValidationFinding) {
handleJsonValidationFinding((JsonValidationFinding) finding);
Expand All @@ -72,7 +91,7 @@ public static void handleValidationFindings(@NonNull List<? extends IValidationF
}
}

public static void handleJsonValidationFinding(@NonNull JsonValidationFinding finding) {
protected void handleJsonValidationFinding(@NonNull JsonValidationFinding finding) {
Ansi ansi = generatePreamble(finding.getSeverity());

getLogger(finding).log(
Expand All @@ -86,7 +105,7 @@ public static void handleJsonValidationFinding(@NonNull JsonValidationFinding fi
finding.getDocumentUri().toString()));
}

public static void handleXmlValidationFinding(XmlValidationFinding finding) {
protected void handleXmlValidationFinding(XmlValidationFinding finding) {
Ansi ansi = generatePreamble(finding.getSeverity());
SAXParseException ex = finding.getCause();

Expand All @@ -98,15 +117,15 @@ public static void handleXmlValidationFinding(XmlValidationFinding finding) {
ex.getColumnNumber()));
}

public static void handleConstraintValidationFinding(@NonNull ConstraintValidationFinding finding) {
protected void handleConstraintValidationFinding(@NonNull ConstraintValidationFinding finding) {
Ansi ansi = generatePreamble(finding.getSeverity());

getLogger(finding).log(
ansi.format("[%s] %s", finding.getNode().getMetapath(), finding.getMessage()));
}

@NonNull
private static LogBuilder getLogger(@NonNull IValidationFinding finding) {
protected LogBuilder getLogger(@NonNull IValidationFinding finding) {
LogBuilder retval;
switch (finding.getSeverity()) {
case CRITICAL:
Expand All @@ -125,15 +144,18 @@ private static LogBuilder getLogger(@NonNull IValidationFinding finding) {
throw new IllegalArgumentException("Unknown level: " + finding.getSeverity().name());
}

if (finding.getCause() != null) {
assert retval != null;

if (finding.getCause() != null && isLogExceptions()) {
retval.withThrowable(finding.getCause());
}

return retval;
}

@SuppressWarnings("static-method")
@NonNull
private static Ansi generatePreamble(@NonNull Level level) {
protected Ansi generatePreamble(@NonNull Level level) {
Ansi ansi = ansi().fgBright(Color.WHITE).a('[').reset();

switch (level) {
Expand All @@ -154,6 +176,8 @@ private static Ansi generatePreamble(@NonNull Level level) {
break;
}
ansi = ansi.fgBright(Color.WHITE).a("] ").reset();

assert ansi != null;
return ansi;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ void testMetaschemaValidate() {
void testMetaschemaGenerateSchema() {
String[] args = { "generate-schema", "--overwrite", "--as", "JSON",
"../metaschema-java-codegen/src/test/resources/metaschema/fields_with_flags/metaschema.xml",
"schema-test.json" };
"target/schema-test.json" };
evaluateResult(CLI.runCli(args), ExitCode.OK);
}

Expand Down

0 comments on commit afb5173

Please sign in to comment.