"Failed making field accessible" bei Verknüpfung mit Portfolio Report

Guten Tag liebe Community

Zuerst möchte ich mich beim Entwickler für diese tolle Software bedanken.
Ich benütze PP auf Linux (Kubuntu) und bin gerade daran mich vertraut mit PP zu machen, hierbei habe ich eine Fehlermeldung erhalten, welche ich nicht lösen kann.

Ich habe für ein Wertpapier (Alphabet, ABEA) ein Verknüpfung mit Portfolio Report erstellen wollen und erhalte die unten angeführte Fehlermeldung. Es werden keine historischen Daten abgerufen.

Hat jemand eine Ahnung wo mein Problem liegen könnte? Installiert habe ich dieses Paket
ibwebkit2gtk-4.0-37 für PP. Das Programm habe ich von der Website runtergeladen und scheint sonst zu funktionieren.

Danke für Eure Hilfe.

Gruss
Meggs

Mon May 30 18:11:44 CEST 2022
Während "Wertpapiere mit {0} abgleichen" ist ein interner Fehler aufgetreten.

com.google.gson.JsonIOException: Failed making field 'java.time.LocalDate#year' accessible; either change its visibility or write a custom TypeAdapter for its declaring type
	at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:22)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
	at com.google.gson.Gson.getAdapter(Gson.java:501)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:116)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:165)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
	at com.google.gson.Gson.getAdapter(Gson.java:501)
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:56)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:97)
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61)
	at com.google.gson.Gson.toJson(Gson.java:747)
	at com.google.gson.Gson.toJson(Gson.java:726)
	at com.google.gson.Gson.toJson(Gson.java:681)
	at com.google.gson.Gson.toJson(Gson.java:661)
	at name.abuchen.portfolio.online.impl.PortfolioReportNet$OnlineItem.update(PortfolioReportNet.java:285)
	at name.abuchen.portfolio.online.impl.PortfolioReportNet.updateWith(PortfolioReportNet.java:357)
	at name.abuchen.portfolio.ui.jobs.SyncOnlineSecuritiesJob.run(SyncOnlineSecuritiesJob.java:55)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final int java.time.LocalDate.year accessible: module java.base does not "opens java.time" to unnamed module @4963c0e8
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:178)
	at java.base/java.lang.reflect.Field.setAccessible(Field.java:172)
	at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:19)
	... 18 more


Das Papier war also schon angelegt, aber noch nicht mit Portfolio Report verknüpft?



Bildschirmfoto_2022-05-30_18-52-04

Danke für deine Antwort.
Ja, das Papier war schon angelegt.
Die Schritte sind genau so, wie du sie bildlich dargestellt hast.
Hast du WIn oder Linux am Laufen für PP?

me@host:~$ uname -a
Linux xubuntu1404 5.4.0-113-generic #127-Ubuntu SMP Wed May 18 14:30:56 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
me@host:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.4 LTS
Release:	20.04
Codename:	focal

Ich habe aus den offiziellen Quellen ein Flatpaket für PP installiert. Hier funktioniert es.
Ich mag aber keine Flatpakete :-). Eventuell ist meine Library zu neu, aber die ibwebkitgtk 3.0 wie vom Entwickler empfohlen gibt es nicht mehr.

Welche Java-Version setzt Du ein?

Ich verwende openjdk-17

Nimm mal 11. Bei Java 17 wurde die Drohung seit Java 9 wahrgemacht, dass Reflection-Zugriffe auf interne Datenstrukturen unterbunden werden. Ich vermute mal, dass das hier reinfunkt.

Mit der GTK-Library hat das im übrigen nichts zu tun. Die Fehlermeldung kommt vom Versuch, ein JSON zu erzeugen. Da ist keine GUI involviert.

4 Likes

Du hattest Recht. Es funktioniert mit der 11er. Vielen Dank für diesen Tipp.
Für mich stellt sich noch die Frage, ob ich auf eine jüngere Version umstellen kann/soll.

Vielen Dank nochmals

Java 11 ist das, was mit “ausgeliefert” wird, wenn du den Installer runterlädst, von daher kannst du in der Hinsicht nichts falsch machen, wenn du Java 11 bei dir einstetzt:

grafik

“Jüngere” Versionen, also z.B. Java 14, etc. würde ich persönlich nicht empfehlen. Man sollte bei der Wahl auf Java-Versionen mit “Long-Term-Support” setzen und das sind derzeit nur Java 11 und Java 17 (wir ignorieren jetzt mal Java 8 und Java 7 :wink: Die restlichen Versionen bekommen schon bald keine Updates mehr, d.h. Sicherheitslöcher, etc. bleiben dann offen.

1 Like

Danke für die Infos. Jetzt weiss ich Bescheid.

Das Problem besteht noch immer, bin auch gerade darüber gestolpert.

ergänzend… JKD 11 wird noch bis 2026 (durch die Community) mit Updates versorgt werden, Version 17 hat 3 Jahre länger auf dem Plan.[1]

Das ist kein Wunder, da die Library, die in PP für das Verarbeiten von JSON verwendet wird, an der Stelle vermutlich nichts machen wird, wenn man sich die ganzen Issues zu dem Thema anschaut. Haupttenor dort ist wohl "da kann man von unserer Seite aus nichts machen, du musst dir deinen eigenen TypeSerializer bauen, damit das wieder funktioniert.

Damit also PP unter Java 17 unterstützt wird, wird es daher nicht reichen, dass man auf ein neues Release von Gson wartet, das alles fixt, sondern man muss sich hinsetzen und alle Vorkommnisse von möglichen Fehlern finden und diese mit der Implementierung eigener TypeSerializer entfernen.

Für die in diesem Thread konkret in der Fehlermeldung angemeckerte Klasse gäbe es aber eine Library, die bereits solche Serializer enthält. Damit die aber greift, muss man in PP etwas anpassen, einfach Jar ins PP-plugin-Verzeichnis legen, reicht leider nicht (sonst hätte ich dir das vorgeschlagen). Eventuell reicht die für PP aber schon, was das konkrete Problem angeht (ich weiss aber nicht, welche Datentypen sonst noch “verarbeitet” werden).

Selbst, wenn bis 2026 noch keine Lösung für PP gefunden wurde, Java 11 VMs sind ja auch nach EOL-Zeitpunkt weiter verfügbar. Da die VM bei den Installern mit ausgeliefert ist, könnte man theoretisch auch danach noch mit Java 11 arbeiten. Man bekommt halt keine Securityfixes mehr dafür, was einen dann irgendwann mal beißen könnte.

1 Like

Ich habe mich jetzt mal hingesetzt und dieses Problem behoben - durch einen eigenen TypeSerializer. Im Laufe nächsten Jahres will ich PP auch auf Java 17 umstellen.

2 Likes

Man merkt, es wird Winter. Leute bleiben zu hause in der warmen Stube und erledigen Dinge, die man den ganzen Sommer über auf die lange Bank geschoben hat :wink:

1 Like

Boah @kimmerin… Tiefschlag! Der war gemein…

1 Like

@AndreasB, ich hoffe, in der warmen Stube nimmst du auch noch einmal meine PRs aus dem November in den Blick, die vom Radar gefallen zu sein scheinen (3032 und 3033). :pleading_face:

2 Likes

Ich weiß - ich habe noch eine lange Liste. Aktuell hat mich vor allem umgetrieben die Kuchendiagramme einigermassen unter SWTChart hinzubekommen (macOS Ventura auf Intel führt ja leider zu einem Crash). Das tut jetzt soweit - mit dem schönen Nebeneffekt, dass man die Kuchendiagramme jetzt auch dem Dashboard hinzufügen kann (mit der nächsten Version). Ich machen mich an die anderen Pull Requests ran. Leider habe ich aktuell trotzdem wenig Zeit - aber nächstes Jahr wird wieder besser.

5 Likes