镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Use custom deserialization to handle list extensions - #8

Open
joshbooks wants to merge 1 commit into
masterfrom
add-custom-deserializer-for-list-extensions
Open

joshbooks wants to merge 1 commit into
masterfrom
add-custom-deserializer-for-list-extensions

Conversation

@joshbooks

@joshbooks joshbooks commented Apr 17, 2020 •

Copy link
Copy Markdown
Contributor

intended to fix #7

@joshbooks

Copy link
Copy Markdown
Contributor Author

@nitram22 mind taking a look when you have a minute?

@nitram22

nitram22 commented Apr 22, 2020 •

Copy link
Copy Markdown
Contributor

When I just tested it, the CertstreamCertificatePOJODeserializer threw a StackOverflow error.

Stacktrace:

Exception in thread "WebSocketConnectReadThread-18" java.lang.StackOverflowError at com.google.gson.internal.bind.JsonTreeReader.nextString(JsonTreeReader.java:178) at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:702) at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:723) at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:698) at com.google.gson.internal.Streams.parse(Streams.java:48) at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:65) at com.google.gson.Gson.fromJson(Gson.java:932) at com.google.gson.Gson.fromJson(Gson.java:1003) at com.google.gson.internal.bind.TreeTypeAdapter$GsonContextImpl.deserialize(TreeTypeAdapter.java:162) at io.calidog.certstream.CertStreamCertificatePOJODeserializer.deserialize(CertStreamCertificatePOJODeserializer.java:58) at io.calidog.certstream.CertStreamCertificatePOJODeserializer.deserialize(CertStreamCertificatePOJODeserializer.java:8) at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69) at com.google.gson.Gson.fromJson(Gson.java:932) at com.google.gson.Gson.fromJson(Gson.java:1003)

When reaching this line (56)
CertStreamCertificatePOJO retVal = jsonDeserializationContext.deserialize(jsonElement, type);

the deserialize() method is called again, which results in never executing the return retVal line (60) until the StackOverflowError is thrown.

This is from the JsonDeserializationContext doc for the deserialize() method:

Invokes default deserialization on the specified object. It should never be invoked on the element received as a parameter of the deserialize(JsonElement, Type, JsonDeserializationContext) method. Doing so will result in an infinite loop since Gson will in-turn call the custom deserializer again

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IllegalStateException if entry contains "extra" field

2 participants