mirror of
https://github.com/itplr-kosit/validator.git
synced 2026-05-25 16:55:39 +00:00
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:
commit
382e1a5a72
3 changed files with 26 additions and 10 deletions
|
|
@ -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.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue