Saltar al contenido

gson.toJson() lanza StackOverflowError

Posteriormente a indagar en varios repositorios y sitios webs de internet al final dimos con la respuesta que te compartimos aquí.

Solución:

Ese problema es que tienes una referencia circular.

En el BomModule clase a la que te refieres:

private Collection parentModules;
private Collection subModules;

Esa auto referencia a BomModuleobviamente, no le gustó nada a GSON.

Una solución es simplemente configurar los módulos para null para evitar el bucle recursivo. De esta manera puedo evitar la excepción StackOverFlow.

item.setModules(null);

O marque los campos que no quiero para aparecer en el json serializado usando el transient palabra clave, por ejemplo:

private transient Collection parentModules;
private transient Collection subModules;

Tuve este problema cuando tenía un registrador Log4J como propiedad de clase, como:

private Logger logger = Logger.getLogger(Foo.class);

Esto se puede resolver haciendo que el registrador static o simplemente moviéndolo a la(s) función(es) real(es).

Si está utilizando Realm y obtiene este error, y el objeto que causa el problema extiende RealmObject, no olvide hacer realm.copyFromRealm(myObject) para crear una copia sin todos los enlaces de Realm antes de pasar a GSON para la serialización.

Me perdí hacer esto por solo uno entre un montón de objetos que se copian… me tomó mucho tiempo darme cuenta de que el seguimiento de la pila no nombra la clase/tipo de objeto. La cuestión es que el problema es causado por una referencia circular, pero es una referencia circular en algún lugar de la clase base RealmObject, no su propia subclase, ¡lo que hace que sea más difícil de detectar!

valoraciones y comentarios

Recuerda que tienes la opción de reseñar si atinaste tu dilema a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *