diff --git a/CHANGELOG.md b/CHANGELOG.md index 88f141d..b0a2481 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to the Schematron Rules and this project will be documented The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## UNRELEASED +### Fixed +- Validator was creating invalid createReportInput xml in case of no scenrio match + ## 1.2.0 ### Added - Provide access to schematron result through [Result.java](https://github.com/itplr-kosit/validator/blob/master/src/main/java/de/kosit/validationtool/api/Result.java) diff --git a/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java b/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java index 4903976..bf5f290 100644 --- a/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java +++ b/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java @@ -164,6 +164,7 @@ public class ScenarioRepository { private ScenarioType createFallback() { final ScenarioType t = new ScenarioType(); + t.setFallback(true); t.setName("Fallback-Scenario"); final CreateReportType reportType = new CreateReportType(); reportType.setResource(this.scenarios.getNoScenarioReport().getResource()); diff --git a/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java b/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java index b983c61..a006224 100644 --- a/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java +++ b/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java @@ -66,6 +66,10 @@ public abstract class BaseScenario { private ResourceType resourceType; } + @Getter + @Setter + private boolean fallback; + private XPathExecutable matchExecutable; private XPathExecutable acceptExecutable; diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java index c66eead..be61da0 100644 --- a/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java +++ b/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java @@ -20,6 +20,7 @@ package de.kosit.validationtool.impl.tasks; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import de.kosit.validationtool.impl.ScenarioRepository; import de.kosit.validationtool.impl.model.Result; @@ -35,6 +36,7 @@ import net.sf.saxon.s9api.XdmNode; * @author Andreas Penski */ @RequiredArgsConstructor +@Slf4j public class ScenarioSelectionAction implements CheckAction { private final ScenarioRepository repository; @@ -47,16 +49,21 @@ public class ScenarioSelectionAction implements CheckAction { if (results.getParserResult().isValid()) { scenarioTypeResult = determineScenario(results.getParserResult().getObject()); } else { - scenarioTypeResult = new Result<>(repository.getFallbackScenario()); + scenarioTypeResult = new Result<>(this.repository.getFallbackScenario()); } results.setScenarioSelectionResult(scenarioTypeResult); - report.setScenario(scenarioTypeResult.getObject()); + if (!scenarioTypeResult.getObject().isFallback()) { + report.setScenario(scenarioTypeResult.getObject()); + log.error("Schenario {} identified for {}", scenarioTypeResult.getObject().getName(), results.getInput().getName()); + } else { + log.error("No valid schenario configuration found for {}", results.getInput().getName()); + } } private Result determineScenario(final XdmNode document) { final Result result = this.repository.selectScenario(document); if (result.isInvalid()) { - return new Result<>(repository.getFallbackScenario()); + return new Result<>(this.repository.getFallbackScenario()); } return result; } diff --git a/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java b/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java index 461c024..c5551eb 100644 --- a/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java +++ b/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java @@ -22,6 +22,7 @@ package de.kosit.validationtool.impl; import static de.kosit.validationtool.api.InputFactory.read; import static de.kosit.validationtool.impl.Helper.Simple.GARBAGE; import static de.kosit.validationtool.impl.Helper.Simple.NOT_WELLFORMED; +import static de.kosit.validationtool.impl.Helper.Simple.UNKNOWN; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; @@ -115,6 +116,17 @@ public class DefaultCheckTest { assertThat(result.isProcessingSuccessful()).isFalse(); } + @Test + public void testNoScenario() { + final Result result = this.implementation.checkInput(read(UNKNOWN)); + assertThat(result).isNotNull(); + assertThat(result.isWellformed()).isTrue(); + assertThat(result.isProcessingSuccessful()).isTrue(); + assertThat(result.isSchemaValid()).isFalse(); + assertThat(result.getAcceptRecommendation()).isEqualTo(AcceptRecommendation.REJECT); + assertThat(result.isAcceptable()).isFalse(); + } + @Test public void testNotWellFormed() { final Result result = this.implementation.checkInput(read(NOT_WELLFORMED));