Ich habe den Fehler identifiziert. Dieser liegt im hbci4java. Die Properties, wo die erlaubten Tage ausgelesen werden, sind hingegen der
HIDAES:19:4:4+800+1+4:2:360:0102030612:010203040506070809101112131415161718192021222324252627282930:::52
nicht aufsteigend sortiert, sondern absteigend von 30-01.
Die Implementierung der HBCI4Java sieht hier nun folgendermassen aus (von mir zum Debug leicht umgebaut, Logik aber nicht verändert):
Code
String st = res.getProperty("dayspermonth");
if (st != null) {
String value2 = new DecimalFormat("00").format(Integer
.parseInt(value));
if (!st.equals("00")) {
int index = st.indexOf(value2) & 1;
if (index != 0) {
String msg = HBCIUtilsInternal.getLocMsg(
"EXCMSG_INV_EXECDAY", value);
if (!HBCIUtilsInternal
.ignoreError(
getMainPassport(),
"client.errors.ignoreWrongJobDataErrors",
msg))
throw new InvalidUserDataException(msg);
}
}
}
Es wird als der Index genommen, an welchem die übermittelte Zeit das erste Mal auftritt und dann über die binäre Verknüpfung geschaut, ob der Index "gerade" ist. Da nun aber die Reihenfolge von 30-01 läuft ist der erste Treffer "302928272625242322212
01918..." bei der 20 und 19 zu finden, was aber ein gerade Index ist, welcher durch binäre Verknüpfung "ungerade" wird, und somit die Bedingung zur Exception wahr werden lässt.
Es müsste als hier der String, wie bereits in Hibiscus gesplittet werden und geguckt werden, ob der erlaubte Wert enthalten ist.
@willow: Magst Du den Fehler eventuell an hbci4java melden? Ich denke, dass Du dort guten Kontakt hast, und würde mir eine Menge Arbeit ersparen.
Mfg
Knesch