IllegalArgumentException `URI can't be null.` beim Verbinden

70 views
Skip to first unread message

Andre Schemschat

unread,
Jan 6, 2018, 10:31:46 AM1/6/18
to hbci4java
Hi zusammen,

ich hab die hbci4java-Bibliothek vor kurzem gefunden und wollte heute damit etwas rumspielen, laufe aber momentan in einen Fehler den ich nicht ganz einordnen kann. Ich habe wie empfohlen die Demo aus https://github.com/hbci4j/hbci4java/blob/master/src/main/java/org/kapott/hbci/examples/UmsatzAbrufPinTan.java kopiert und per Maven die Version 3.0.9 eingebunden (Java-8, auf einem Unix, falls relevant). Sonst habe ich nur BLZ, USER und PIN entsprechend angepasst. Beim Starten kriege ich allerdings einen Fehler beim Erzeugen des HBCIHandlers:


Zeile der Demo die schief geht:
 // Verbindung zum Server aufbauen
handle
= new HBCIHandler(VERSION.getId(),passport);


Stacktrace:
Exception in thread "main" org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
   at org
.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:142)
   at de
.schemschat.banking.Main.main(Main.java:99)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Nutzerdaten
   at org
.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:281)
   at org
.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:133)
   
... 1 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Ermitteln einer neuen System-ID
   at org
.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:474)
   at org
.kapott.hbci.manager.HBCIUser.updateUserData(HBCIUser.java:665)
   at org
.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:690)
   at org
.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:279)
   
... 2 more
Caused by: org.kapott.hbci.exceptions.ProcessException: Fehler beim Ermitteln einer neuen System-ID
   at org
.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:461)
   
... 5 more


Ich habe in den Constructor mal reingedebuggt und der eigentliche Fehler tritt in der Klasse CommPinTan in der Methode ping(MSG msg) in Zeile 147 auf. Dort wird versucht die Verbindung zum Server aufzubauen:

   // !!! Die naechste Zeile schlaegt fehl:
   conn
.connect();                        
   OutputStream out=conn.getOutputStream();
           
   HBCIUtils.log("writing data to output stream", HBCIUtils.LOG_DEBUG);
   
out.write(b);
   
out.flush();
           
   
HBCIUtils.log("closing output stream", HBCIUtils.LOG_DEBUG);
   
out.close();
} catch (Exception e) {
   
// !!! Exception ist: java.lang.IllegalArgumentException: URI can't be null.
    HBCI_Exception he
= new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_SENDERR"),e);
    he
.setFatal(true); // Abbruch. Auch dann, wenn es ein anonymer BPD-Abruf war
   
throw he;
}


Habe ich irgendwas uebersehen oder muesste ich noch was einstellen? 


Vielen Dank im voraus und schoene Gruesse
Andre



Andre Schemschat

unread,
Jan 6, 2018, 10:33:44 AM1/6/18
to hbci4java
Dammit, den Stack vom Debugging vergessen:
 at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:157)
 at org
.kapott.hbci.comm.Comm.pingpong(Comm.java:72)
 at org
.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:352)
 at org
.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:178)
 at org
.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:307)
 at org
.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:451)
 at org
.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:268)
 at org
.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
 at de
.test.banking.Main.main(Main.java:99)

Olaf Willuhn

unread,
Jan 6, 2018, 10:37:04 AM1/6/18
to hbci4java

Naja, offensichtlich hat die Connection keine URL. Ich wurde vermuten, dass in " passport.setHost(info.getPinTanAddress());" keine Adresse uebergeben wurde, weil "getPinTanAddress()" keine zurueckgeliefert hat. Also kennt HBCI4Java entweder die Bank nicht (BLZ korrekt?) oder aber die Bank unterstuetzt PIN/TAN per HBCI gar nicht. Um welche BLZ handelt es sich denn?

--
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "hbci4java" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an hbci4java+...@googlegroups.com.
Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an hbci...@googlegroups.com.
Gruppe besuchen: https://groups.google.com/group/hbci4java
Wenn Sie diese Diskussion im Web verfolgen möchten, rufen Sie https://groups.google.com/d/msgid/hbci4java/d37e54ab-8283-4a08-bbb8-d4d27a21a0b5%40googlegroups.com auf.
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.

Andre Schemschat

unread,
Jan 6, 2018, 10:57:01 AM1/6/18
to hbci4java
Hey, danke fuer die fixe Antwort :)

Die URL stimmt (mit einem vorsichtigen: glaube ich ... :) ). Das sind die Bankinfos, die in der Zeile oben gesetzt werden und das conn-Objekt scheint auch eine Url zu haben


info = {BankInfo@955} "26550105: Sparkasse Osnabrück"
  blz
= "26550105"
  bic
= "NOLADE22XXX"
  checksumMethod
= "00"
  location
= "Osnabrück"
  name
= "Sparkasse Osnabrück"
  pinTanAddress
= "https://banking-ni3.s-fints-pt-ni.de/fints30"
  pinTanVersion
= {HBCIVersion@964} "300: FinTS 3.0"
  rdhAddress
= "i039.s-fints-ni.de"
  rdhVersion
= {HBCIVersion@966} "220: HBCI 2.2"

this.conn = sun.net.www.protocol.https.DelegateHttpsURLConnection:https://[https:]:443//banking-ni3.s-fints-pt-ni.de/fints30

In der App die ich sonst nutze ist folgendes hinterlegt:
Server-url: https://banking-ni3.s-fints-pt-ni.de/fints30 ; HBCI-Version: 3.0; HTTP-Version: 1.0.
Ganz naiv sage ich jetzt mal: Dort nutze ich auch noch die PIN zum authorisieren, haette jetzt also vermutet das PinTan geht in der Hoffnung, dass das nicht zwei paar Schuhe sind :)


Olaf Willuhn

unread,
Jan 6, 2018, 11:06:22 AM1/6/18
to hbci4java
Kannst du mal den kompletten Stacktrace posten?

Andre Schemschat

unread,
Jan 6, 2018, 11:15:01 AM1/6/18
to hbci4java
Vollstaendige Log-Ausgaben:

using default system locale de_DE
initialized HBCI4Java for thread group main
hbci4java 3.0.9
trying to load BLZ data
creating new instance of a PinTan passport
loading data from file /home/daishy/workspace/BankingApp/testpassport.dat
registering institute
fetching BPD
creating new raw message DialogInitAnon
setting raw property DialogInitAnon.Idn.KIK.blz to "26550105"
setting raw property DialogInitAnon.Idn.KIK.country to "DE"
setting raw property DialogInitAnon.ProcPrep.BPD to "0"
setting raw property DialogInitAnon.ProcPrep.UPD to "0"
setting raw property DialogInitAnon.ProcPrep.lang to "0"
setting raw property DialogInitAnon.ProcPrep.prodName to "HBCI4Java"
setting raw property DialogInitAnon.ProcPrep.prodVersion to "2.5"
generating raw message DialogInitAnon
sending message: HNHBK:1:3+000000000111+300+0+1'HKIDN:2:2+280:26550105+9999999999+0+0'HKVVB:3:3+0+0+0+HBCI4Java+2.5'HNHBS:4:1+1'
communicating dialogid/msgnum 0/1
using filter: MIM (base64)
Verbinde mit https://https::443//banking-ni3.s-fints-pt-ni.de/fints30 und prüfe Zertifikat
using system socket factory
connecting to server
activating modified socket factory for checkCert=true and debugging=true
org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Senden der HBCI-Nachricht zum Server
at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:157)
at org.kapott.hbci.comm.Comm.pingpong(Comm.java:72)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:352)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:178)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:307)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:451)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:268)
at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
at de.schemschat.banking.Main.main(Main.java:100)
Caused by: java.lang.IllegalArgumentException: URI can't be null.
at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:147)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1150)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:147)
... 8 more
dialog init ended with errors - searching for return code 'wrong PIN'
autosecfunc: search for 3920s in response to detect allowed twostep secmechs
extracting BPD from results
writing to passport file /home/daishy/workspace/BankingApp/testpassport.dat_5525453572175392504
saving two step mechs: []
saving current tan method: 999
closing output stream
saving passport file /home/daishy/workspace/BankingApp/testpassport.dat
deleting old passport file /home/daishy/workspace/BankingApp/testpassport.dat
renaming testpassport.dat_5525453572175392504 to testpassport.dat
new passport file now exists: /home/daishy/workspace/BankingApp/testpassport.dat
creating new raw message DialogEndAnon
setting raw property DialogEndAnon.MsgHead.dialogid to "null"
org.kapott.hbci.exceptions.HBCI_Exception: kann HBCI-Wert für MsgHead.dialogid nicht auf null setzen
at org.kapott.hbci.manager.HBCIKernelImpl.rawSet(HBCIKernelImpl.java:166)
at org.kapott.hbci.manager.HBCIInstitute.doDialogEnd(HBCIInstitute.java:185)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:328)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:451)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:268)
at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
at de.schemschat.banking.Main.main(Main.java:100)
fetching BPD failed: java.lang.IllegalArgumentException: URI can't be null.
org.kapott.hbci.exceptions.ProcessException: Abholen der BPD fehlgeschlagen
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:335)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:451)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:268)
at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
at de.schemschat.banking.Main.main(Main.java:100)
FAILED! - maybe this institute does not support anonymous logins
we will nevertheless go on
checking if requested hbci parameters are supported
can not check if requested parameters are supported
registering user
fetching new sys-id from institute
checking whether passport is supported (but ignoring result)
passport supported: true
creating new raw message Synch
setting raw property Synch.Idn.KIK.blz to "26550105"
setting raw property Synch.Idn.KIK.country to "DE"
setting raw property Synch.Idn.customerid to "XXXXXXXXX"
setting raw property Synch.Idn.sysid to "0"
setting raw property Synch.Idn.sysStatus to "1"
setting raw property Synch.MsgHead.dialogid to "0"
setting raw property Synch.MsgHead.msgnum to "1"
setting raw property Synch.MsgTail.msgnum to "1"
setting raw property Synch.ProcPrep.BPD to "0"
setting raw property Synch.ProcPrep.UPD to "0"
setting raw property Synch.ProcPrep.lang to "0"
setting raw property Synch.ProcPrep.prodName to "HBCI4Java"
setting raw property Synch.ProcPrep.prodVersion to "2.5"
setting raw property Synch.Sync.mode to "0"
generating raw message Synch
trying to insert signature
setting secfunc to 999
setting cid to 
setting role to 1
setting range to 1
setting keyblz to 26550105
setting keycountry to DE
setting keyuserid to XXXXXXXXX
setting keynum to 0
setting keyversion to 0
setting sysid to 0
setting sigid to 1
setting sigalg to 10
setting sigmode to 16
setting hashalg to 999
writing to passport file /home/daishy/workspace/BankingApp/testpassport.dat_4201956269444568967
saving two step mechs: []
saving current tan method: 999
closing output stream
saving passport file /home/daishy/workspace/BankingApp/testpassport.dat
deleting old passport file /home/daishy/workspace/BankingApp/testpassport.dat
renaming testpassport.dat_4201956269444568967 to testpassport.dat
new passport file now exists: /home/daishy/workspace/BankingApp/testpassport.dat
onestep method - checking GVs to decide whether or not we need a TAN
the job with the code HNSHK seems not to be allowed with PIN/TAN
the job with the code HKIDN seems not to be allowed with PIN/TAN
the job with the code HKVVB seems not to be allowed with PIN/TAN
the job with the code HKSYN seems not to be allowed with PIN/TAN
sending message: HNHBK:1:3+000000000255+300+0+1'HNSHK:2:4+PIN:1+999+1798016960+1+1+1::0+1+1:20180106:170855+1:999:1+6:10:16+280:26550105:XXXXXXXXX:S:0:0'HKIDN:3:2+280:26550105+XXXXXXXXX+0+1'HKVVB:4:3+0+0+0+HBCI4Java+2.5'HKSYN:5:3+0'HNSHA:6:2+1798016960++XXXXX'HNHBS:7:1+1'
trying to encrypt message
creating new crypt factory
checking if crypt available in pool
no, creating new crypt
adding to used pool
crypt acquired
setting secfunc to 998
setting keytype to 5
setting blz to 26550105
setting country to DE
setting keyuserid to XXXXXXXXX
setting keynum to 0
setting keyversion to 0
setting cid to 
setting sysId to 0
setting role to 1
setting alg to 13
setting mode to 2
setting compfunc to 0
encrypted message to be sent: HNHBK:1:3+000000000374+300+0+1'HNVSK:998:3+PIN:1+998+1+1::0+1:20180106:170855+2:2:13:@8@        :5:1+280:26550105:XXXXXXXXX:V:0:0+0'HNVSD:999:1+@212@HNSHK:2:4+PIN:1+999+1798016960+1+1+1::0+1+1:20180106:170855+1:999:1+6:10:16+280:26550105:XXXXXXXXX:S:0:0'HKIDN:3:2+280:26550105+XXXXXXXXX+0+1'HKVVB:4:3+0+0+0+HBCI4Java+2.5'HKSYN:5:3+0'HNSHA:6:2+1798016960++XXXXX''HNHBS:7:1+1'
communicating dialogid/msgnum 0/1
using filter: MIM (base64)
Verbinde mit https://https::443//banking-ni3.s-fints-pt-ni.de/fints30 und prüfe Zertifikat
using system socket factory
connecting to server
activating modified socket factory for checkCert=true and debugging=true
org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Senden der HBCI-Nachricht zum Server
at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:157)
at org.kapott.hbci.comm.Comm.pingpong(Comm.java:72)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:352)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:178)
at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:442)
at org.kapott.hbci.manager.HBCIUser.updateUserData(HBCIUser.java:665)
at org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:690)
at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:279)
at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:133)
at de.schemschat.banking.Main.main(Main.java:100)
Caused by: java.lang.IllegalArgumentException: URI can't be null.
at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:147)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1150)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
at org.kapott.hbci.comm.CommPinTan.ping(CommPinTan.java:147)
... 9 more
dialog init ended with errors - searching for return code 'wrong PIN'
autosecfunc: search for 3920s in response to detect allowed twostep secmechs
autosecfunc: (re)checking selected pintan secmech
autosecfunc: there is only one pintan method (999) supported - choosing this automatically





Und die Exception die in die Main hochkommt hat den Trace:
org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
 at org
.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:142)

 at de
.schemschat.banking.Main.main(Main.java:100)

Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Nutzerdaten
 at org
.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:281)
 at org
.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:133)

 
... 1 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Ermitteln einer neuen System-ID
 at org
.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:474)
 at org
.kapott.hbci.manager.HBCIUser.updateUserData(HBCIUser.java:665)
 at org
.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:690)
 at org
.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:279)
 
... 2 more
Caused by: org.kapott.hbci.exceptions.ProcessException: Fehler beim Ermitteln einer neuen System-ID
 at org
.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:461)
 
... 5 more

Die richtigen/relevanten Ausgaben besorgt/erwischt?

Olaf Willuhn

unread,
Jan 6, 2018, 11:27:59 AM1/6/18
to hbci4java
Da wird eine ungueltige URL verwendet: "https://https::443//banking-ni3.s-fints-pt-ni.de/fints30".

Der Port 443 ist da falsch. Aeltere HBCI4Java-Versionen haben noch ein Problem damit, wenn die URL mit "https://" beginnt (weil HBCI4Java selbst versucht, das Protokoll nich vorn anzuhaengen). Und deine HBCI4Java-Version ist veraltet. Du verwendest 3.0.9.
Die aktuelle Version ist 3.0.11. Dort tritt der Fehler nicht auf.

Andre Schemschat

unread,
Jan 6, 2018, 11:35:36 AM1/6/18
to hbci4java
Ah, alles klar. Ich hatte den Maven-Block aus der Readme genommen und nicht nochmal gecheckt ob das die aktuellste Version war :O. Und die URL hatte ich tatsaechlich gesehen, hab das aber auf merkwuerdige toString-Implementierung von Java geschoben und nicht nochmal geprueft.
Mit 3.0.11 scheint es zu gehen, die Konten werden abgerufen.
Vielen herzlichen Dank fuer die schnelle Hilfe und ein schoenes Wochenende :)

Reply all
Reply to author
Forward
0 new messages