Scripting Support Fehler nach Java Update (Java 8 aka 1.8)

Hier darf jeder ein Thema erstellen das nicht zu den Support-Themen passt
holenbach

Scripting Support Fehler nach Java Update (Java 8 aka 1.8)

Beitrag von holenbach » Sa 22. Mär 2014, 13:07

Hallo,

nach der erfolgreichen Fehlerbehebung des HTTP 400 Fehlers bei der HBCI Anmeldung Cortal-Consors unter Hibiscus,

http://www.onlinebanking-forum.de/forum ... hp?t=16964

durch das Update auf Java 1.8 habe ich nun ein ganz anders gelagertes Problem:

Die Synchronisation der per Scripting angebundenen Offline-Konten (z.B. American-Express, DKBVisa,..) bringen beim Abruf der aktuellen Salden und Umsätze alle einen identischen Fehler...siehe Debug Log Auszug.

Code: Alles auswählen

[Sat Mar 22 11:24:25 CET 2014][DEBUG][de.willuhn.jameica.services.BeanService.get]   creating new class de.willuhn.jameica.gui.internal.ext.ScriptingSettingsView
[Sat Mar 22 11:24:25 CET 2014][INFO][de.willuhn.jameica.services.ScriptingService.eval] executing script E:\HB\usr\jamaica_nightly\plugins\hibiscus.script.americanexpress\hibiscus.script.americanexpress.js
[Sat Mar 22 11:24:25 CET 2014][INFO][de.willuhn.jameica.services.ScriptingService.eval] executing script E:\HB\usr\jamaica_nightly\plugins\hibiscus.script.americanexpress\hibiscus.script.americanexpress.js
[Sat Mar 22 11:24:25 CET 2014][ERROR][de.willuhn.jameica.services.ScriptingService.eval] error while loading script
javax.script.ScriptException: ReferenceError: "importPackage" is not defined in <eval>
  at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:564)
  at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:548)
  at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:528)
  at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:524)
  at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:189)
  at javax.script.AbstractScriptEngine.eval(Unknown Source)
  at de.willuhn.jameica.services.ScriptingService.eval(ScriptingService.java:261)
  at de.willuhn.jameica.services.ScriptingService.init(ScriptingService.java:154)
  at de.willuhn.jameica.services.ScriptingService.reload(ScriptingService.java:231)
  at de.willuhn.jameica.services.ScriptingService.addScript(ScriptingService.java:368)
  at de.willuhn.jameica.messaging.AddScriptMessageConsumer.handleMessage(AddScriptMessageConsumer.java:67)
  at de.willuhn.jameica.messaging.NamedConcurrentQueue.deliver(NamedConcurrentQueue.java:246)
  at de.willuhn.jameica.messaging.NamedConcurrentQueue.access$000(NamedConcurrentQueue.java:26)
  at de.willuhn.jameica.messaging.NamedConcurrentQueue$1.run(NamedConcurrentQueue.java:81)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
  at java.lang.Thread.run(Unknown Source)
Caused by: <eval> ReferenceError: "importPackage" is not defined
  at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:56)
  at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:318)
  at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:290)
  at jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:274)
  at jdk.nashorn.internal.scripts.Script$engine._L35(nashorn:engine/resources/engine.js:37)
  at jdk.nashorn.internal.scripts.Script$\^eval\_.scopeCall-7(<eval>)
  at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:202)
  at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:498)
  at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:206)
  at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378)
  at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:546)
  ... 15 more
Nach einiger Recherche bin ich auf folgenden Hinweis im JDK Bug System gestoßen.

Bug Report Scripting Support

Kann das jemand bestätigen? Und wenn, wie komme ich aus diesem Dilemma wieder heraus?

LG
Holenbach

Benutzeravatar
Hibiscus-Scripter
Administrator
Administrator
Beiträge: 1695
Registriert: Mi 30. Okt 2013, 17:14
Wohnort: Würzburg

Re: Scripting Support Fehler nach Java Update

Beitrag von Hibiscus-Scripter » Sa 22. Mär 2014, 19:54

Hallo und willkommen im Forum,

also getestet hab ich dass selbst noch nicht, macht man ja auch nicht so frühzeitig ;-) und auf die Consors kann man da schon schimpfen was die da für nen Blödsinn treiben.

Jedenfalls kann ich in deinem Logauszug auch keinen einzigen Teil eines Scripts erkennen, was heißt dass da oben ist alles nur Jameica. Also mal den Olaf bitten hier zu antworten ... Wenn er denn möchte.

Denn nur weil da eine Bank was nötig hat muss man ja nicht gleich bei allen anderen nen Kopfstand machen.
Also: Sofortlösung: benutze wie empfohlen Java 7 ;-)

(wobei es natürlich auch mal mit Java8 laufen sollte)
... wer lesen kann ist wie immer im klaren Vorteil ...

:!: Vor dem Posten: Bitte die Posting-Regeln für neue Beiträge lesen und bitte auch immer alle 4. Punkte zur Fehlermeldung beachten (Der Post wird ansonsten gelöscht)

:idea: Hilfe und Informationen zu den Test- und Nightly-Builds und deren Installation findet Ihr z. B. im Tipps und Tricks-Forum (Weitere hilfreiche Artikel findet man in der FAQ auf der Projekt-Website)

Wer ein Dankeschön für die Arbeit und Unkosten senden möchte, kann gerne auch :arrow: Spenden

holenbach

Re: Scripting Support Fehler nach Java Update

Beitrag von holenbach » Sa 22. Mär 2014, 21:08

Hallo scripter,

stimmt. Das Update auf die neue Java Version war eher ein Testballon, um dieses Zustand mit der einen Bank zu beheben. Ich stehe mit dem Support von Consors in regem Kontakt. Sie hatten in ihrem HBCI Backend einige Felddefinitionen vertauscht. Scheint bisher keinem aufgefallen zu sein. Also wundert mich das Antwortverhalten ihrer Server auf die Jamaica Framework Abfrage mit einem HTTP 400 Fehler auch nicht wirklich. :ugeek:
Ich wollte nur darauf hinweisen, dass mit der Java 1.8er Version das Laden deiner Scripte fehlschlägt. Leider auch alle anderen, z.B. die Payplal Abfragen.

Nun kann ich mich zwischen 2 Übeln wohl entscheiden. Falls du noch weitergehende Log Dateien brauchst, kann ich sie dir gerne zur Verfügung stellen. Bin wirklich an einer Rundum sorglos Lösung interessiert :D

Also nix für ungut...ich bleibe da jedenfalls auch bei CortalConsors noch dran.

Danke für den Support

Holenbach

Benutzeravatar
Hibiscus-Scripter
Administrator
Administrator
Beiträge: 1695
Registriert: Mi 30. Okt 2013, 17:14
Wohnort: Würzburg

Re: Scripting Support Fehler nach Java Update

Beitrag von Hibiscus-Scripter » Sa 22. Mär 2014, 22:55

ja kein Problem, werde dass natürlich auch beobachten da ja auch alles mit Java 8 laufen soll.

Aber das Problem mit Consonrs hat ja wie die schon zugeben nicht direkt was mit Java 7 oder 8 zu tun. Blöder Zufall dass es mit Java 8 geht, denke ich? Haben ja auch schon User bestätigt dass dies nicht ein Allheilmittel ist.

In Java 8 kann man jedenfalls nicht einfach mal mehr per Scripting ein Java-Paket einbinden. Bin mir jetzt grad nur nicht ganz sicher ob ich das mit ner Abfrage und anderem Code im Script umgehen kann oder ob direkt was in Jameica geändert werden muss dass mit allen Java-Versionen die Java-Pakete im JavaScripting eingebunden werden können.

Fragen wir mal …
... wer lesen kann ist wie immer im klaren Vorteil ...

:!: Vor dem Posten: Bitte die Posting-Regeln für neue Beiträge lesen und bitte auch immer alle 4. Punkte zur Fehlermeldung beachten (Der Post wird ansonsten gelöscht)

:idea: Hilfe und Informationen zu den Test- und Nightly-Builds und deren Installation findet Ihr z. B. im Tipps und Tricks-Forum (Weitere hilfreiche Artikel findet man in der FAQ auf der Projekt-Website)

Wer ein Dankeschön für die Arbeit und Unkosten senden möchte, kann gerne auch :arrow: Spenden

Benutzeravatar
hibiscus
Experte
Experte
Beiträge: 15
Registriert: Sa 22. Mär 2014, 23:08

Re: Scripting Support Fehler nach Java Update

Beitrag von hibiscus » So 23. Mär 2014, 22:48

Im Bugzilla von Hibiscus existiert hierzu auch bereits ein Ticket:

https://www.willuhn.de/bugzilla/show_bug.cgi?id=1496

Das Problem ist, dass bis Java 7 eine Javascript-Engine namens "RhinoScript" verwendet wurde, die urspruenglich von Mozilla stammt. Mit Java 8 wurde diese gegen eine Neuentwicklung namens "Nashorn" ersetzt. Leider kennt diese aber die benoetigte Funktion "importPackage" nicht - jedenfalls nicht "ab Werk".

Unter

https://bugs.openjdk.java.net/browse/JD ... t-13390947

gibt es hierzu auch einen OpenJDK-Bugreport. Die Loesung ist wohl, mit folgender Zeile ein Modul zu laden, welches die Abwaertskompatibilitaet wieder herstellt:

load("nashorn:mozilla_compat.js");

(Siehe Kommentar in dem Ticket bei openjdk.java.net).

Das Problem an der Sache ist jetzt aber, dass genau dieser Aufruf vermutlich zu Fehlern unter Java 6 und 7 fuehren koennte, weil es dort eine "mozilla_compat.js" nicht gibt. Das habe ich allerdings nicht getestet. Muesste also mal jemand ausprobieren - also die o.g. Zeile zu Beginn des Javascript einfuegen. Mit etwas Glueck wird sie unter Java 6/7 einfach ignoriert. Falls nicht, koennte man noch versuchen, ein try/catch drum rum zu machen, damit der Fehler unter Java 6/7 ignoriert wird. Etwa so:

try
{
load("nashorn:mozilla_compat.js");
}
catch (Throwable t)
{
// ignorieren - ist Java 6/7
}

Falls das auch nicht geht, weiss ich ehrlich gesagt nicht, wie man dann noch Scripts bauen soll, die sowohl unter Java 6/7 als auch unter Java 8 funktionieren. Allerdings bin ich zuversichtlich, dass o.g. funktioniert.

Benutzeravatar
Hibiscus-Scripter
Administrator
Administrator
Beiträge: 1695
Registriert: Mi 30. Okt 2013, 17:14
Wohnort: Würzburg

Re: Scripting Support Fehler nach Java Update (Java 8 aka 1.

Beitrag von Hibiscus-Scripter » Mo 24. Mär 2014, 11:36

danke, so was in der Richtung dachte ich mir schon ;)

hab dass jetzt mal ausprobiert und mit einem try-catch ist die Sache mit dem Laden natürlich kein Problem.
Also ist "importPackage" wieder möglich.

Ein paar andere Sachen musste ich allerdings noch ausbessern um das Script an sich mal zum anlaufen zu bewegen ...

Jetzt hänge ich allerdings daran dass die Datenbank von Hibiscus nicht mehr geladen werden kann: ein

Code: Alles auswählen

var db = Application.getServiceFactory().lookup(HBCI,"database"); 
bringt nun immer den Fehler:

Code: Alles auswählen

Log: java.lang.ClassCastException: Cannot cast jdk.internal.dynalink.beans.StaticClass to java.lang.Class
Ich hoffe dies ist auch der Grund warum die neue Synchronisierung nicht mehr erkannt wird?!
... wer lesen kann ist wie immer im klaren Vorteil ...

:!: Vor dem Posten: Bitte die Posting-Regeln für neue Beiträge lesen und bitte auch immer alle 4. Punkte zur Fehlermeldung beachten (Der Post wird ansonsten gelöscht)

:idea: Hilfe und Informationen zu den Test- und Nightly-Builds und deren Installation findet Ihr z. B. im Tipps und Tricks-Forum (Weitere hilfreiche Artikel findet man in der FAQ auf der Projekt-Website)

Wer ein Dankeschön für die Arbeit und Unkosten senden möchte, kann gerne auch :arrow: Spenden

Benutzeravatar
hibiscus
Experte
Experte
Beiträge: 15
Registriert: Sa 22. Mär 2014, 23:08

Re: Scripting Support Fehler nach Java Update (Java 8 aka 1.

Beitrag von hibiscus » Mo 24. Mär 2014, 12:44

Das ist bloed. Aber ich hab ne Loesung dafuer gefunden, die sowohl unter Java 7 als auch unter Java 8 funktioniert.

Das "HBCI" in der fehlerausloesenden Zeile ist der Name einer Klasse. Bei der neuen Synchronisierung ist das das selbe. Immer dann, wenn im Javascript-Code ein Klassen-Name einfach so verwendet wird (das betrifft auch die Klasse "SynchronizeJobKontoauszug"), muss jetzt die Klasse mittels "Class.forName" und kompletter Angabe des Klassennamens mit Package geladen werden.

Aus

Code: Alles auswählen

    var db = Application.getServiceFactory().lookup(HBCI,"database"); 
wird dann:

Code: Alles auswählen

    var db = Application.getServiceFactory().lookup(java.lang.Class.forName("de.willuhn.jameica.hbci.HBCI"),"database"); 
Und aus

Code: Alles auswählen

    if (type.equals(SynchronizeJobKontoauszug)) { return "HibiscusScripting_PayPal_Kontoauszug"; };
wird:

Code: Alles auswählen

    var v = java.lang.Class.forName("de.willuhn.jameica.hbci.synchronize.jobs.SynchronizeJobKontoauszug");
    if (type.equals(v)) { return "HibiscusScripting_PayPal_Kontoauszug"; };
Das sollte dann sowohl unter Java 7 als auch unter Java 8 funktionieren.

Benutzeravatar
Hibiscus-Scripter
Administrator
Administrator
Beiträge: 1695
Registriert: Mi 30. Okt 2013, 17:14
Wohnort: Würzburg

Re: Scripting Support Fehler nach Java Update (Java 8 aka 1.

Beitrag von Hibiscus-Scripter » Mo 24. Mär 2014, 15:20

danke so sieht es schon besser aus ^^ jetzt versteh ich auch die Meldung ;)

zudem wird wohl aus:

Code: Alles auswählen

= db.createList(Konto);
dann:

Code: Alles auswählen

= db.createList(java.lang.Class.forName("de.willuhn.jameica.hbci.rmi.Konto"));
und aus:

Code: Alles auswählen

= db.createObject(Umsatz,null);
wird dann auch:

Code: Alles auswählen

= db.createObject(java.lang.Class.forName("de.willuhn.jameica.hbci.rmi.Umsatz"),null);
und so weiter ...


nur geht das ganze so leider nicht unter Java 7
hier erhält man dann direkt ein:

Code: Alles auswählen

Log: JavaException: java.lang.ClassNotFoundException: de.willuhn.jameica.hbci.HBCI
der mag dass also mit Class.forName nicht.
Wenn man die "" und den Pfad wegnimmt also Class.forName nur mit HBCI verwendet kommt der selbe Fehler ?!

Im schlimmsten Fall muss man jetzt bei all diesen Aufrufen eine Abfrage einbauen welche Variante genommen werden muss, na Prost Mahlzeit ...
... wer lesen kann ist wie immer im klaren Vorteil ...

:!: Vor dem Posten: Bitte die Posting-Regeln für neue Beiträge lesen und bitte auch immer alle 4. Punkte zur Fehlermeldung beachten (Der Post wird ansonsten gelöscht)

:idea: Hilfe und Informationen zu den Test- und Nightly-Builds und deren Installation findet Ihr z. B. im Tipps und Tricks-Forum (Weitere hilfreiche Artikel findet man in der FAQ auf der Projekt-Website)

Wer ein Dankeschön für die Arbeit und Unkosten senden möchte, kann gerne auch :arrow: Spenden

Benutzeravatar
hibiscus
Experte
Experte
Beiträge: 15
Registriert: Sa 22. Mär 2014, 23:08

Re: Scripting Support Fehler nach Java Update (Java 8 aka 1.

Beitrag von hibiscus » Mo 24. Mär 2014, 15:51

Mit den anderen Klassen (Umsatz, Konto, usw.) hast du Recht. Dort muss das dann auch gemacht werden. Allerdings wundert mich die ClassNotFoundException. Der Parameter fuer java.lang.Class.forName("...") muss aber auf jeden Fall mit doppelten Anfuehrungszeichen erfolgen. Und auch mit dem kompletten Package.

Geht es unter Java 7 generell nicht mit "Class.forName" oder nur bei der Klasse "HBCI"?

Benutzeravatar
Hibiscus-Scripter
Administrator
Administrator
Beiträge: 1695
Registriert: Mi 30. Okt 2013, 17:14
Wohnort: Würzburg

Re: Scripting Support Fehler nach Java Update (Java 8 aka 1.

Beitrag von Hibiscus-Scripter » Mo 24. Mär 2014, 16:06

soweit ich dass sehe generell nicht, denn als ich den Teil mit HBCI umgeschrieben habe wurde mir gleich der Teil mit Konto um die Ohren gehauen ...
obwohl es java.lang.Class.forName unter Java 7 natürlich auch gibt und ich denke auch so gehen sollte ...
hmm ...
... wer lesen kann ist wie immer im klaren Vorteil ...

:!: Vor dem Posten: Bitte die Posting-Regeln für neue Beiträge lesen und bitte auch immer alle 4. Punkte zur Fehlermeldung beachten (Der Post wird ansonsten gelöscht)

:idea: Hilfe und Informationen zu den Test- und Nightly-Builds und deren Installation findet Ihr z. B. im Tipps und Tricks-Forum (Weitere hilfreiche Artikel findet man in der FAQ auf der Projekt-Website)

Wer ein Dankeschön für die Arbeit und Unkosten senden möchte, kann gerne auch :arrow: Spenden

Zurück zu „Allgemeine Diskussionen“