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);
}
public void addProcessingError(final String msg) {
stopProcessing(msg);
}
/**
* 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());
return new Result<>(!errorHandler.hasErrors(), errorHandler.getErrors());
} 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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.impl.CollectingErrorEventHandler;
import de.kosit.validationtool.impl.ContentRepository;
@ -50,17 +51,20 @@ import net.sf.saxon.s9api.XsltTransformer;
* @author Andreas Penski
*/
@RequiredArgsConstructor
@Slf4j
public class SchematronValidationAction implements CheckAction {
private final ContentRepository repository;
private final ConversionService conversionService;
private List<ValidationResultsSchematron> validate(final XdmNode document, final ScenarioType scenario) {
return scenario.getSchematronValidations().stream().map(v -> validate(document, v)).collect(Collectors.toList());
private List<ValidationResultsSchematron> validate(final Bag results, final XdmNode document, final ScenarioType scenario) {
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 {
final XsltTransformer transformer = validation.getExecutable().load();
// resolving nur relative zum Repository
@ -73,29 +77,34 @@ public class SchematronValidationAction implements CheckAction {
transformer.setDestination(new DOMDestination(result));
transformer.setInitialContextNode(document);
transformer.transform();
final ValidationResultsSchematron s = new ValidationResultsSchematron();
s.setResource(validation.getResourceType());
final ValidationResultsSchematron.Results r = new ValidationResultsSchematron.Results();
r.setSchematronOutput(this.conversionService.readDocument(new DOMSource(result), SchematronOutput.class));
s.setResults(r);
return s;
} 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
public void check(final Bag results) {
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());
report.getValidationResultsSchematron().addAll(validationResult);
}
@Override
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) {