validator/docs/api.md
2019-05-28 15:27:04 +02:00

2.9 KiB

Validator API

The Validator offers an API which allows you to integrate Validator in your own applications.

Dependency Management

Currently, we do not deploy to Maven Central or similar. Hence you need to build and optionally deploy the Validator artifacts to your own shared repository (see for example Maven Documentation).

Maven

Then you can declare the dependency as follows:

<dependency>
   <groupId>de.kosit</groupId>
   <artifactId>validationtool</artifactId>
   <version>${validator.version}</version>
</dependency>

Gradle

dependencies {
    compile group: 'de.kosit', name: 'validationtool', version: '1.0.0'
}

Usage

Voraussetzung für die Verwendung ist eine valide Prüfszenarien-Definition (xml-Datei) und das dazugehörige Repository mit den von den definierten Szenarien benötigten Artefakten. Der folgende Quellcode zeigt die Erzeugung einer neuen Prüf-Instanz:

//Vorbereitung der Konfiguration
URI scenarios =  URI.create("scenarios.xml");
CheckConfiguration config = new CheckConfiguration();
config.setScenarioDefinition(scenarios);

//Instanziierung der DefaultCheck-Implementierung
Check implemenation =  new DefaultCheck(config);

Weitere Konfigurationsoption ist der Pfad zum Repository. Standardmäßig wird das Repository relativ zur Szenarien-Defintion unter "repository" gesucht.

Die so erzeugte Prüfinstanz initialisiert sämtliche Szenarien und deren Prüfartefakte. Ein etwaiger Konfigurationsfehler wird frühzeitig mitgeteilt.

Die eigentlich Prüfung erfolgt mit den beiden Methoden des Check-Interfaces:

...
Check pruefer =  new DefaultCheck(config);

//einzelne Datei prüfen
Input pruefKandidat = InputFactory.read(new File("rechnung.xml"));
Document report = pruefer.implemenation(pruefKandidat);

//Batch-Prüfung
List<File> files = Files.list(Paths.get("rechnungen")).map(path -> path.toFile()).collect(Collectors.toList());
List<Input> toCheck = files.stream().map(InputFactory::read).collect(Collectors.toList());
List<Document> reports = pruefer.implemenation(toCheck);

Eine einmal initialisierte Prüfinstanz ist threadsafe und kann beliebig oft wieder verwendet werden. XML-Artefakte wie Schema oder XSLT-Executables werden bei Instantiierung des DefaultCheck initialisiert und wiederverwendet. Da diese Objekte relativ aufwändig zu Erzeugen sind, empfielt sich die Wiederverwendung der Check-Instanz.

Die Batch-Verarbeitung erfolgt grundsätzlich seriell. Der DefaultCheck implementiert keine Parallelverarbeitung.

Einziges Eingabeobjekt ist Input, welches sich mit den verschiedenen Methoden der InputFactory aus div. Eingabe-Resourcen erzeugen lässt. Die InputFactory erzeugt für jedes Eingabe-Objekt eine Prüfsumme, die im Report mitgeführt wird. Der verwendete Algorithmus ist über die read-Methoden der InputFactory definierbar. Standardmäßig wird SHA-256 des JDK verwendet