# Package org.kapott.hbci.rewrite

package org.kapott.hbci.rewrite

Rewriter-Module werden von HBCI4Java benutzt, um mit fehlerhaften HBCI-Servern arbeiten zu können. Mit fehlerhaften HBCI-Servern sind Server gemeint, die die HBCI-Spezifikation in bestimmten Punkten falsch oder gar nicht implementiert haben. Da der HBCI4Java-Kernel streng spezifikationskonform implementiert ist, würde es bei der Benutzung eines solchen Servers zu Fehlermeldungen und zum Abbruch des Programmes kommen.

Einige möglicherweise auftretenden Fehler können Ihre Ursache auch tatsächlich in einem Angriff auf die HBCI-Kommunikation haben (z.B. eine versuchte man-in-the-middle-Attacke). Aus eben diesem Grund ist der eigentlichen HBCI-Kernel so implementiert, dass er sämtliche Unstimmigkeiten mit entsprechenden Fehlermeldungen quittiert.

Einige auftretende Probleme haben aber ihre Ursache in fehlerhaft implementierten HBCI-Servern. Sind solche permanent auftretenden Probleme bekannt, und ist keine Aktualisierung der Server-Software möglich bzw. zu erwarten, so kann für das jeweilige Problem ein Rewriter-Modul geschrieben werden.

Der Kernel von HBCI4Java arbeitet nur mit spezifikationskonformen HBCI-Nachrichten und Dialogen. Erwartet ein HBCI-Server allerdings Nachrichten, die von der Spezifikation abweichen (bzw. diese in einem besonders strengen Mass interpretieren, so dass aus "KANN"-Bestimmungen in der Spez. auf einmal "MUSS"- oder "DARF_NICHT"-Bestimmungen in den Analysemodules des Servers werden), so kann die Nachricht vor dem eigentlichen Versenden durch ein entsprechendes Rewriter-Modul geleitet werden, welches diese Nachricht so anpasst, dass der HBCI-Server damit arbeiten kann.

Umgekehrt gilt das auch für eingehende Nachrichten: Diese sind in einigen Fällen nicht spezifikationskonform. HBCI4Java würde beim Analysieren einer solchen Nachricht mit einer Fehlermeldung abbrechen. Deshalb kann jede eingehende Nachricht ebenfalls durch entsprechende Rewriter-Module geleitet werden, die dafür zuständig sind, die "fehlerhafte" Nachricht in eine spezifikationskonforme Nachricht umzuwandeln, so dass sie von HBCI4Java verarbeitet werden kann.

Die Schnittstelle für die Implementierung von Rewriter-Modulen wird an dieser Stelle nicht als "offizielle" Schnittstelle dokumentiert, da sich hier wahrscheinlich noch einige Änderungen ergeben. Vielmehr werden in HBCI4Java bereits einige Rewriter-Module mitgeliefert. Tritt ein bestimmtes Problem mit einem HBCI-Server auf, und liegt die Ursache dieses Problems tatsächlich in einem Fehler des HBCI-Servers, so ist ein entsprechender Bugreport an den Autor zu schicken, so dass evtl. ein entsprechendes Rewriter-Modul erzeugt werden kann.

Defaultmäßig sind alle hier aufgeführten Rewriter-Module aktiviert. Das hat i.d.R. keine Konsequenzen, wenn alle verarbeiteten Nachrichten bereits HBCI-konform sind (die Rewriter-Module belassen die Nachrichten dann in ihrer ursprünglichen Form). Einziger Nachteil ist die zusätzliche Zeit, die die Analyse der Nachrichten in den einzelnen Rewriter-Modulen benötigt. Vorteil dieses Verhaltens ist jedoch, dass die Rewriter-Module nicht manuell aktiviert werden müssen (und somit auch nicht vergessen werden können). Durch manuelles Setzen des Kernel-Parameters `kernel.rewriter` kann die Liste der aktiven Rewriter-Module jedoch jederzeit manipuliert werden (siehe dazu auch Klassenbeschreibung der Klasse `HBCIUtils`).

Classes
Class
Description
Rewrite
RHBCIVersion
Korrektur fehlender HBCI-Versionsnummern.
RInvalidSegment
RInvalidSuppHBCIVersion
Korrigiert falsche HBCI-Versionen in den BPD.
RKUmsDelimiters
Rewriter-Modul für Kontoauszüge der 1822direkt-Bank (und vielleicht andere).
RKUmsEmptyBDateSets
RMissingMsgRef
RSecTypeTAN
Rewriter-Modul für falsche Informationen über TAN-Verfahren.
RSigIdLeadingZero
RWrongSequenceNumbers
RWrongStatusSegOrder