google / gson

A Java serialization/deserialization library to convert Java Objects into JSON and back
Apache License 2.0
23.13k stars 4.27k forks source link

error #2699

Closed AdamCalculator closed 3 weeks ago

AdamCalculator commented 1 month ago

Gson version

2.9.1

Java / Android version

21

Used tools

Error

Failed to setup Minecraft, java.lang.RuntimeException: Unexpected IllegalAccessException occurred (Gson 2.9.1). Certain ReflectionAccessFilter features require Java >= 9 to work correctly. If you are not using ReflectionAccessFilter, report this to the Gson maintainers.

Marcono1234 commented 1 month ago

Thanks for the report! Could you please try the latest Gson version (currently 2.11.0) just to make sure this hasn't been fixed already in a newer version?

Also, if possible could you please create a minimal, reproducible example (as described here) for it?

softy-oniguru commented 3 weeks ago
java.lang.RuntimeException: Unexpected IllegalAccessException occurred (Gson 2.11.0). Certain ReflectionAccessFilter features require Java >= 9 to work correctly. If you are not using ReflectionAccessFilter, report this to the Gson maintainers.
        at net.skinsrestorer.shadow.gson.internal.reflect.ReflectionHelper.createExceptionForUnexpectedIllegalAccess(ReflectionHelper.java:200) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:522) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$2.readIntoField(ReflectiveTypeAdapterFactory.java:267) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:558) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:516) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.Gson.fromJson(Gson.java:1361) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.Gson.fromJson(Gson.java:1262) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.Gson.fromJson(Gson.java:1171) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.Gson.fromJson(Gson.java:1107) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shared.connections.http.HttpResponse.getBodyAs(HttpResponse.java:33) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shared.connections.MojangAPIImpl.getUUIDEclipse(MojangAPIImpl.java:119) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shared.connections.ServiceCheckerService.checkServices(ServiceCheckerService.java:54) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shared.plugin.SRPlugin.runServiceCheck(SRPlugin.java:440) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.bukkit.folia.FoliaSchedulerProvider.lambda$getCancellingTaskConsumer$0(FoliaSchedulerProvider.java:84) ~[SkinsRestorer.jar:?]
        at io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler$AsyncScheduledTask.run(FoliaAsyncScheduler.java:217) ~[purpur-1.20.4.jar:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
        at java.lang.Thread.run(Thread.java:857) ~[?:?]
Caused by: java.lang.IllegalAccessException: Can not set final net.skinsrestorer.shared.connections.responses.EclipseCacheData$CacheState field net.skinsrestorer.shared.connections.responses.EclipseCacheData.state to net.skinsrestorer.shared.connections.responses.EclipseCacheData$CacheState
        at jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:76) ~[?:?]
        at jdk.internal.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:80) ~[?:?]
        at jdk.internal.reflect.UnsafeQualifiedObjectFieldAccessorImpl.set(UnsafeQualifiedObjectFieldAccessorImpl.java:79) ~[?:?]
        at java.lang.reflect.Field.set(Field.java:805) ~[?:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$2.readIntoField(ReflectiveTypeAdapterFactory.java:278) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:558) ~[SkinsRestorer.jar:?]
        at net.skinsrestorer.shadow.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:516) ~[SkinsRestorer.jar:?]
        ... 16 more
Marcono1234 commented 3 weeks ago

Thanks, it looks like EclipseCacheData for which the exception occurs might be a Record class, see SkinsRestorer project code. Apparently Gson did not detect this and is trying to use the regular reflection adapter on it, which fails.

It looks like you (or rather the SkinsRestorer project) is using a repackaged version of Gson. If possible could you please try with a non-repackaged version of Gson? Also, do you use any code shrinking tools, such as ProGuard or R8?

If possible, could you please try to debug your application and check why Gson's internal ReflectionHelper.isRecord does not recognize that EclipseCacheData is a Record class?

Maybe it would also be worth reporting this to the https://github.com/SkinsRestorer/SkinsRestorer maintainers (and linking to this issue here).

Also just to be sure, @AdamCalculator, is this the same exception you are seeing?

AdamCalculator commented 3 weeks ago

@Marcono1234 I have already corrected my mistake somehow. The error occurred during the building of the gradle project, but it somehow corrected itself.