diff --git a/pom.xml b/pom.xml
index c64e2f1..16b9273 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
KoSIT XML Prüftool Implementierung
de.kosit
- 1.0.3-SNAPSHOT
+ 1.1.0-SNAPSHOT
validationtool
KoSIT XML Prüftool zur Prüfung von XML Dateien gegenüber definierten Szenarien.
@@ -49,7 +49,7 @@
UTF-8
0.7.9
1.16.16
- 9.7.0-15
+ 9.9.1-1
1.7.25
@@ -128,15 +128,6 @@
UTF-8
-
- org.apache.maven.plugins
- maven-surefire-plugin
- 2.20
-
-
- always
-
-
maven-jar-plugin
2.3.1
diff --git a/src/main/java/de/kosit/validationtool/api/Check.java b/src/main/java/de/kosit/validationtool/api/Check.java
index ae9d953..60bec51 100644
--- a/src/main/java/de/kosit/validationtool/api/Check.java
+++ b/src/main/java/de/kosit/validationtool/api/Check.java
@@ -24,6 +24,9 @@ import java.util.stream.Collectors;
import org.w3c.dom.Document;
+import net.sf.saxon.dom.NodeOverNodeInfo;
+import net.sf.saxon.s9api.XdmNode;
+
/**
* Zentrale Schnittstellendefinition für das Prüf-Tool.
*
@@ -33,21 +36,46 @@ public interface Check {
/**
* Führt die konfigurierte Prüfung für die übergebene Resource aus.
- *
+ *
+ * @param input die Resource / XML-Datei, die geprüft werden soll.
+ * @return ein Ergebnis-{@link Document}
+ * @deprecated use {@link #checkInput(Input)}
+ */
+ @Deprecated
+ default Document check(Input input) {
+ final XdmNode node = checkInput(input);
+ // readonly view of the document!!!
+ return (Document) NodeOverNodeInfo.wrap(node.getUnderlyingNode());
+ }
+
+ /**
+ * Führt die konfigurierte Prüfung für die übergebene Resource aus.
+ *
* @param input die Resource / XML-Datei, die geprüft werden soll.
* @return ein Ergebnis-{@link Document}
*/
- Document check(Input input);
-
+ XdmNode checkInput(Input input);
/**
* Führt eine Prüfung im Batch-Mode durch. Die Default-Implementierung führt die Prüfung sequentiell aus.
*
* @param input die Eingabe
* @return Liste mit Ergebnis-Dokumenten
+ * @deprecated use {@link #checkInput(List)}
*/
+ @Deprecated
default List check(List input) {
- return input.stream().map(i -> check(i)).collect(Collectors.toList());
+ return input.stream().map(this::check).collect(Collectors.toList());
+ }
+
+ /**
+ * Führt eine Prüfung im Batch-Mode durch. Die Default-Implementierung führt die Prüfung sequentiell aus.
+ *
+ * @param input die Eingabe
+ * @return Liste mit Ergebnis-Dokumenten
+ */
+ default List checkInput(List input) {
+ return input.stream().map(this::checkInput).collect(Collectors.toList());
}
}
diff --git a/src/main/java/de/kosit/validationtool/api/InputFactory.java b/src/main/java/de/kosit/validationtool/api/InputFactory.java
index 66d4c4e..a7824b6 100644
--- a/src/main/java/de/kosit/validationtool/api/InputFactory.java
+++ b/src/main/java/de/kosit/validationtool/api/InputFactory.java
@@ -21,7 +21,12 @@ package de.kosit.validationtool.api;
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -51,7 +56,7 @@ public class InputFactory {
private static final int DEFAULT_BUFFER_SIZE = 4096;
- public static final String MESSAGE_OPEN_STREAM_ERROR = "Can not open stream from";
+ private static final String MESSAGE_OPEN_STREAM_ERROR = "Can not open stream from";
@Getter
private final String algorithm;
diff --git a/src/main/java/de/kosit/validationtool/cmd/CheckAssertionAction.java b/src/main/java/de/kosit/validationtool/cmd/CheckAssertionAction.java
index 006626d..a80dc31 100644
--- a/src/main/java/de/kosit/validationtool/cmd/CheckAssertionAction.java
+++ b/src/main/java/de/kosit/validationtool/cmd/CheckAssertionAction.java
@@ -19,24 +19,29 @@
package de.kosit.validationtool.cmd;
-import de.kosit.validationtool.cmd.assertions.AssertionType;
-import de.kosit.validationtool.cmd.assertions.Assertions;
-import de.kosit.validationtool.impl.model.Result;
-import de.kosit.validationtool.impl.tasks.CheckAction;
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import net.sf.saxon.s9api.*;
-import org.apache.commons.lang3.StringUtils;
-import org.w3c.dom.Document;
-
-import javax.xml.transform.dom.DOMSource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+import de.kosit.validationtool.cmd.assertions.AssertionType;
+import de.kosit.validationtool.cmd.assertions.Assertions;
+import de.kosit.validationtool.impl.model.Result;
+import de.kosit.validationtool.impl.tasks.CheckAction;
+
+import net.sf.saxon.s9api.Processor;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XPathCompiler;
+import net.sf.saxon.s9api.XPathSelector;
+import net.sf.saxon.s9api.XdmNode;
+
/**
* Überprüft den Report mittels bereitgestellter Assertions. Diese {@link CheckAction} dient der Überprüfung der von der
* KoSIT bereitgestellten Prüfszenarien und den darin enthaltenen Artefakten.
@@ -64,7 +69,7 @@ public class CheckAssertionAction implements CheckAction {
final List toCheck = findAssertions(results.getName());
final List errors = new ArrayList<>();
if (toCheck != null && !toCheck.isEmpty()) {
- final XdmNode node = loadDocument(results.getReport());
+ final XdmNode node = results.getReport();
toCheck.forEach(a -> {
if (!check(node, a)) {
log.error("Assertion mismatch: {}", a.getValue());
@@ -86,15 +91,6 @@ public class CheckAssertionAction implements CheckAction {
return getMapped().entrySet().stream().filter(e -> matches(e.getKey(), name)).map(Map.Entry::getValue).findFirst().orElse(null);
}
- private XdmNode loadDocument(Document d) {
- DocumentBuilder documentBuilder = getProcessor().newDocumentBuilder();
- try {
- return documentBuilder.build(new DOMSource(d));
- } catch (SaxonApiException e) {
- log.error("Can not load result document. Therefore can not run defined assertions", e);
- }
- return null;
- }
private boolean check(XdmNode document, AssertionType assertion) {
try {
diff --git a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java
index 1ce602d..dbe586b 100644
--- a/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java
+++ b/src/main/java/de/kosit/validationtool/cmd/CommandLineApplication.java
@@ -77,6 +77,8 @@ public class CommandLineApplication {
private static final Option CHECK_ASSERTIONS = Option.builder("c").longOpt("check-assertions").hasArg()
.desc("Check the result using defined assertions").argName("assertions-file").build();
+ private static final Option PRINT_MEM_STATS = Option.builder("m").longOpt("memory-stats").desc("Prints some memory stats").build();
+
private CommandLineApplication() {
// main class -> hide constructor
}
@@ -151,6 +153,9 @@ public class CommandLineApplication {
Assertions assertions = loadAssertions(cmd.getOptionValue(CHECK_ASSERTIONS.getOpt()));
check.getCheckSteps().add(new CheckAssertionAction(assertions, ObjectFactory.createProcessor()));
}
+ if (cmd.hasOption(PRINT_MEM_STATS.getOpt())) {
+ check.getCheckSteps().add(new PrintMemoryStats());
+ }
log.info("Setup completed in {}ms\n", System.currentTimeMillis() - start);
@@ -226,7 +231,7 @@ public class CommandLineApplication {
try {
return Files.list(d).filter(path -> path.toString().endsWith(".xml")).collect(Collectors.toList());
} catch (IOException e) {
- throw new IllegalStateException("IOException while liste directory content. Can not determine test targets.", e);
+ throw new IllegalStateException("IOException while list directory content. Can not determine test targets.", e);
}
}
@@ -293,6 +298,7 @@ public class CommandLineApplication {
options.addOption(EXTRACT_HTML);
options.addOption(DEBUG);
options.addOption(CHECK_ASSERTIONS);
+ options.addOption(PRINT_MEM_STATS);
return options;
}
}
diff --git a/src/main/java/de/kosit/validationtool/cmd/ExtractHtmlContentAction.java b/src/main/java/de/kosit/validationtool/cmd/ExtractHtmlContentAction.java
index 826e77c..fbdb8b5 100644
--- a/src/main/java/de/kosit/validationtool/cmd/ExtractHtmlContentAction.java
+++ b/src/main/java/de/kosit/validationtool/cmd/ExtractHtmlContentAction.java
@@ -23,15 +23,19 @@ import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
-import javax.xml.transform.dom.DOMSource;
-
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.impl.ContentRepository;
import de.kosit.validationtool.impl.tasks.CheckAction;
-import net.sf.saxon.s9api.*;
+import net.sf.saxon.s9api.QName;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.Serializer;
+import net.sf.saxon.s9api.XPathExecutable;
+import net.sf.saxon.s9api.XPathSelector;
+import net.sf.saxon.s9api.XdmItem;
+import net.sf.saxon.s9api.XdmNode;
/**
* Extrahiert HTML-Dokumente aus dem Report und persistiert diese im konfigurierten Ausgabe-Verzeichnis.
@@ -54,9 +58,7 @@ public class ExtractHtmlContentAction implements CheckAction {
public void check(Bag results) {
try {
final XPathSelector selector = getSelector();
- DocumentBuilder documentBuilder = repository.getProcessor().newDocumentBuilder();
-
- final XdmNode xdmSource = documentBuilder.build(new DOMSource(results.getReport()));
+ final XdmNode xdmSource = results.getReport();
selector.setContextItem(xdmSource);
selector.forEach(m -> print(results.getName(), m));
diff --git a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java
index 06a45f4..fc835dc 100644
--- a/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java
+++ b/src/main/java/de/kosit/validationtool/cmd/InternalCheck.java
@@ -26,6 +26,8 @@ import de.kosit.validationtool.api.Input;
import de.kosit.validationtool.impl.DefaultCheck;
import de.kosit.validationtool.impl.tasks.CheckAction;
+import net.sf.saxon.s9api.XdmNode;
+
/**
* Simple Erweiterung der Klasse {@link DefaultCheck} um das Ergebnis der Assertion-Prüfung auszwerten und auszugeben.
* Diese Klasse stellt keine fachlicher Erweiterung des eigentlichen Prüfvorganges dar!
@@ -54,16 +56,17 @@ class InternalCheck extends DefaultCheck {
* @param input die Prüflinge
* @return false wenn es Assertion-Fehler gibt, sonst true
*/
- void checkInput(Input input) {
+ public XdmNode checkInput(Input input) {
CheckAction.Bag bag = new CheckAction.Bag(input, createReport());
- runCheckInternal(bag);
+ XdmNode result = runCheckInternal(bag);
if (bag.getAssertionResult() != null) {
checkAssertions += bag.getAssertionResult().getObject();
failedAssertions += bag.getAssertionResult().getErrors().size();
}
+ return result;
}
- public boolean printAndEvaluate() {
+ boolean printAndEvaluate() {
if (failedAssertions > 0) {
log.error("Assertion check failed.\n\nAssertions run: {}, Assertions failed: {}\n", checkAssertions, failedAssertions);
} else if (checkAssertions > 0) {
diff --git a/src/main/java/de/kosit/validationtool/cmd/PrintMemoryStats.java b/src/main/java/de/kosit/validationtool/cmd/PrintMemoryStats.java
new file mode 100644
index 0000000..842a76f
--- /dev/null
+++ b/src/main/java/de/kosit/validationtool/cmd/PrintMemoryStats.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Koordinierungsstelle für IT-Standards (KoSIT) under
+ * one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. KoSIT licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package de.kosit.validationtool.cmd;
+
+import java.text.NumberFormat;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ *
+ * Prints some memory usage information for debugging purposes.
+ *
+ * @author Andreas Penski
+ */
+@Slf4j
+public class PrintMemoryStats implements de.kosit.validationtool.impl.tasks.CheckAction {
+
+ private static final int BYTES_PER_K = 1024;
+
+ @Override
+ public void check(final Bag results) {
+ final Runtime runtime = Runtime.getRuntime();
+ long maxMemory = runtime.maxMemory();
+ long allocatedMemory = runtime.totalMemory();
+ long freeMemory = runtime.freeMemory();
+
+ NumberFormat format = NumberFormat.getInstance();
+ final String freeStr = format.format(freeMemory / BYTES_PER_K);
+ final String allocStr = format.format(allocatedMemory / BYTES_PER_K);
+ final String maxStr = format.format(maxMemory / BYTES_PER_K);
+ final String totalFreeStr = format.format((freeMemory + (maxMemory - allocatedMemory)) / BYTES_PER_K);
+ log.info("free memory: {}MB; allocated memory: {}MB", freeStr, allocStr);
+ log.info("max memory: {}MB; total free memory: {}MB", maxStr, totalFreeStr);
+ }
+}
diff --git a/src/main/java/de/kosit/validationtool/cmd/PrintReportAction.java b/src/main/java/de/kosit/validationtool/cmd/PrintReportAction.java
index 435cfcd..7d337d4 100644
--- a/src/main/java/de/kosit/validationtool/cmd/PrintReportAction.java
+++ b/src/main/java/de/kosit/validationtool/cmd/PrintReportAction.java
@@ -21,18 +21,14 @@ package de.kosit.validationtool.cmd;
import java.io.StringWriter;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.impl.ObjectFactory;
import de.kosit.validationtool.impl.tasks.CheckAction;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.Serializer;
+
/**
* Gibt das Ergebnis-Document auf std-out aus.
*
@@ -44,13 +40,11 @@ public class PrintReportAction implements CheckAction {
@Override
public void check(Bag results) {
try {
- Transformer transformer = ObjectFactory.createTransformer(true);
final StringWriter writer = new StringWriter();
- Result output = new StreamResult(writer);
- Source input = new DOMSource(results.getReport());
- transformer.transform(input, output);
+ final Serializer serializer = ObjectFactory.createProcessor().newSerializer(writer);
+ serializer.serializeNode(results.getReport());
System.out.print(writer.toString());
- } catch (TransformerException e) {
+ } catch (SaxonApiException e) {
log.error("Error while printing result to stdout", e);
}
}
diff --git a/src/main/java/de/kosit/validationtool/cmd/SerializeReportAction.java b/src/main/java/de/kosit/validationtool/cmd/SerializeReportAction.java
index 8896db7..9f5afed 100644
--- a/src/main/java/de/kosit/validationtool/cmd/SerializeReportAction.java
+++ b/src/main/java/de/kosit/validationtool/cmd/SerializeReportAction.java
@@ -19,18 +19,16 @@
package de.kosit.validationtool.cmd;
-import de.kosit.validationtool.impl.ObjectFactory;
-import de.kosit.validationtool.impl.tasks.CheckAction;
+import java.nio.file.Path;
+
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.nio.file.Path;
+import de.kosit.validationtool.impl.ObjectFactory;
+import de.kosit.validationtool.impl.tasks.CheckAction;
+
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.Serializer;
/**
* Schreibt das Prüfergebnis als XML-Dokument an eine definierte Stelle.
@@ -48,11 +46,9 @@ public class SerializeReportAction implements CheckAction {
final Path file = outputDirectory.resolve(results.getName() + "-report.xml");
try {
log.info("Serializing result to {}", file.toAbsolutePath());
- Transformer transformer = ObjectFactory.createTransformer(true);
- Result output = new StreamResult(file.toFile());
- Source input = new DOMSource(results.getReport());
- transformer.transform(input, output);
- } catch (TransformerException e) {
+ final Serializer serializer = ObjectFactory.createProcessor().newSerializer(file.toFile());
+ serializer.serializeNode(results.getReport());
+ } catch (SaxonApiException e) {
log.error("Can not serialize result report to {}", file.toAbsolutePath(), e);
}
}
diff --git a/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java b/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java
index 28e6325..82b06ae 100644
--- a/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java
+++ b/src/main/java/de/kosit/validationtool/impl/DefaultCheck.java
@@ -20,11 +20,7 @@
package de.kosit.validationtool.impl;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import java.util.stream.Collectors;
-
-import org.w3c.dom.Document;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -32,13 +28,20 @@ import lombok.extern.slf4j.Slf4j;
import de.kosit.validationtool.api.Check;
import de.kosit.validationtool.api.CheckConfiguration;
import de.kosit.validationtool.api.Input;
-import de.kosit.validationtool.impl.tasks.*;
+import de.kosit.validationtool.impl.tasks.CheckAction;
+import de.kosit.validationtool.impl.tasks.CreateReportAction;
+import de.kosit.validationtool.impl.tasks.DocumentParseAction;
+import de.kosit.validationtool.impl.tasks.ScenarioSelectionAction;
+import de.kosit.validationtool.impl.tasks.SchemaValidationAction;
+import de.kosit.validationtool.impl.tasks.SchematronValidationAction;
+import de.kosit.validationtool.impl.tasks.ValidateReportInputAction;
import de.kosit.validationtool.model.reportInput.CreateReportInput;
import de.kosit.validationtool.model.reportInput.DocumentIdentificationType;
import de.kosit.validationtool.model.reportInput.EngineType;
import de.kosit.validationtool.model.reportInput.ProcessingError;
import net.sf.saxon.s9api.Processor;
+import net.sf.saxon.s9api.XdmNode;
/**
* Die Referenz-Implementierung für den Prüfprozess. Nach initialer Konfiguration ist diese Klasse threadsafe und kann
@@ -95,26 +98,25 @@ public class DefaultCheck implements Check {
}
@Override
- public Document check(Input input) {
+ public XdmNode checkInput(Input input) {
CheckAction.Bag t = new CheckAction.Bag(input, createReport());
return runCheckInternal(t);
}
- protected Document runCheckInternal(CheckAction.Bag t) {
+ protected XdmNode runCheckInternal(CheckAction.Bag t) {
long started = System.currentTimeMillis();
log.info("Checking content of {}", t.getInput().getName());
- Iterator it = checkSteps.iterator();
-
- while (it.hasNext()) {
- final CheckAction action = it.next();
+ for (final CheckAction action : checkSteps) {
+ long start = System.currentTimeMillis();
if (!action.isSkipped(t)) {
action.check(t);
}
+ log.info("Step {} finished in {}ms", action.getClass().getSimpleName(), System.currentTimeMillis() - start);
if (t.isStopped()) {
final ProcessingError processingError = t.getReportInput().getProcessingError();
log.error("Error processing input {}: {}", t.getInput().getName(),
- processingError != null ? processingError.getError().stream().collect(Collectors.joining("\n")) : "");
+ processingError != null ? String.join("\n", processingError.getError()) : "");
break;
}
}
diff --git a/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java b/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java
index 9234a8e..6bf9a17 100644
--- a/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java
+++ b/src/main/java/de/kosit/validationtool/impl/ScenarioRepository.java
@@ -19,16 +19,14 @@
package de.kosit.validationtool.impl;
+import static org.apache.commons.lang3.StringUtils.startsWith;
+
import java.net.MalformedURLException;
import java.net.URI;
+import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.transform.dom.DOMSource;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -42,7 +40,13 @@ import de.kosit.validationtool.model.reportInput.XMLSyntaxError;
import de.kosit.validationtool.model.scenarios.ScenarioType;
import de.kosit.validationtool.model.scenarios.Scenarios;
-import net.sf.saxon.s9api.*;
+import net.sf.saxon.s9api.Processor;
+import net.sf.saxon.s9api.QName;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XPathSelector;
+import net.sf.saxon.s9api.XdmNode;
+import net.sf.saxon.s9api.XdmNodeKind;
+import net.sf.saxon.s9api.XsltExecutable;
/**
* Repository for die aktiven Szenario einer Prüfinstanz.
@@ -69,16 +73,28 @@ public class ScenarioRepository {
@Getter(value = AccessLevel.PACKAGE)
private Scenarios scenarios;
- private static boolean isSupportedDocument(Document doc) {
- final Element root = doc.getDocumentElement();
- return root.hasAttribute("frameworkVersion") && root.getAttribute("frameworkVersion").startsWith(SUPPORTED_MAJOR_VERSION)
- && doc.getDocumentElement().getNamespaceURI().equals(SUPPORTED_MAJOR_VERSION_SCHEMA);
+ private static boolean isSupportedDocument(XdmNode doc) {
+ final XdmNode root = findRoot(doc);
+ final String frameworkVersion = root.getAttributeValue(new QName("frameworkVersion"));
+ return startsWith(frameworkVersion, SUPPORTED_MAJOR_VERSION)
+ && root.getNodeName().getNamespaceURI().equals(SUPPORTED_MAJOR_VERSION_SCHEMA);
+ }
+
+ private static XdmNode findRoot(final XdmNode doc) {
+ final Iterator it = doc.children().iterator();
+ while (it.hasNext()) {
+ final XdmNode node = it.next();
+ if (node.getNodeKind() == XdmNodeKind.ELEMENT) {
+ return node;
+ }
+ }
+ throw new IllegalArgumentException("Kein root element gefunden");
}
private static void checkVersion(URI scenarioDefinition) {
DocumentParseAction p = new DocumentParseAction();
try {
- final Result result = p.parseDocument(InputFactory.read(scenarioDefinition.toURL()));
+ final Result result = p.parseDocument(InputFactory.read(scenarioDefinition.toURL()));
if (result.isValid() && !isSupportedDocument(result.getObject())) {
throw new IllegalStateException(String.format(
"Specified scenario configuration %s is not supported.%nThis version only supports definitions of '%s'",
@@ -138,7 +154,7 @@ public class ScenarioRepository {
* @param document das Eingabedokument
* @return ein Ergebnis-Objekt zur weiteren Verarbeitung
*/
- public Result selectScenario(Document document) {
+ public Result selectScenario(XdmNode document) {
Result result = new Result<>();
final List collect = scenarios.getScenario().stream().filter(s -> match(document, s)).collect(Collectors.toList());
if (collect.size() == 1) {
@@ -152,13 +168,10 @@ public class ScenarioRepository {
}
- private boolean match(Document document, ScenarioType scenario) {
+ private boolean match(XdmNode document, ScenarioType scenario) {
try {
final XPathSelector selector = scenario.getSelector();
- DocumentBuilder documentBuilder = getProcessor().newDocumentBuilder();
-
- final XdmNode xdmSource = documentBuilder.build(new DOMSource(document));
- selector.setContextItem(xdmSource);
+ selector.setContextItem(document);
return selector.effectiveBooleanValue();
} catch (SaxonApiException e) {
log.error("Error evaluating xpath expression", e);
diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/CheckAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/CheckAction.java
index ee8c24f..c569663 100644
--- a/src/main/java/de/kosit/validationtool/impl/tasks/CheckAction.java
+++ b/src/main/java/de/kosit/validationtool/impl/tasks/CheckAction.java
@@ -19,17 +19,19 @@
package de.kosit.validationtool.impl.tasks;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import lombok.Getter;
+import lombok.Setter;
+
import de.kosit.validationtool.api.Input;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.model.reportInput.CreateReportInput;
import de.kosit.validationtool.model.reportInput.XMLSyntaxError;
import de.kosit.validationtool.model.scenarios.ScenarioType;
-import lombok.Getter;
-import lombok.Setter;
-import org.w3c.dom.Document;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import net.sf.saxon.s9api.XdmNode;
/**
* Interface, welches von allen Prüfschritten implementiert wird. Der Parameter vom Typ {@link Bag} dient dabei sowohl
@@ -72,7 +74,7 @@ public interface CheckAction {
private CreateReportInput reportInput;
/** Das finale Ergebnis */
- private Document report;
+ private XdmNode report;
private boolean finished;
@@ -81,7 +83,7 @@ public interface CheckAction {
/** Das zu prüfende Dokument */
private Input input;
- private Result parserResult;
+ private Result parserResult;
private Result assertionResult;
diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/CreateReportAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/CreateReportAction.java
index ed1b762..966859a 100644
--- a/src/main/java/de/kosit/validationtool/impl/tasks/CreateReportAction.java
+++ b/src/main/java/de/kosit/validationtool/impl/tasks/CreateReportAction.java
@@ -27,11 +27,22 @@ import org.w3c.dom.Document;
import lombok.RequiredArgsConstructor;
-import de.kosit.validationtool.impl.*;
+import de.kosit.validationtool.impl.CollectingErrorEventHandler;
+import de.kosit.validationtool.impl.ConversionService;
+import de.kosit.validationtool.impl.ObjectFactory;
+import de.kosit.validationtool.impl.RelativeUriResolver;
+import de.kosit.validationtool.impl.ScenarioRepository;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.model.scenarios.ScenarioType;
-import net.sf.saxon.s9api.*;
+import net.sf.saxon.s9api.DocumentBuilder;
+import net.sf.saxon.s9api.Processor;
+import net.sf.saxon.s9api.QName;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XdmDestination;
+import net.sf.saxon.s9api.XdmNode;
+import net.sf.saxon.s9api.XsltExecutable;
+import net.sf.saxon.s9api.XsltTransformer;
/**
* Erzeugt den Report auf Basis der gesammelten Informationen über den Prüfling. Sollte kein Szenario identifiziert
@@ -59,10 +70,9 @@ public class CreateReportAction implements CheckAction {
final DocumentBuilder documentBuilder = processor.newDocumentBuilder();
try {
- final Document inputDoc = results.getParserResult().isValid() ? results.getParserResult().getObject()
- : ObjectFactory.createDocumentBuilder(true).newDocument();
+ final XdmNode parsedDocument = results.getParserResult().isValid() ? results.getParserResult().getObject()
+ : ObjectFactory.createProcessor().newDocumentBuilder().newBuildingContentHandler().getDocumentNode();
- final XdmNode parsedDocument = documentBuilder.build(new DOMSource(inputDoc));
final Document reportInput = conversionService.writeDocument(results.getReportInput());
final XdmNode root = documentBuilder.build(new DOMSource(reportInput));
final XsltTransformer transformer = getTransformation(results).load();
@@ -73,10 +83,10 @@ public class CreateReportAction implements CheckAction {
transformer.setURIResolver(resolver);
transformer.getUnderlyingController().setUnparsedTextURIResolver(resolver);
transformer.setParameter(new QName("input-document"), parsedDocument);
- Document result = ObjectFactory.createDocumentBuilder(false).newDocument();
- transformer.setDestination(new DOMDestination(result));
+ final XdmDestination destination = new XdmDestination();
+ transformer.setDestination(destination);
transformer.transform();
- results.setReport(result);
+ results.setReport(destination.getXdmNode());
} catch (SaxonApiException e) {
throw new IllegalStateException("Can not create final report", e);
diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/DocumentParseAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/DocumentParseAction.java
index 874666c..9bc8313 100644
--- a/src/main/java/de/kosit/validationtool/impl/tasks/DocumentParseAction.java
+++ b/src/main/java/de/kosit/validationtool/impl/tasks/DocumentParseAction.java
@@ -19,23 +19,26 @@
package de.kosit.validationtool.impl.tasks;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+
+import javax.xml.transform.stream.StreamSource;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
import de.kosit.validationtool.api.Input;
-import de.kosit.validationtool.impl.CollectingErrorEventHandler;
import de.kosit.validationtool.impl.ObjectFactory;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.model.reportInput.ValidationResultsWellformedness;
import de.kosit.validationtool.model.reportInput.XMLSyntaxError;
import de.kosit.validationtool.model.reportInput.XMLSyntaxErrorSeverity;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-import javax.xml.parsers.DocumentBuilder;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Collections;
+import net.sf.saxon.s9api.DocumentBuilder;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XdmNode;
/**
* Setzt Parsing-Funktionalitäten um. Prüft auf well-formedness
@@ -53,22 +56,18 @@ public class DocumentParseAction implements CheckAction {
* @param content ein Dokument
* @return Ergebnis des Parsings inklusive etwaiger Fehler
*/
- public Result parseDocument(Input content) {
+ public Result parseDocument(Input content) {
if (content == null) {
- throw new IllegalArgumentException("Url may not be null");
+ throw new IllegalArgumentException("Input may not be null");
}
- Result result;
- CollectingErrorEventHandler errorHandler = new CollectingErrorEventHandler();
+ Result result;
try ( InputStream input = new ByteArrayInputStream(content.getContent()) ) {
- DocumentBuilder db = ObjectFactory.createDocumentBuilder(false);
- db.setErrorHandler(errorHandler);
- Document doc = db.parse(input);
- result = new Result<>(doc, errorHandler.getErrors());
- } catch (SAXException e) {
- log.debug("SAXException while parsing {}", content.getName(), e);
- result = new Result<>(errorHandler.getErrors());
- } catch (IOException e) {
- log.debug("IOException while parsing {}", content, e);
+ final DocumentBuilder builder = ObjectFactory.createProcessor().newDocumentBuilder();
+ builder.setLineNumbering(true);
+ XdmNode doc = builder.build(new StreamSource(input));
+ result = new Result<>(doc, Collections.emptyList());
+ } catch (SaxonApiException | IOException e) {
+ log.debug("Exception while parsing {}", content.getName(), e);
XMLSyntaxError error = new XMLSyntaxError();
error.setSeverity(XMLSyntaxErrorSeverity.SEVERITY_FATAL_ERROR);
error.setMessage(String.format("IOException while reading resource %s", content.getName()));
@@ -80,7 +79,7 @@ public class DocumentParseAction implements CheckAction {
@Override
public void check(Bag results) {
- Result parserResult = parseDocument(results.getInput());
+ Result parserResult = parseDocument(results.getInput());
ValidationResultsWellformedness v = new ValidationResultsWellformedness();
results.setParserResult(parserResult);
v.getXmlSyntaxError().addAll(parserResult.getErrors());
diff --git a/src/main/java/de/kosit/validationtool/impl/tasks/SchematronValidationAction.java b/src/main/java/de/kosit/validationtool/impl/tasks/SchematronValidationAction.java
index 51002f1..f9d38d1 100644
--- a/src/main/java/de/kosit/validationtool/impl/tasks/SchematronValidationAction.java
+++ b/src/main/java/de/kosit/validationtool/impl/tasks/SchematronValidationAction.java
@@ -23,8 +23,6 @@ import java.net.URI;
import java.util.List;
import java.util.stream.Collectors;
-import javax.xml.transform.dom.DOMSource;
-
import org.w3c.dom.Document;
import lombok.RequiredArgsConstructor;
@@ -37,7 +35,11 @@ import de.kosit.validationtool.model.reportInput.CreateReportInput;
import de.kosit.validationtool.model.reportInput.ValidationResultsSchematron;
import de.kosit.validationtool.model.scenarios.ScenarioType;
-import net.sf.saxon.s9api.*;
+import net.sf.saxon.s9api.DOMDestination;
+import net.sf.saxon.s9api.Processor;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XdmNode;
+import net.sf.saxon.s9api.XsltTransformer;
/**
* Ausführung von konfigurierten Schematron Validierungen eines Szenarios.
@@ -51,16 +53,14 @@ public class SchematronValidationAction implements CheckAction {
private final URI repository;
- private List validate(Document document, ScenarioType scenario) {
+ private List validate(XdmNode document, ScenarioType scenario) {
return scenario.getSchematronValidations().stream().map(v -> validate(document, v)).collect(Collectors.toList());
}
- private ValidationResultsSchematron validate(Document document, BaseScenario.Transformation validation) {
- final DocumentBuilder documentBuilder = processor.newDocumentBuilder();
+ private ValidationResultsSchematron validate(XdmNode document, BaseScenario.Transformation validation) {
try {
- final XdmNode root = documentBuilder.build(new DOMSource(document));
final XsltTransformer transformer = validation.getExecutable().load();
- //resolving nur relative zum Repository
+ // resolving nur relative zum Repository
final RelativeUriResolver resolver = new RelativeUriResolver(repository);
transformer.setURIResolver(resolver);
CollectingErrorEventHandler e = new CollectingErrorEventHandler();
@@ -68,7 +68,7 @@ public class SchematronValidationAction implements CheckAction {
Document result = ObjectFactory.createDocumentBuilder(false).newDocument();
transformer.setDestination(new DOMDestination(result));
- transformer.setInitialContextNode(root);
+ transformer.setInitialContextNode(document);
transformer.transform();
ValidationResultsSchematron s = new ValidationResultsSchematron();
s.setResource(validation.getResourceType());
@@ -85,9 +85,9 @@ public class SchematronValidationAction implements CheckAction {
@Override
public void check(Bag results) {
final CreateReportInput report = results.getReportInput();
- final List bla = validate(results.getParserResult().getObject(),
+ final List validationResult = validate(results.getParserResult().getObject(),
results.getScenarioSelectionResult().getObject());
- report.getValidationResultsSchematron().addAll(bla);
+ report.getValidationResultsSchematron().addAll(validationResult);
}
@Override
diff --git a/src/test/java/de/kosit/validationtool/cmd/CheckAssertionActionTest.java b/src/test/java/de/kosit/validationtool/cmd/CheckAssertionActionTest.java
index 8292c76..6e24b3c 100644
--- a/src/test/java/de/kosit/validationtool/cmd/CheckAssertionActionTest.java
+++ b/src/test/java/de/kosit/validationtool/cmd/CheckAssertionActionTest.java
@@ -66,7 +66,7 @@ public class CheckAssertionActionTest {
@Test
public void testSimple() throws URISyntaxException {
final CheckAction.Bag bag = new CheckAction.Bag(InputFactory.read(SAMPLE), new CreateReportInput());
- bag.setReport(Helper.load(SAMPLE_REPORT).getObject());
+ bag.setReport(Helper.load(SAMPLE_REPORT));
final Assertions assertions = Helper.load(SAMPLE_ASSERTIONS, Assertions.class);
CheckAssertionAction a = new CheckAssertionAction(assertions, ObjectFactory.createProcessor());
diff --git a/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java b/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java
index 23c2fad..47c54a6 100644
--- a/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java
+++ b/src/test/java/de/kosit/validationtool/cmd/CommandlineApplicationTest.java
@@ -19,8 +19,14 @@
package de.kosit.validationtool.cmd;
-import org.junit.Before;
-import org.junit.Test;
+import static de.kosit.validationtool.impl.Helper.ASSERTIONS;
+import static de.kosit.validationtool.impl.Helper.NOT_EXISTING;
+import static de.kosit.validationtool.impl.Helper.REPOSITORY;
+import static de.kosit.validationtool.impl.Helper.SAMPLE;
+import static de.kosit.validationtool.impl.Helper.SAMPLE2;
+import static de.kosit.validationtool.impl.Helper.SAMPLE_DIR;
+import static de.kosit.validationtool.impl.Helper.SCENARIO_FILE;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.nio.file.Files;
@@ -28,8 +34,8 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
-import static de.kosit.validationtool.impl.Helper.*;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Before;
+import org.junit.Test;
/**
* Testet die Parameter des Kommandozeilen-Tools.
@@ -146,7 +152,7 @@ public class CommandlineApplicationTest {
Paths.get(SAMPLE).toString() };
CommandLineApplication.mainProgram(args);
assertThat(commandLine.getErrorOutput()).contains(RESULT_OUTPUT);
- assertThat(commandLine.getOutputLines()).contains("");
+ assertThat(commandLine.getOutputLines().get(0)).contains("");
}
@Test
diff --git a/src/test/java/de/kosit/validationtool/cmd/ExtractHtmlActionTest.java b/src/test/java/de/kosit/validationtool/cmd/ExtractHtmlActionTest.java
index 7e94140..9c308a1 100644
--- a/src/test/java/de/kosit/validationtool/cmd/ExtractHtmlActionTest.java
+++ b/src/test/java/de/kosit/validationtool/cmd/ExtractHtmlActionTest.java
@@ -64,7 +64,7 @@ public class ExtractHtmlActionTest {
public void testSimple() throws IOException {
CheckAction.Bag b = new CheckAction.Bag(InputFactory.read(REPORT));
assertThat(action.isSkipped(b)).isTrue();
- b.setReport(Helper.load(REPORT).getObject());
+ b.setReport(Helper.load(REPORT));
action.check(b);
assertThat(action.isSkipped(b)).isFalse();
action.check(b);
diff --git a/src/test/java/de/kosit/validationtool/cmd/PrintReportActionTest.java b/src/test/java/de/kosit/validationtool/cmd/PrintReportActionTest.java
index c817ac6..2b528c2 100644
--- a/src/test/java/de/kosit/validationtool/cmd/PrintReportActionTest.java
+++ b/src/test/java/de/kosit/validationtool/cmd/PrintReportActionTest.java
@@ -58,7 +58,7 @@ public class PrintReportActionTest {
@Test
public void testSimpleSerialize() {
CheckAction.Bag b = new CheckAction.Bag(InputFactory.read(REPORT));
- b.setReport(Helper.load(REPORT).getObject());
+ b.setReport(Helper.load(REPORT));
assertThat(action.isSkipped(b)).isFalse();
action.check(b);
assertThat(b.isStopped()).isFalse();
diff --git a/src/test/java/de/kosit/validationtool/cmd/SerializeReportActionTest.java b/src/test/java/de/kosit/validationtool/cmd/SerializeReportActionTest.java
index 89e51a3..12960c3 100644
--- a/src/test/java/de/kosit/validationtool/cmd/SerializeReportActionTest.java
+++ b/src/test/java/de/kosit/validationtool/cmd/SerializeReportActionTest.java
@@ -19,20 +19,21 @@
package de.kosit.validationtool.cmd;
-import de.kosit.validationtool.api.InputFactory;
-import de.kosit.validationtool.impl.Helper;
-import de.kosit.validationtool.impl.tasks.CheckAction;
-import org.apache.commons.io.FileUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import de.kosit.validationtool.api.InputFactory;
+import de.kosit.validationtool.impl.Helper;
+import de.kosit.validationtool.impl.tasks.CheckAction;
/**
* @author Andreas Penski
@@ -60,7 +61,7 @@ public class SerializeReportActionTest {
public void testSimpleSerialize() {
CheckAction.Bag b = new CheckAction.Bag(InputFactory.read(REPORT));
assertThat(action.isSkipped(b)).isTrue();
- b.setReport(Helper.load(REPORT).getObject());
+ b.setReport(Helper.load(REPORT));
assertThat(action.isSkipped(b)).isFalse();
action.check(b);
assertThat(b.isStopped()).isFalse();
diff --git a/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java b/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java
index f621163..cae8be6 100644
--- a/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java
+++ b/src/test/java/de/kosit/validationtool/impl/DefaultCheckTest.java
@@ -19,11 +19,8 @@
package de.kosit.validationtool.impl;
-import de.kosit.validationtool.api.CheckConfiguration;
-import de.kosit.validationtool.api.Input;
-import org.junit.Before;
-import org.junit.Test;
-import org.w3c.dom.Document;
+import static de.kosit.validationtool.api.InputFactory.read;
+import static org.assertj.core.api.Assertions.assertThat;
import java.io.File;
import java.net.URISyntaxException;
@@ -32,8 +29,14 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import static de.kosit.validationtool.api.InputFactory.read;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+
+import de.kosit.validationtool.api.CheckConfiguration;
+import de.kosit.validationtool.api.Input;
+
+import net.sf.saxon.s9api.XdmNode;
/**
* Test das Check-Interface
@@ -60,12 +63,26 @@ public class DefaultCheckTest {
@Test
public void testHappyCase() throws Exception {
+ final XdmNode doc = implementation.checkInput(read(VALID_EXAMPLE));
+ assertThat(doc).isNotNull();
+ }
+
+ @Test
+ public void testHappyCaseDocument() throws Exception {
final Document doc = implementation.check(read(VALID_EXAMPLE));
assertThat(doc).isNotNull();
}
@Test
public void testMultipleCase() throws Exception {
+ final List input = IntStream.range(0, MULTI_COUNT).mapToObj(i -> read(VALID_EXAMPLE)).collect(Collectors.toList());
+ final List docs = implementation.checkInput(input);
+ assertThat(docs).isNotNull();
+ assertThat(docs).hasSize(MULTI_COUNT);
+ }
+
+ @Test
+ public void testMultipleCaseDocument() throws Exception {
final List input = IntStream.range(0, MULTI_COUNT).mapToObj(i -> read(VALID_EXAMPLE)).collect(Collectors.toList());
final List docs = implementation.check(input);
assertThat(docs).isNotNull();
diff --git a/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java b/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java
index f902bb7..3e54ee6 100644
--- a/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java
+++ b/src/test/java/de/kosit/validationtool/impl/DocumentParserTest.java
@@ -29,12 +29,13 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.w3c.dom.Document;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.impl.tasks.DocumentParseAction;
import de.kosit.validationtool.model.reportInput.XMLSyntaxError;
+import net.sf.saxon.s9api.XdmNode;
+
/**
* @author Andreas Penski
*/
@@ -60,7 +61,7 @@ public class DocumentParserTest {
@Test
public void testSimple() throws IOException {
- final Result result = parser.parseDocument(read(CONTENT));
+ final Result result = parser.parseDocument(read(CONTENT));
assertThat(result).isNotNull();
assertThat(result.getObject()).isNotNull();
assertThat(result.getErrors()).isEmpty();
@@ -70,7 +71,7 @@ public class DocumentParserTest {
@Test
public void testIllformed() throws IOException {
- final Result result = parser.parseDocument(read(ILLFORMED));
+ final Result result = parser.parseDocument(read(ILLFORMED));
assertThat(result).isNotNull();
assertThat(result.getErrors()).isNotEmpty();
assertThat(result.getObject()).isNull();
diff --git a/src/test/java/de/kosit/validationtool/impl/Helper.java b/src/test/java/de/kosit/validationtool/impl/Helper.java
index fb03a4e..d717fbd 100644
--- a/src/test/java/de/kosit/validationtool/impl/Helper.java
+++ b/src/test/java/de/kosit/validationtool/impl/Helper.java
@@ -20,18 +20,17 @@
package de.kosit.validationtool.impl;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Paths;
-import org.w3c.dom.Document;
+import javax.xml.transform.stream.StreamSource;
-import de.kosit.validationtool.api.InputFactory;
-import de.kosit.validationtool.impl.model.Result;
-import de.kosit.validationtool.impl.tasks.CheckAction;
-import de.kosit.validationtool.impl.tasks.DocumentParseAction;
-import de.kosit.validationtool.model.reportInput.XMLSyntaxError;
+import net.sf.saxon.s9api.SaxonApiException;
+import net.sf.saxon.s9api.XdmNode;
/**
* Helferlein für Test-Artefakte
@@ -50,36 +49,38 @@ public class Helper {
public static final URI TEST_ROOT = Paths.get("src/test/resources").toUri();
-
-
public static final URI EXAMPLES_DIR = TEST_ROOT.resolve("examples/");
+
public static final URI ASSERTIONS = EXAMPLES_DIR.resolve("assertions/tests-xrechnung.xml");
public static final URI SCENARIO_FILE = EXAMPLES_DIR.resolve("UBLReady/scenarios-2.xml");
-
public static final URI REPOSITORY = EXAMPLES_DIR.resolve("repository/");
public static final URI NOT_EXISTING = EXAMPLES_DIR.resolve("doesnotexist");
public static final URI SAMPLE_DIR = EXAMPLES_DIR.resolve("UBLReady/");
+
public static final URI SAMPLE_XSLT = EXAMPLES_DIR.resolve("repository/resources/eRechnung/report.xsl");
+
public static final URI SAMPLE = SAMPLE_DIR.resolve("UBLReady_EU_UBL-NL_20170102_FULL.xml");
public static final URI SAMPLE2 = SAMPLE_DIR.resolve("UBLReady_EU_UBL-NL_20170102_FULL-invalid.xml");
-
/**
* Lädt ein XML-Dokument von der gegebenen URL
*
* @param url die url die geladen werden soll
* @return ein result objekt mit Dokument
*/
- public static Result load(URL url) {
- DocumentParseAction a = new DocumentParseAction();
- CheckAction.Bag b = new CheckAction.Bag(InputFactory.read(url));
- a.check(b);
- return b.getParserResult();
+ public static XdmNode load(URL url) {
+ try ( InputStream input = url.openStream() ) {
+ return ObjectFactory.createProcessor().newDocumentBuilder().build(new StreamSource(input));
+ } catch (SaxonApiException | IOException e) {
+ throw new IllegalStateException("Fehler beim Laden der XML-Datei", e);
+
+ }
+
}
public static T load(URL url, Class type) throws URISyntaxException {
@@ -98,5 +99,5 @@ public class Helper {
public static ContentRepository loadTestRepository() {
return new ContentRepository(ObjectFactory.createProcessor(), new File("src/test/resources/examples/repository").toURI());
}
-}
+}
diff --git a/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java b/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java
index 76da77f..4e1492b 100644
--- a/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java
+++ b/src/test/java/de/kosit/validationtool/impl/ScenarioRepositoryTest.java
@@ -30,13 +30,14 @@ import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
-import org.w3c.dom.Document;
import de.kosit.validationtool.impl.model.Result;
import de.kosit.validationtool.impl.tasks.DocumentParseAction;
import de.kosit.validationtool.model.scenarios.ScenarioType;
import de.kosit.validationtool.model.scenarios.Scenarios;
+import net.sf.saxon.s9api.XdmNode;
+
/**
* Testet das {@link ScenarioRepository}.
*
@@ -94,7 +95,7 @@ public class ScenarioRepositoryTest {
assertThat(scenario.isValid()).isFalse();
}
- private Document load(URL url) throws IOException {
+ private XdmNode load(URL url) throws IOException {
DocumentParseAction p = new DocumentParseAction();
return p.parseDocument(read(url)).getObject();
}
diff --git a/src/test/java/de/kosit/validationtool/impl/SchemaValidatorActionTest.java b/src/test/java/de/kosit/validationtool/impl/SchemaValidatorActionTest.java
index 55134e9..89d3a80 100644
--- a/src/test/java/de/kosit/validationtool/impl/SchemaValidatorActionTest.java
+++ b/src/test/java/de/kosit/validationtool/impl/SchemaValidatorActionTest.java
@@ -69,7 +69,6 @@ public class SchemaValidatorActionTest {
@Test
public void testSimple() {
CheckAction.Bag bag = new CheckAction.Bag(InputFactory.read(VALID_EXAMPLE), new CreateReportInput());
- bag.setParserResult(Helper.load(VALID_EXAMPLE));
ScenarioType t = new ScenarioType();
ValidateWithXmlSchema v = new ValidateWithXmlSchema();
ResourceType r = new ResourceType();
@@ -88,7 +87,6 @@ public class SchemaValidatorActionTest {
@Test
public void testValidationFailure() throws MalformedURLException {
CheckAction.Bag bag = new CheckAction.Bag(InputFactory.read(INVALID_EXAMPLE.toURL()), new CreateReportInput());
- bag.setParserResult(Helper.load(INVALID_EXAMPLE.toURL()));
ScenarioType t = new ScenarioType();
ValidateWithXmlSchema v = new ValidateWithXmlSchema();
ResourceType r = new ResourceType();