surrealdb.java icon indicating copy to clipboard operation
surrealdb.java copied to clipboard

Bug: JsonIOException 'java.time.Instant#seconds'

Open 047massi opened this issue 2 years ago • 2 comments

Describe the bug

Caused by: com.google.gson.JsonIOException: Failed making field 'java.time.Instant#seconds' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type.
        at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:38)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:286)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:125)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:160)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:294)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
        at com.google.gson.Gson.getAdapter(Gson.java:556)
        at com.google.gson.Gson.fromJson(Gson.java:1226)
        at com.google.gson.Gson.fromJson(Gson.java:1329)
        at com.google.gson.Gson.fromJson(Gson.java:1300)
        at com.surrealdb.connection.SurrealWebSocketConnection.onMessage(SurrealWebSocketConnection.java:123)
        at org.java_websocket.client.WebSocketClient.onWebsocketMessage(WebSocketClient.java:636)
        at org.java_websocket.drafts.Draft_6455.processFrameText(Draft_6455.java:986)
        at org.java_websocket.drafts.Draft_6455.processFrame(Draft_6455.java:910)
        at org.java_websocket.WebSocketImpl.decodeFrames(WebSocketImpl.java:402)
        at org.java_websocket.WebSocketImpl.decode(WebSocketImpl.java:234)
        at org.java_websocket.client.WebSocketClient.run(WebSocketClient.java:516)
        at java.base/java.lang.Thread.run(Thread.java:1623)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final long java.time.Instant.seconds accessible: module java.base does not "opens java.time" to unnamed module @79be0360
        at java.base/java.lang.reflect.AccessibleObject.throwInaccessibleObjectException(AccessibleObject.java:387)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:363)
        at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:311)
        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:181)
        at java.base/java.lang.reflect.Field.setAccessible(Field.java:175)
        at com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:35)
        ... 42 more

Steps to reproduce

Expected behaviour

SurrealDB version

1.0.0-beta.11+20230905.59718fc for linux on x86_64

Contact Details

[email protected]

Is there an existing issue for this?

  • [X] I have searched the existing issues

Code of Conduct

  • [X] I agree to follow this project's Code of Conduct

047massi avatar Sep 15 '23 20:09 047massi

Thanks for raising this @047massi . After having a look at this, I think the issue is that the Instant type is immutable, and so Gson cannot deserialise into easily. A solution to this would be to add a custom Gson deserialiser for that type. In the java rewrite, we intend to support native SurrealQL types, such as DateTime which could solve this problem.

This is a missing feature at the moment.

phughk avatar Oct 06 '23 14:10 phughk

I am having the same issue, was that fixed in a later version of Gson ?

abdu-elbakry avatar Apr 30 '24 06:04 abdu-elbakry

Closing the issue, as with v0.2.0, Gson is no longer a dependency of the driver

emmanuel-keller avatar Oct 08 '24 15:10 emmanuel-keller