Merge branch 'branch-1.1.x'

# Conflicts:
#	pom.xml
#	src/main/java/de/kosit/validationtool/impl/tasks/SchemaValidationAction.java
#	src/test/java/de/kosit/validationtool/impl/SchemaValidatorActionTest.java
This commit is contained in:
Andreas Penski (init) 2020-01-23 16:43:10 +01:00
commit 382e1a5a72
3 changed files with 26 additions and 10 deletions

View file

@ -102,6 +102,10 @@ public interface CheckAction {
this.reportInput.getProcessingError().getError().addAll(errors); this.reportInput.getProcessingError().getError().addAll(errors);
} }
public void addProcessingError(final String msg) {
stopProcessing(msg);
}
/** /**
* Gibt den Namen des Prüflings zurück, dabei werden etwaige Pfadinformationen abgeschnitten. * Gibt den Namen des Prüflings zurück, dabei werden etwaige Pfadinformationen abgeschnitten.
* *

View file

@ -142,7 +142,10 @@ public class SchemaValidationAction implements CheckAction {
validator.validate(validateInput.getSource()); validator.validate(validateInput.getSource());
return new Result<>(!errorHandler.hasErrors(), errorHandler.getErrors()); return new Result<>(!errorHandler.hasErrors(), errorHandler.getErrors());
} catch (final SAXException | SaxonApiException | IOException e) { } catch (final SAXException | SaxonApiException | IOException e) {
throw new IllegalStateException("Error validating document", e); final String msg = String.format("Error processing schema validation for scenario %s", scenarioType.getName());
log.error(msg, e);
results.addProcessingError(msg);
return new Result<>(Boolean.FALSE);
} }
} }

View file

@ -28,6 +28,7 @@ import org.oclc.purl.dsdl.svrl.SchematronOutput;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.impl.CollectingErrorEventHandler; import de.kosit.validationtool.impl.CollectingErrorEventHandler;
import de.kosit.validationtool.impl.ContentRepository; import de.kosit.validationtool.impl.ContentRepository;
@ -50,17 +51,20 @@ import net.sf.saxon.s9api.XsltTransformer;
* @author Andreas Penski * @author Andreas Penski
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j
public class SchematronValidationAction implements CheckAction { public class SchematronValidationAction implements CheckAction {
private final ContentRepository repository; private final ContentRepository repository;
private final ConversionService conversionService; private final ConversionService conversionService;
private List<ValidationResultsSchematron> validate(final XdmNode document, final ScenarioType scenario) { private List<ValidationResultsSchematron> validate(final Bag results, final XdmNode document, final ScenarioType scenario) {
return scenario.getSchematronValidations().stream().map(v -> validate(document, v)).collect(Collectors.toList()); return scenario.getSchematronValidations().stream().map(v -> validate(results, document, v)).collect(Collectors.toList());
} }
private ValidationResultsSchematron validate(final XdmNode document, final BaseScenario.Transformation validation) { private ValidationResultsSchematron validate(final Bag results, final XdmNode document, final BaseScenario.Transformation validation) {
final ValidationResultsSchematron s = new ValidationResultsSchematron();
s.setResource(validation.getResourceType());
try { try {
final XsltTransformer transformer = validation.getExecutable().load(); final XsltTransformer transformer = validation.getExecutable().load();
// resolving nur relative zum Repository // resolving nur relative zum Repository
@ -73,29 +77,34 @@ public class SchematronValidationAction implements CheckAction {
transformer.setDestination(new DOMDestination(result)); transformer.setDestination(new DOMDestination(result));
transformer.setInitialContextNode(document); transformer.setInitialContextNode(document);
transformer.transform(); transformer.transform();
final ValidationResultsSchematron s = new ValidationResultsSchematron();
s.setResource(validation.getResourceType());
final ValidationResultsSchematron.Results r = new ValidationResultsSchematron.Results(); final ValidationResultsSchematron.Results r = new ValidationResultsSchematron.Results();
r.setSchematronOutput(this.conversionService.readDocument(new DOMSource(result), SchematronOutput.class)); r.setSchematronOutput(this.conversionService.readDocument(new DOMSource(result), SchematronOutput.class));
s.setResults(r); s.setResults(r);
return s;
} catch (final SaxonApiException e) { } catch (final SaxonApiException e) {
throw new IllegalStateException("Can not run schematron validation", e); final String msg = String.format("Error processing schematron validation %s", validation.getResourceType().getName());
log.error(msg, e);
results.addProcessingError(msg);
} }
return s;
} }
@Override @Override
public void check(final Bag results) { public void check(final Bag results) {
final CreateReportInput report = results.getReportInput(); final CreateReportInput report = results.getReportInput();
final List<ValidationResultsSchematron> validationResult = validate(results.getParserResult().getObject(), final List<ValidationResultsSchematron> validationResult = validate(results, results.getParserResult().getObject(),
results.getScenarioSelectionResult().getObject()); results.getScenarioSelectionResult().getObject());
report.getValidationResultsSchematron().addAll(validationResult); report.getValidationResultsSchematron().addAll(validationResult);
} }
@Override @Override
public boolean isSkipped(final Bag results) { public boolean isSkipped(final Bag results) {
return hasNoSchematrons(results.getScenarioSelectionResult().getObject()); return hasNoSchematrons(results.getScenarioSelectionResult().getObject()) || isSchemaInvalid(results);
}
private static boolean isSchemaInvalid(final Bag results) {
return results.getSchemaValidationResult() == null || results.getSchemaValidationResult().isInvalid();
} }
private static boolean hasNoSchematrons(final ScenarioType object) { private static boolean hasNoSchematrons(final ScenarioType object) {