Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] com.google.gson.JsonIOException e java.lang.reflect.InaccessibleObjectException

Meu codigo parece estar ao do video, segundo a exception parece que o json não consegue acessar a Classe Titulo por problema de visibilidade, entretanto no video, os atributos estão privates, e mesmo que eu mude para publico ainda continua dando erro na linha onde eu crie o meu titulo apartit do fromjson : Titulo meutitulo = gson.fromJson(json, Titulo.class);

o chat gpt sugere que e crie um adaptador presonalizado de de serialização implementando a interface TypeAdapter

O erro no console é o seguinte : Exception in thread "main" com.google.gson.JsonIOException: Failed making field 'br.com.alura.screenmatch.modelos.Titulo#nome' accessible; either increase its visibility or write a custom TypeAdapter for its declaring type. at com.google.gson@2.10.1/com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:38) at com.google.gson@2.10.1/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:286) at com.google.gson@2.10.1/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:130) at com.google.gson@2.10.1/com.google.gson.Gson.getAdapter(Gson.java:556) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1226) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1137) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:1047) at com.google.gson@2.10.1/com.google.gson.Gson.fromJson(Gson.java:982) at screanmatch/br.com.alura.screenmatch.principal.PrincipalComBusca.main(PrincipalComBusca.java:37) Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private java.lang.String br.com.alura.screenmatch.modelos.Titulo.nome accessible: module screanmatch does not "opens br.com.alura.screenmatch.modelos" to module com.google.gson 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@2.10.1/com.google.gson.internal.reflect.ReflectionHelper.makeAccessible(ReflectionHelper.java:35) ... 8 more

3 respostas
solução!

Consegui resolver o problema, ele ocorre por uma dificuldade de comunicação entre os pacotes, onde o gson não consegue acesso a classe que sera criada no gson.fromjson e para resolver basta entrar na classe module-info e adicionar a linha:

opens  br.com.alura.screenmatch.modelos to com.google.gson;

para dar acesso da classe modelos para o gson. Assim mesmo com os atributos private eles conseguirão ser acessados pelo gson

se quiser entender melhor segue o link do post onde peguei a info : https://stackoverflow.com/questions/72769462/failed-making-field-property-accessible-either-change-its-visibility-or-write

Oi Davi,

essa solução que você encontrou é no intellij? Você sabe me dizer como resolvo esse problema no eclipse?

Eu uso o eclipse, mas imagino que ambos possuem o arquivo module-info onde podemos colocar essa sentença opens to: Insira aqui a descrição dessa imagem para ajudar na acessibilidade