2010-05-19 24 views
7

Tengo un montón de tiempo devolviendo una ArrayList de objetos que implementan IsSerializable a través de RPC. El pojo IsSerializable contiene una variable, una cadena y tiene un constructor de parámetro 0. He eliminado el archivo .gwt.rpc de mi guerra y todavía me sale:GWT número de serialización

com.google.gwt.user.client.rpc.SerializationException: Type 'com.test.myApp.client.model.Test' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.: instance = [email protected] 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610) 

estoy usando GWT 2.0.2 JDK 1.6.0_18 con.

¿Alguna idea sobre qué podría estar pasando o qué estoy haciendo mal?

Aquí está el código para la clase de prueba y el método remoto devuelve ArrayList. Incluso modifiqué el código para que solo devuelva una instancia de prueba con el mismo resultado: la excepción anterior.

package com.test.myApp.client.model; 

import com.google.gwt.user.client.rpc.IsSerializable; 

public class Test implements IsSerializable{ 
    private String s; 

    public Test() {} 

    public Test(String s) { 
     this.s = s; 
    } 

    public String getS() { 
     return s; 
    } 

    public void setS(String s) { 
     this.s = s; 
    } 
} 

¡Agradezca mucho la ayuda! Eddy

+0

¿Se puede publicar el código para client.model.Test? – Stevko

+0

Tal vez uno de los campos de instancia en la clase de prueba no sea serializable. Publica el código para obtener más ayuda. – Carnell

+0

¿Ha declarado su método de servicio remoto como devolver ArrayList ? Si declara ArrayList, GWT no sabrá que va a necesitar serializar Test. Como sugieren los comentaristas anteriores, publique el código. – tgdavies

Respuesta

1

El método remoto debe devolver ArrayList<Test>, no solo ArrayList, por lo que GWT entiende que las instancias de Test deberán serializarse.

+0

El método remoto devuelve ArrayList . Como dije, incluso intenté devolver una instancia de Prueba con el mismo resultado. – Eddy

1

Estoy acostumbrado a utilizar la declaración de la interfaz serializable, por lo que esta respuesta puede no ser aplicable.

Eclipse siempre me pide que cree un miembro serialVersionUID para cualquier clase de Serializable.

private static final long serialVersionUID = 2388319784164372900L; 

One pensó que solo me golpeó, algo no está sincronizado en sus compilaciones. Te sugiero que hagas dos cosas: a) Proyecto | Limpiar, y luego b) GWT Compile Project.

+0

Intenté usar Serializable con un serialVersionUID generado pero eso tampoco funcionó. ¡Gracias! ¿Alguna otra idea? – Eddy

+0

He intentado ambos ay muchas veces en realidad. – Eddy

+0

Acabo de encontrar este mensaje de error anoche. Implementé (varias veces) un proyecto bastante grande pero ligeramente modificado, pero no incrementé el número de versión y seguí obteniendo la excepción de serialización en una clase anterior. Finalmente incrementó el número de versión y se volvió a desplegar, se aclaró. ¿Su clase de prueba está siendo traducida a JavaScript? Compruebe la ruta incluida en una etiqueta myApp.gwt.xml . El comentario dice "Speicfy the paths for translatable code". – Stevko

0

or its Class object could not be loaded

¿Está incluido/test/myApp/client/model/Test.class en su guerra?

5

Esto puede sonar tonto, pero ¿tiene un constructor predeterminado para Probar en su código, y no solo en la versión del código que publicó aquí? Encontré este mismo error, busqué en Google, intenté varias de las sugerencias aquí, como limpiar/reconstruir, agregar serialVersionUID, nada de eso funcionó. Luego busqué más y encontré una sugerencia para asegurarme de que tu clase que intentas serializar tenga un constructor predeterminado. El mío no lo hizo, y tan pronto como agregué uno, funcionó. No sé por qué eso lo solucionó, pero lo hizo.

+1

porque la serialización de GWT no es una serialización de Java ... explicada en las preguntas frecuentes: http://code.google.com/intl/fr/webtoolkit/doc/1.6/FAQ_Server.html#Does_the_GWT_RPC_system_support_the_use_of_java.io.Serializable – Vinze

2

También agregué un constructor vacío a mi clase que estaba teniendo el problema, y ​​funcionó bien.

0

Estos son los casos que causarán GWT serialización para lanzar un error:

1) Su clase no implementa Serializable o IsSerializable. 2) Sin constructor predeterminado 3) GWT no puede agregar su clase a la "lista blanca" porque un análisis estático del código no muestra que su clase se incluirá en RPC. Para tales casos, creo un par de RPC de acción/resultado "WhiteList" (siguiendo el modelo de comando) y me aseguro de que el objeto de acción tenga miembros de las clases relevantes que están fallando. A veces puede encontrar que un objeto se devuelve como parte de una llamada RPC en una colección no generizada y GWT no tiene ni idea de incluirlo. En este caso también, agregarlo a la clase de acción "WhiteList" ayuda.

0

noto que su clase está en la "prueba de com. .myApp.client.mode" paquete, lo que sugiere que se trata de una clase de "prueba" (y no ser parte de la implementación de esperar).

¿Su archivo de módulo gwt (myApp.get.xml) está realmente en com.test.myApp?

Si es así, ha elegido mal los nombres de sus paquetes. Evite poner "prueba" en los nombres de su paquete principal; la convención dicta que esto significa que es un paquete de prueba.

Si no es así, trate de mover su clase a un paquete de "principal", por ejemplo "com. miempresa .myApp.client.mode" (asumiendo que su archivo de módulo se obtiene es en com.mycompany.myApp).

1

También tuve el mismo problema con ArrayList. Acabo de agregar un constructor vacío y funcionó. (Mi clase ya implementó Serializable)

Cuestiones relacionadas