serialization - usar - serialización en netbeans
SerializationException: tipo no incluido en el conjunto de tipos serializables (6)
En mi proyecto Google Web Toolkit, recibí el siguiente error:
com.google.gwt.user.client.rpc.SerializationException: Escriba ''your.class.Type'' no se incluyó en el conjunto de tipos que pueden ser serializados por esta SerializationPolicy o su objeto Class no se pudo cargar. Por motivos de seguridad, este tipo no se serializará.
¿Cuáles son las posibles causas de este error?
Cuando su clase tiene anotaciones JDO, entonces esto lo arregló para mí (además de los puntos en la respuesta de bspoel): https://.com/a/4826778/1099376
Me he encontrado con este problema, y si por casualidad está usando JPA o Hibernate, esto puede ser el resultado de tratar de devolver el objeto de consulta y no crear un nuevo objeto y copiar sus campos relacionados en ese nuevo objeto. Compruebe lo siguiente, que vi en un grupo de google.
@SuppressWarnings("unchecked")
public static List<Article> getForUser(User user)
{
List<Article> articles = null;
PersistenceManager pm = PMF.get().getPersistenceManager();
try
{
Query query = pm.newQuery(Article.class);
query.setFilter("email == emailParam");
query.setOrdering("timeStamp desc");
query.declareParameters("String emailParam");
List<Article> results = (List<Article>) query.execute(user.getEmail
());
articles = new ArrayList<Article>();
for (Article a : results)
{
a.getEmail();
articles.add(a);
}
}
finally
{
pm.close();
}
return articles;
}
esto me ayudó mucho, espero que apunte a otros en la dirección correcta.
Parece que esta pregunta es muy similar a lo que es Serializable o no en GWT? , vea más enlaces a la documentación relacionada allí.
También agregaré que si desea usar una clase anidada, use una clase de miembro estática. Es decir,
public class Pojo {
public static class Insider {
}
}
Las clases miembro no estáticas obtienen la SerializationException en GWT 2.4
Tuve el mismo problema en un servicio remoto como este
public List<X> getX(...);
donde X es una interfaz. La única implementación se ajustó a las reglas, es decir, implementa Serializable o IsSerializable, tiene un constructor predeterminado y todos sus campos (no transitorio y no final) siguen esas reglas también.
Pero seguí obteniendo esa SerializationException hasta que cambié el tipo de resultado de List a X [], por lo que
public X[] getX(...);
trabajó. Curiosamente, el único argumento que es una lista, siendo Y una interfaz, no fue un problema en absoluto ...
GWT realiza un seguimiento de un conjunto de tipos que se pueden serializar y enviar al cliente. your.class.Type
aparentemente no estaba en esta lista. Listas como esta se almacenan en archivos .gwt.rpc
. Estas listas se generan, por lo que la edición de estas listas probablemente sea inútil. Cómo se generan estas listas no está claro, pero puede intentar lo siguiente:
- Asegúrate de que
your.class.Type
implementejava.io.Serializable
- Asegúrate de que
your.class.Type
tenga un constructor público sin argumentos Asegúrese de que los miembros de
your.class.Type
hagan lo mismoCompruebe si su programa no contiene colecciones de un tipo no serializable, por ejemplo,
ArrayList<Object>
. Si tal colección contieneyour.class.Type
y se serializa, se producirá este error.Haga que
your.class.Type
implementeIsSerializable
. Esta interfaz de marcador se diseñó específicamente para las clases que deberían enviarse al cliente. Esto no funcionó para mí, pero mi clase también implementóSerializable
, por lo que quizás ambas interfaces no funcionen bien juntas.Otra opción es crear una clase ficticia con
your.class.Type
como miembro y agregar un método a su interfaz RPC que obtenga y devuelva el dummy. Esto obliga al compilador GWT a agregar la clase ficticia y sus miembros a la lista blanca de serialización.