From a1a7328b8f44cb10fee2aec6a9bd965b61e48a03 Mon Sep 17 00:00:00 2001 From: "Andreas Penski (init)" Date: Wed, 15 Apr 2020 14:01:27 +0200 Subject: [PATCH 1/3] #50 (fix) Validator creates invalid createReportInput xml in case of no scenrio match --- CHANGELOG.md | 4 ++++ .../validationtool/impl/ScenarioRepository.java | 1 + .../validationtool/impl/model/BaseScenario.java | 4 ++++ .../impl/tasks/ScenarioSelectionAction.java | 13 ++++++++++--- .../kosit/validationtool/impl/DefaultCheckTest.java | 12 ++++++++++++ 5 files changed, 31 insertions(+), 3 deletions(-) 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)); From e28a9d9f808141521875151380a341a85b92b489 Mon Sep 17 00:00:00 2001 From: "Andreas Penski (init)" Date: Thu, 16 Apr 2020 11:59:04 +0200 Subject: [PATCH 2/3] #50 (fix) remove 'fallback' attribute from xml view --- .../validationtool/impl/model/BaseScenario.java | 13 +++++++++++-- .../impl/tasks/ScenarioSelectionAction.java | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) 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 a006224..1f07f31 100644 --- a/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java +++ b/src/main/java/de/kosit/validationtool/impl/model/BaseScenario.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import javax.xml.bind.annotation.XmlTransient; import javax.xml.validation.Schema; import org.apache.commons.lang3.NotImplementedException; @@ -66,8 +67,7 @@ public abstract class BaseScenario { private ResourceType resourceType; } - @Getter - @Setter + @XmlTransient private boolean fallback; private XPathExecutable matchExecutable; @@ -82,6 +82,15 @@ public abstract class BaseScenario { private Transformation reportTransformation; + @XmlTransient + public boolean isFallback() { + return this.fallback; + } + + public void setFallback(final boolean value) { + this.fallback = value; + } + /** * Gibt eine Transformation zurück. * 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 be61da0..63a11f6 100644 --- a/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java +++ b/src/main/java/de/kosit/validationtool/impl/tasks/ScenarioSelectionAction.java @@ -54,7 +54,7 @@ public class ScenarioSelectionAction implements CheckAction { results.setScenarioSelectionResult(scenarioTypeResult); if (!scenarioTypeResult.getObject().isFallback()) { report.setScenario(scenarioTypeResult.getObject()); - log.error("Schenario {} identified for {}", scenarioTypeResult.getObject().getName(), results.getInput().getName()); + log.info("Schenario {} identified for {}", scenarioTypeResult.getObject().getName(), results.getInput().getName()); } else { log.error("No valid schenario configuration found for {}", results.getInput().getName()); } From 7ae580d9061316b1236ed7d0daff02cb20b733b6 Mon Sep 17 00:00:00 2001 From: "Andreas Penski (init)" Date: Thu, 16 Apr 2020 13:53:46 +0200 Subject: [PATCH 3/3] (chore) ignore occasional testing of xrechnung artefacts --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index af77ecd..bc3c63d 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ src/generated .settings .vscode *.code-workspace + +# Testing stuff +xrechnung