Wie kann der offizielle XRechnung Validator als OSGi-Plugin eingebunden werden ?

Die elektronische Rechnung (E-Rechnung) gewinnt in Europa und in Deutschland immer mehr an Bedeutung, da die E-Rechnung zu erheblichen Effizienzgewinnen in der Rechnungsverarbeitung führt. Mit einer durchgehenden digitalen Verarbeitung können Prozesse optimiert und damit Kosten eingespart werden.

Die Richtlinie 2014/55/EU des Europäischen Parlaments und des Rates vom 16. April 2014 über die elektronische Rechnungsstellung in öffentlichen Aufträgen (Link) verpflichtet die öffentlichen Auftraggeber der Mitgliedsstaaten dazu, elektronische Rechnungen anzunehmen, wenn diese einer europäischen Norm entsprechen.

Die europäische Union hat dazu eine europäische Norm für elektronische Rechnungen veröffentlicht (EN 16931-1:2017), in der unter anderem geregelt wird, welche Felder eine Rechnung enthalten muss und wie die Datei zur Übertragung der elektronischen Rechnung strukturiert sein muss.

(Quelle: [HESS20])

Der IT-Planungsrat koordiniert die Zusammenarbeit von Bund und Ländern in Fragen der Informationstechnik. Er beauftragte 2017 die Koordinierungsstelle für IT-Standards (KoSIT), den Standard XRechnung herauszugeben und zu betreiben. Unter diesem Auftrag veröffentliche die KoSIT nicht nur eine entsprechende Spezifikation in Version 1 (KOSIT19) und 2 (KOSIT20b). Darüberhinaus publizierte sie technische Mittel zur Validierung der ergänzenden nationalen Geschäftsregeln als Schematron- und XSL-Dateien, den KoSIT Validator.

The validator is an XML validation engine to validate and process XML files in various formats. It basically does the following in order:

  1. identify actual xml format
  2. validate the xml file (using schema and schematron rules)
  3. generate a custom report / extract custom data from the xml file
  4. compute an acceptance status (according the supplied schema and rules)

Aufgabenstellung

Ein in Hessen ansässiges Unternehmen legt Kreditorenrechnungen in ihrem Enterprise Content Managementsystem (ECM) ab und führt darin einen Freigabeprozess durch. Dieses System soll künftig an E-Mails angehängte XRechnungen erkennen und verarbeiten können. 

Fachlicher Kontext

Für das Land Hessen ist der Rechnungsstandard XRechnung anzuwenden oder jeder Standard, der zur EU-Norm konform ist. Weiterhin sind zwei Syntaxen zulässig:

Technischer Kontext

Das ECM ist ein Java-basiertes System und unterstützt die Ergänzung von Erweiterungen über die OSGi Service Plattform.

Der KoSIT Validator ist als Sammlung von Schematron- und XSL-Dateien zwar weitgehend unabhängig von Plattform und Technologie-Stack. Allerdings enthält das Werkzeug auch Java-Programme zur direkten Ausführung der Validierung.

Umsetzung

Vorbereitung OSGi-Plugin

Der KoSIT Validator wird mit einem Maven Project Object Model (POM) ausgeliefert. Dieses definiert mehrere Abhängigkeiten zu bekannten Java-Bibliotheken. 

Welche Abhängigkeiten sind bereits als OSGi-Bündel verfügbar?
  • Die wiederverwendbaren Java Komponenten der Apache Commons stehen praktischerweise bereits als OSGi-Bündel in öffentlichen Repositorys wie Maven Central bereit.
  • Für Java XML Binding (JAXB) wurde eine Bibliothek gefunden, die sich mit der im ECM befindlichen Version von javax.activation nicht biss. Die Wahl fiel auf Jakarta XML Binding in Version 2.3.3.
  • Der optionale Logging-Adapter Simple Logging Facade for Java (SLF4J) steht im erwähnten ECM-System zur Verfügung.
Wie wurden andere Abhängigkeiten erfüllt?

Neben dem Java Code der KoSIT (validationtool-1.4.0.jar)  verblieben zwei Bibliotheken, die direkt in dem neu erschaffenen kundenspezifischen OSGi-Plugin eingebunden wurden:

  • Die JAXB Reference Implementation (jaxb-impl.jar)
  • Der SAXON XSLT and XQuery Processor
    • Da die Home Edition unter der Mozilla Public License veröffentlicht ist, kann das Paket für kommerzielle Zwecke eingesetzt werden.

Während die Verwendung der XML-Ressourcen innerhalb der Unit-Tests von Eclipse funktioniert, können diese in der OSGi-Umgebung des ECM nicht gelesen werden.

Stolperfallen

Can not create JAXB context for given context: de.kosit.validationtool.model.reportInput:de.kosit.validationtool.model.scenarios

Dies ließ sich noch durch einen Trick umgehen (Link)

public KositValidatorResult run() throws URISyntaxException {  Thread thread = Thread.currentThread();  ClassLoader loader = thread.getContextClassLoader();  thread.setContextClassLoader(this.getClass().getClassLoader());  try {    return runInternal();  finally {    thread.setContextClassLoader(loader);  }}

Leider folgte direkt darauf die nächste Fehlermeldung: Die in der Jar-Datei abgelegten Schematron- und XSL-Datei konnten während der Ausführung nicht geladen werden.

Can not load schema from sources bundle://39.0:1/resources/ubl/2.1/xsd/maindoc/UBL-Invoice-2.1.xsd

Hier ließ sich leider nur ein Workaround finden:

  1. Die Konfigurationsdateien, z.B. (Link), sind direkt als Zip-Datei im Plugin enthalten.
  2. Zur Laufzeit werden sie in ein temporäres Verzeichnis entpackt.

Referenzen

[HESS20]

[HESS20] Hessisches Ministerium der Finanzen, Elektronische Rechnungen im Land Hessenhttps://verwaltungsportal.hessen.de/themen/information/elektronische-rechnungen-im-land-hessen, abgerufen am 13.08.20

Kosit Validator

https://github.com/itplr-kosit/validator, abgerufen am 19.10.2020

Entscheidung 2017/22 – Umsetzung des Richtlinie 2014/55/EU (elektronische Rechnungsstellung – eRechnung)

https://www.it-planungsrat.de/SharedDocs/Sitzungen/DE/2017/Sitzung_23.html?pos=3

Kosit Validator

https://github.com/itplr-kosit/validator, abgerufen am 26.08.2020

Apache Commons

http://commons.apache.org

Maven Central

https://search.maven.org

Simple Logging Facade for Java (SLF4J)

 http://www.slf4j.org/

SAXON XSLT and XQuery Processor

http://saxon.sourceforge.net

Eclipse/OSGI, Java 11, JAXB, and the Classloader

https://stackoverflow.com/a/65015130/1496037, abgerufen am 09.12.2020

Validator Configuration release compatible with XRechnung 2.0.0 in version 2020-07-31

 https://github.com/itplr-kosit/validator-configuration-xrechnung/releases/tag/release-2020-07-31

[KOSIT]

[KOSIT] Koordinierungsstelle für IT-Standards, XRechnung, https://www.xoev.de/die_standards/xrechnung-16828, abgerufen am 13.08.2020

[KOSIT19]

[KOSIT19] Koordinierungsstelle für IT-Standards, Standard XRechnunghttps://www.xoev.de/sixcms/media.php/13/XRechnung-v1-2-2.pdf, 2019

[KOSIT20b]

[KOSIT20b] Koordinierungsstelle für IT-Standards, Standard XRechnunghttps://www.xoev.de/sixcms/media.php/13/200-XRechnung-2020-06-30.pdf, 2020

Wenn Sie Unterstützung in der Softwareentwicklung benötigen oder sich für moderne Webtechnologien interessieren, beraten wir Sie bei PASCADA Consulting GmbH gerne persönlich.