TheStonedTurtle / Loot-Logger

A RuneLite plugin that stores Loot Tracker data locally
BSD 2-Clause "Simplified" License
6 stars 9 forks source link

Date formatting issue with java-20-openjdk #52

Closed gxgx55 closed 11 months ago

gxgx55 commented 1 year ago

Upon running RuneLite with Loot Logger on java-20-openjdk, the plugin fails to read the log:

2023-04-30 17:26:42 EEST [Client] ERROR n.r.client.callback.ClientThread - Exception in invoke com.google.gson.JsonSyntaxException: Aug 24, 2022, 8:38:28 PM at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:87) at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:75) at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:46) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) at com.google.gson.Gson.fromJson(Gson.java:927) at com.google.gson.Gson.fromJson(Gson.java:892) at com.google.gson.Gson.fromJson(Gson.java:841) at com.google.gson.Gson.fromJson(Gson.java:813) at thestonedturtle.lootlogger.localstorage.LootRecordWriter.loadLootTrackerRecords(LootRecordWriter.java:137) at thestonedturtle.lootlogger.LootLoggerPlugin.getDataByName(LootLoggerPlugin.java:327) at thestonedturtle.lootlogger.LootLoggerPlugin.lambda$requestLootLog$6(LootLoggerPlugin.java:353) at net.runelite.client.callback.ClientThread.lambda$invoke$0(ClientThread.java:49) at net.runelite.client.callback.ClientThread.invokeList(ClientThread.java:119) at net.runelite.client.callback.ClientThread.invoke(ClientThread.java:101) at net.runelite.client.callback.Hooks.tick(Hooks.java:215) at client.sm(client.java:36061) at client.bd(client.java) at bm.ap(bm.java:353) at bm.run(bm.java:332) at java.base/java.lang.Thread.run(Thread.java:1623) Caused by: java.text.ParseException: Failed to parse date ["Aug 24, 2022, 8:38:28 PM"]: Invalid number: Aug at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ... 20 common frames omitted Caused by: java.lang.NumberFormatException: Invalid number: Aug at com.google.gson.internal.bind.util.ISO8601Utils.parseInt(ISO8601Utils.java:311) at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:129) ... 21 common frames omitted

Upon reverting to java-17-openjdk, the log lines written while running under java-20-openjdk fail to read: 2023-04-30 17:15:39 EEST [Client] ERROR n.r.client.callback.ClientThread - Exception in invoke com.google.gson.JsonSyntaxException: Apr 29, 2023, 9:12:18???PM at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:87) at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:75) at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:46) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) at com.google.gson.Gson.fromJson(Gson.java:927) at com.google.gson.Gson.fromJson(Gson.java:892) at com.google.gson.Gson.fromJson(Gson.java:841) at com.google.gson.Gson.fromJson(Gson.java:813) at thestonedturtle.lootlogger.localstorage.LootRecordWriter.loadLootTrackerRecords(LootRecordWriter.java:137) at thestonedturtle.lootlogger.LootLoggerPlugin.getDataByName(LootLoggerPlugin.java:322) at thestonedturtle.lootlogger.LootLoggerPlugin.lambda$requestLootLog$6(LootLoggerPlugin.java:365) at net.runelite.client.callback.ClientThread.lambda$invoke$0(ClientThread.java:49) at net.runelite.client.callback.ClientThread.invokeList(ClientThread.java:119) at net.runelite.client.callback.ClientThread.invoke(ClientThread.java:101) at net.runelite.client.callback.Hooks.tick(Hooks.java:215) at client.sm(client.java:36061) at client.bd(client.java) at bm.ap(bm.java:353) at bm.run(bm.java:332) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.text.ParseException: Failed to parse date ["Apr 29, 2023, 9:12:18???PM"]: Invalid number: Apr at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:274) at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:85) ... 20 common frames omitted Caused by: java.lang.NumberFormatException: Invalid number: Apr at com.google.gson.internal.bind.util.ISO8601Utils.parseInt(ISO8601Utils.java:311) at com.google.gson.internal.bind.util.ISO8601Utils.parse(ISO8601Utils.java:129) ... 21 common frames omitted

The issue appears to be that under java 20, the space between before AM/PM is no longer a regular space but the unicode character U+202F, but just a regular space under java 17, causing incompatibility. I personally fixed the logs by just replacing all U+202F with a regular space and running RL under 17, however I think you should be aware of this issue.