org.kapott.hbci.manager
Class HBCIUtils

java.lang.Object
  |
  +--org.kapott.hbci.manager.HBCIUtils

public final class HBCIUtils
extends java.lang.Object

Hilfsklasse für diverse Tools. Diese Klasse definiert nur statische Methoden und Konstanten. Sie kann nicht instanziiert werden.

Die wichtigsten Methoden dieser Klasse sind die Methoden zum Initialisieren des HBCI-Kernel (init()) sowie zum Setzen von HBCI-Kernel-Parametern (setParam()).

Kernel-Parameter können zu jedem beliebigen Zeitpunkt der Laufzeit einer Anwendung gesetzt werden. Das Setzen eines Kernel-Parameters geschieht mit der Methode setParam(). Dieser Methode werden der Name eines Kernel-Parameters sowie der neue Wert für diesen Parameter übergeben. Alternativ bzw. in Verbindung mit dieser Variante können diese Parameter in einer Datei abgelegt werden, die beim Initialiseren des HBCI-Kernels eingelesen wird (via Properties.load()). Folgende Kernel-Parameter werden zur Zeit von verschiedenen Subsystemen des HBCI-Kernels ausgewertet:


Field Summary
static int LOG_CHIPCARD
          Loglevel für Chipkarten-Debug-Ausgaben (identisch mit LOG_SIZRDH)
static int LOG_DEBUG
          Loglevel für Debug-Ausgaben
static int LOG_ERR
          Loglevel für Fehlerausgaben
static int LOG_INFO
          Loglevel für Informationen
static int LOG_SIZRDH
          Loglevel für Ausgaben der SIZ RDH native library (identisch mit LOG_CHIPCARD)
static int LOG_WARN
          Loglevel für Warnungen
 
Method Summary
static boolean checkAccountCRC(java.lang.String blz, java.lang.String number)
          Überprüft, ob gegebene BLZ und Kontonummer zueinander passen.
static java.lang.String data2hex(byte[] data)
          Wandelt ein Byte-Array in eine entsprechende hex-Darstellung um.
static java.lang.String date2String(java.util.Date date)
          Wandelt ein gegebenes Datumsobjekt in einen String um
static byte[] decodeBase64(java.lang.String st)
          Dekodieren eines Base64-Datenstroms.
static void done()
          Bereinigen aller HBCI4Java-Datenstrukturen.
static void doneThread()
          Aufräumen der Datenstrukturen für aktuelle ThreadGroup.
static java.lang.String encodeBase64(byte[] x)
          Gibt Daten Base64-encoded zurück.
static java.lang.String exception2String(java.lang.Exception e)
          Erzeugen eines Strings, der die Ursache einer Exception beschreibt.
static java.lang.String exception2StringShort(java.lang.Exception e)
          Erzeugen eines Strings, der die Messages einer Exception und deren Ursache-Exceptions enthält.
static java.lang.String getBICForBLZ(java.lang.String blz)
          Gibt zu einer gegebenen Bankleitzahl den BIC-Code zurück.
static java.lang.String getNameForBLZ(java.lang.String blz)
          Ermittelt zu einer gegebenen Bankleitzahl den Namen des Institutes.
static java.lang.String getParam(java.lang.String st)
          Gibt den aktuellen Wert eines bestimmten HBCI-Parameters zurück.
static java.lang.String getParam(java.lang.String st, java.lang.String def)
          Gibt den aktuellen Wert eines bestimmten HBCI-Parameters zurück.
static void init(java.lang.ClassLoader cl, java.lang.String configfile, HBCICallback callback)
          Initialisieren der HBCI4Java-Umgebung.
static void initThread(java.lang.ClassLoader cl, java.lang.String configfile, HBCICallback callback)
          Initialisieren der HBCI4Java-Umgebung für eine neue ThreadGroup.
static void log(java.lang.Exception e)
          Ausgabe der Meldungen einer Exception-Kette mit dem Level LOG_ERR.
static void log(java.lang.Exception e, int level)
          Ausgabe der Meldungen einer Exception-Kette über den Log-Mechanismus des HBCI-Kernels.
static void log(java.lang.String st, int level)
          Ausgabe eines Log-Strings über den Log-Mechanismus des HBCI-Kernels.
static void setParam(java.lang.String key, java.lang.String value)
          Setzt den Wert eines HBCI-Parameters.
static java.util.Date string2Date(java.lang.String date)
          Wandelt einen String, der ein Datum in der lokalen Form enthält, in ein Datumsobjekt um
static java.util.Date string2Time(java.lang.String date)
          Wandelt einen String, der eine Uhrzeit in der lokalen Form enthält, in ein Datumsobjekt um
static java.util.Date strings2Date(java.lang.String date, java.lang.String time)
          Wandelt übergebene Datums- und Zeitangaben in ein Date-Objekt um
static java.lang.String time2String(java.util.Date date)
          Wandelt ein gegebenes Datums in einen String um, der die Uhrzeit enthält
 

Field Detail

LOG_ERR

public static final int LOG_ERR
Loglevel für Fehlerausgaben

See Also:
Constant Field Values

LOG_WARN

public static final int LOG_WARN
Loglevel für Warnungen

See Also:
Constant Field Values

LOG_INFO

public static final int LOG_INFO
Loglevel für Informationen

See Also:
Constant Field Values

LOG_DEBUG

public static final int LOG_DEBUG
Loglevel für Debug-Ausgaben

See Also:
Constant Field Values

LOG_CHIPCARD

public static final int LOG_CHIPCARD
Loglevel für Chipkarten-Debug-Ausgaben (identisch mit LOG_SIZRDH)

See Also:
Constant Field Values

LOG_SIZRDH

public static final int LOG_SIZRDH
Loglevel für Ausgaben der SIZ RDH native library (identisch mit LOG_CHIPCARD)

See Also:
Constant Field Values
Method Detail

init

public static void init(java.lang.ClassLoader cl,
                        java.lang.String configfile,
                        HBCICallback callback)

Initialisieren der HBCI4Java-Umgebung. Diese Methode muss vor allen anderen HBCI-Methoden aufgerufen werden. Hiermit wird die HBCI4Java-Laufzeitumgebung initialisiert. Dazu gehören das Laden verschiedener Dateien aus dem HBCI4Java-Classpath (Dateien für die Lokalisierung von Nachrichten, Verzeichnis der Banken usw.) sowie das Initialisieren einiger interner Datenstrukturen.

Zusätzlich wird in dieser Methode die Methode initThread() aufgerufen, um alle Datenstrukturen, die ThreadGroup-weise verwaltet werden, für die aktuelle ThreadGroup zu initialisieren. Siehe dazu auch die Dokumentation zu initThread() sowie die Datei README.MultiThread.

Parameters:
cl - der ClassLoader, der zum Laden von configfile verwendet werden soll.
configfile - der Name des zu ladenden Property-Files.
callback - das zu verwendende Callback-Objekt. Beim Aufruf dieser Methode darf callback niemals null sein (im Gegensatz zum Aufruf von initThread, um weitere ThreadGroups zu initialisieren).

initThread

public static void initThread(java.lang.ClassLoader cl,
                              java.lang.String configfile,
                              HBCICallback callback)

Initialisieren der HBCI4Java-Umgebung für eine neue ThreadGroup. Soll HBCI4Java in einer multi-threaded Anwendung verwendet werden, bei der mehrere Threads gleichzeitig HBCI4Java benutzen, so muss für jeden solchen Thread eine separate ThreadGroup angelegt werden. Jede dieser ThreadGroups muss mit dieser Methode für die Benutzung von HBCI4Java initialisiert werden. Alle HBCI-Kernel-Parameter sowie die HBCI-Callbacks werden für jede ThreadGroup separat verwaltet, so dass jede ThreadGroup also einen eigenen Satz dieser Daten benutzt.

Der Thread, in dem die Methode HBCIUtils.init() aufgerufen wird, muss nicht zusätzlich mit initThread() initialisiert werden, das wird automatisch von der Methode init() übernommen.

Siehe dazu auch die Datei README.MultiThreading in den HBCI4Java-Archiven.

Ist der Parameter configfile ungleich null, so wird versucht, ein Property-File mit default-Einstellungen für die HBCI-Kernel-Parameter für die aktuelle ThreadGroup zu laden. Der Name des Property-Files wird durch den Parameter configfile bestimmt. Wie dieser Name interpretiert wird, um das Property-File tatsächlich zu finden, hängt von dem zum Laden benutzten ClassLoader ab. Im Parameter cl kann dazu eine ClassLoader-Instanz übergeben werden, deren getRessource-Methode benutzt wird, um das Property-File zu lokalisieren und zu laden. Wird kein ClassLoader angegeben (cl==null), so wird zum Laden des Property-Files der ClassLoader benutzt, der auch zum Laden der aufrufenden Klasse benutzt wurde.

Achtung: Dieser Default-ClassLoader ist in den meisten Fällen ein ClassLoader, der in einem JAR-File bzw. im aktuellen CLASSPATH nach Ressourcen sucht. Soll ein Property-File von einer bestimmten Stelle im Filesystem geladen werden, so sollte hier statt dessen der ClassLoader new FileSystemClassLoader() benutzt werden. In diesem Fall wird der angegebene Dateiname als relativer Pfad von der Wurzel des Dateisystems aus interpretiert. Eine Demonstration befindet sich im Tool AnalyzeReportOfTransactions.

Außerdem wird mit dieser Methode ein Callback-Objekt registriert, welches von HBCI4Java für die Kommunikation mit der Anwendung verwendet wird.

Parameters:
cl - der ClassLoader, der verwendet werden soll, um das Property-File configfile zu laden (mit der Methode ClassLoader.getRessource()). Ist dieser Parameter null, so wird der ClassLoader verwendet, der auch zum Laden der Klasse benutzt wurde, die die aufrufende Methode enthält.
configfile - der Name des zu ladenden Property-Files. Ist dieser Parameter null, kein Property-File geladen.
callback - ein Objekt einer HBCICallback-Klasse, das benutzt wird, um Anfragen des Kernels (benötigte Daten, benötige Chipkarte, wichtige Informationen während der Dialog-Ausführung etc.) an die Anwendung weiterzuleiten. Siehe dazu HBCICallback. Jede ThreadGroup kann ein eigenes Callback-Objekt registrieren, welches dann für alle HBCI-Prozesse innerhalb dieser ThreadGroup verwendet wird. Wird beim Initialisieren einer ThreadGroup kein callback-Objekt angegeben (callback==null), dann wird für diese ThreadGroup das Callback-Objekt der "Eltern-ThreadGroup" verwendet. Die "initiale" ThreadGroup, die mit HBCIUtils.init() initialisiert wird, muss ein callback!=null spezifizieren.

doneThread

public static void doneThread()
Aufräumen der Datenstrukturen für aktuelle ThreadGroup. Alle ThreadGroups, die via initThread() initialisiert wurden, sollten kurz vor deren Ende mit dieser Methode wieder "aufgeräumt" werden, damit HBCI4Java die entsprechenden Datenstrukturen für diese ThreadGroup wieder freigeben kann.


done

public static void done()
Bereinigen aller HBCI4Java-Datenstrukturen. Nach Aufruf dieser Methode kann keine andere HBCI4Java-Funktion mehr benutzt werden. Durch erneuten Aufruf von init() kann HBCI4Java wieder re-initialisiert werden.


getParam

public static java.lang.String getParam(java.lang.String st,
                                        java.lang.String def)
Gibt den aktuellen Wert eines bestimmten HBCI-Parameters zurück. Für jede ThreadGroup wird ein separater Satz von HBCI-Parametern verwaltet.

Parameters:
st - Name des HBCI-Parameters
def - default-Wert, falls dieser Parameter nicht definiert ist
Returns:
den Wert des angegebenen HBCI-Parameters

getParam

public static java.lang.String getParam(java.lang.String st)
Gibt den aktuellen Wert eines bestimmten HBCI-Parameters zurück. Für jede ThreadGroup wird ein separater Satz von HBCI-Parametern verwaltet.

Parameters:
st - Name des HBCI-Parameters
Returns:
den Wert des angegebenen HBCI-Parameters

getNameForBLZ

public static java.lang.String getNameForBLZ(java.lang.String blz)
Ermittelt zu einer gegebenen Bankleitzahl den Namen des Institutes.

Parameters:
blz - die Bankleitzahl
Returns:
den Namen des dazugehörigen Kreditinstitutes. Falls die Bankleitzahl unbekannt ist, so wird ein leerer String zurückgegeben

getBICForBLZ

public static java.lang.String getBICForBLZ(java.lang.String blz)
Gibt zu einer gegebenen Bankleitzahl den BIC-Code zurück.

Parameters:
blz - Bankleitzahl der Bank
Returns:
BIC-Code dieser Bank. Falls kein BIC-Code bekannt ist, wird ein leerer String zurückgegeben.

setParam

public static void setParam(java.lang.String key,
                            java.lang.String value)
Setzt den Wert eines HBCI-Parameters. Eine Beschreibung aller vom Kernel ausgewerteten Parameter befindet sich in der Klassenbeschreibung zur dieser Klasse. Für jede ThreadGroup wird ein separater Satz von HBCI-Parametern verwaltet.

Parameters:
key - Name des HBCI-Parameters.
value - neuer Wert des zu setzenden HBCI-Parameters

log

public static void log(java.lang.String st,
                       int level)
Ausgabe eines Log-Strings über den Log-Mechanismus des HBCI-Kernels.

Parameters:
st - der auszugebende String
level - die "Wichtigkeit" dieser Meldung. mögliche Werte:
  • LOG_ERR
  • LOG_WARN
  • LOG_INFO
  • LOG_DEBUG
  • LOG_CHIPCARD (wird nur intern benutzt)

log

public static void log(java.lang.Exception e)
Ausgabe der Meldungen einer Exception-Kette mit dem Level LOG_ERR.

Parameters:
e - die Exception, deren getMessage()-Meldungen geloggt werden sollen

exception2String

public static java.lang.String exception2String(java.lang.Exception e)
Erzeugen eines Strings, der die Ursache einer Exception beschreibt. Der String wird erzeugt, indem alle getCause()-Strings der Exception e und deren Cause rekursiv aneinandergekettet werden. Zusätzlich wird am Ende ein kompletter StackTrace angehängt. Der Ergebnisstring hat also die folgende Form:
e.getMessage() -> e.getCause().getMessage() -> e.getCause().getCause().getMessage() ...
e.printStackTrace();
        

Parameters:
e - Exception, deren Messages zusammengefasst werden sollen
Returns:
String mit Meldungen der Exception-Chain

exception2StringShort

public static java.lang.String exception2StringShort(java.lang.Exception e)
Erzeugen eines Strings, der die Messages einer Exception und deren Ursache-Exceptions enthält. Das Format des zurückgegebenen Strings ist analog dem von exception2String(Exception), allerdings wird bei dieser Methode kein StackTrace (e.printStackTrace()) angehängt.

Parameters:
e - Exception, deren Messages zusammengefasst werden sollen
Returns:
String mit Meldungen der Exception-Chain

log

public static void log(java.lang.Exception e,
                       int level)
Ausgabe der Meldungen einer Exception-Kette über den Log-Mechanismus des HBCI-Kernels. Es werden auch alle getCause()-Exceptions verfolgt und deren Meldung ausgegeben. Enthält keine der Exceptions dieser Kette eine Message, so wird statt dessen ein Stacktrace ausgegeben.

Parameters:
e - die Exception, deren getMessage()-Meldungen ausgegeben werden sollen.
level - der Log-Level, mit dem die Meldungen geloggt werden sollen. Siehe dazu auch log(String,int)

data2hex

public static java.lang.String data2hex(byte[] data)
Wandelt ein Byte-Array in eine entsprechende hex-Darstellung um.

Parameters:
data - das Byte-Array, für das eine Hex-Darstellung erzeugt werden soll
Returns:
einen String, der für jedes Byte aus data zwei Zeichen (0-9,A-F) enthält.

date2String

public static java.lang.String date2String(java.util.Date date)
Wandelt ein gegebenes Datumsobjekt in einen String um

Parameters:
date - ein Datum
Returns:
die lokalisierte Darstellung dieses Datums als String

string2Date

public static java.util.Date string2Date(java.lang.String date)
Wandelt einen String, der ein Datum in der lokalen Form enthält, in ein Datumsobjekt um

Parameters:
date - ein Datum in der lokalen Stringdarstellung
Returns:
ein entsprechendes Datumsobjekt

time2String

public static java.lang.String time2String(java.util.Date date)
Wandelt ein gegebenes Datums in einen String um, der die Uhrzeit enthält

Parameters:
date - ein Datumsobjekt
Returns:
die lokalisierte Darstellung der Uhrzeit als String

string2Time

public static java.util.Date string2Time(java.lang.String date)
Wandelt einen String, der eine Uhrzeit in der lokalen Form enthält, in ein Datumsobjekt um

Parameters:
date - eine Uhrzeit in der lokalen Stringdarstellung
Returns:
ein entsprechendes Datumsobjekt

strings2Date

public static java.util.Date strings2Date(java.lang.String date,
                                          java.lang.String time)
Wandelt übergebene Datums- und Zeitangaben in ein Date-Objekt um

Parameters:
date - das Datum in der lokalen Darstellung (je nach defaultLocale())
time - die Uhrzeit in der lokalen Darstellung (darf nullsein)
Returns:
ein Date-Objekt, bei dem Datum und Zeit auf die angegebenen Werte gesetzt sind

encodeBase64

public static java.lang.String encodeBase64(byte[] x)
Gibt Daten Base64-encoded zurück. Die zu kodierenden Daten müssen als Byte-Array übergeben werden, als Resultat erhält man einen String mit der entsprechenden Base64-Kodierung.

Parameters:
x - zu kodierende Daten
Returns:
String mit Base64-kodierten Daten

decodeBase64

public static byte[] decodeBase64(java.lang.String st)
Dekodieren eines Base64-Datenstroms. Es wird zu einem gegebenen Base64-Datenstrom der dazugehörige "Klartext" zurückgegeben.

Parameters:
st - Base64-kodierten Daten
Returns:
dekodierter Datenstrom als Byte-Array

checkAccountCRC

public static boolean checkAccountCRC(java.lang.String blz,
                                      java.lang.String number)

Überprüft, ob gegebene BLZ und Kontonummer zueinander passen. Bei diesem Test wird wird die in die Kontonummer "eingebaute" Prüziffer verifiziert. Anhand der BLZ wird ermittelt, welches Prüfzifferverfahren zur Überprüfung eingesetzt werden muss.

Ein positives Ergebnis dieser Routine bedeutet nicht, dass das entsprechende Konto bei der Bank existiert, sondern nur, dass die Kontonummer bei der entsprechenden Bank prinzipiell gültig ist.

Parameters:
blz - die Bankleitzahl der Bank, bei der das Konto geführt wird
number - die zu überprüfende Kontonummer
Returns:
true wenn die Kontonummer nicht verifiziert werden kann (z.B. weil das jeweilige Prüfzifferverfahren noch nicht in HBCI4Java implementiert ist) oder wenn die Prüfung erfolgreich verläuft; false wird immer nur dann zurückgegeben, wenn tatsächlich ein Prüfzifferverfahren zum Überprüfen verwendet wurde und die Prüfung einen Fehler ergab