tutorial java serialization gwt rpc gwt-rpc

java - tutorial - gwt json



Error de SerializationPolicy al realizar RPC desde dentro de la aplicaciĆ³n GWT (10)

Obtengo la siguiente excepción:

com.google.gwt.user.client.rpc.SerializationException: Type ''java.lang.Long'' no se incluyó en el conjunto de tipos que pueden ser serializados por esta SerializationPolicy o su objeto Class no se pudo cargar. Por razones de seguridad, este tipo no se serializará

usando GWT 2.1 y el servidor Jetty incorporado. Según los documentos, este tipo es definitivamente serializable ... ¿Cómo puedo incluirlo en SerializationPolicy?


Aquí está el enlace que debería resolver el problema: http://developerlife.com/tutorials/?p=131

Una clase definida por el usuario es serializable si:

  1. la clase se puede asignar a IsSerializable o java.io.Serializable, ya sea porque implementa una de estas interfaces o porque se deriva de una superclase que implementa una de estas interfaces.
  2. todos los campos de instancia no transitorios y no transitorios de la clase son serializables
  3. la clase tiene un constructor predeterminado público (cero argumentos)

Asegúrese de que la clase esté en la carpeta compartida. Esto es lo que me faltaba.


El problema también puede deberse a que el código en su máquina local en la que está ejecutando el modo alojado no es el mismo que el del servidor externo al que se está conectando a través de RPC. Entonces, en mi caso, me faltaba un truco de git en mi máquina local para que coincida con lo que se implementó en el servidor externo. Los cambios fueron mínimos, solo una nueva propiedad en una de las clases que se incluyeron en gwt.rpc, pero esto ya era suficiente para que los nombres de archivo gwt.rpc md5 fueran diferentes y, por lo tanto, se produjo el error mencionado anteriormente.


FWIW, estaba teniendo este problema pero mi tipo ''Objeto'' estaba oculto detrás de las clases genéricas . El mensaje de error en sí era incorrecto.

Entonces, si uno de tus métodos rpc involucra una clase:

class Xxx<T> implements IsSerializable {...

Necesita cambiar a:

class Xxx<T extends IsSerializable> implements IsSerializable {...



Inspirado en http://groups.google.com/group/google-web-toolkit/browse_thread/thread/7dd5123d359ddfa8

Usando eclipse y maven y gwt 2.1.1

Compila y despliega gwt war.

Intenta usar OOPHM lanzado desde Eclipse.

Esto me fallaría.

Esto se generará en los registros del servidor:

ERROR: no se encontró el archivo de política de serialización ''blah.gwt.rpc''; ¿Olvidaste incluirlo en esta implementación?

ADVERTENCIA: Error al obtener la SerializationPolicy ''94DEC228B2828D3A5897FEE3D6845A40'' para el módulo ''http: // blah: 8080 / BlahUI / BlahUI /''; se usará una política de serialización heredada, 1.3.3 compatible. Puede experimentar SerializationExceptions como resultado.

Y entonces

Excepción al despachar la llamada RPC entrante com.google.gwt.user.client.rpc.SerializationException: Escriba ''[LpathToClass;'' no se asignó a ''com.google.gwt.user.client.rpc.IsSerializable'' y no tenía un serializador de campos personalizado. Por razones de seguridad, este tipo no se serializará: instance = [LpathToClass; @ 9d524af at com. google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize (ServerSerializationStreamWriter.java:614)

Ahora que se han generado archivos extra gwt.rpc (ya sea por el plugin de eclipse / maven ¿quién sabe?)

Recompile (incluso una compilación limpia funcionará porque los archivos gwt.rpc no están en la carpeta de destino, mis archivos OOPHM gwt.rpc están en la misma carpeta que entrypoint html) y redespliegue. Este nuevo archivo de guerra contendrá los archivos gwt.rpc generados.

Volver a iniciar OOPHM desde Eclipse.

Funciona para mi.


Intente eliminar los archivos * .gwt.rpc en su directorio war / app, limpie y vuelva a generar.

Una cosa a tener en cuenta: debes evitar Long o Long si es posible porque son
emulado en GWT (porque no hay Javascript nativo largo) y muy
lento. Use int en su lugar siempre que pueda.


Me enfrenté a este error y me quedé atrapado por 1 día por completo. Luego encontré la siguiente solución rápida:

Asegúrate de que tus DTO o clases de Entidades sigan las reglas de interfaz serializables. Es lo único que debes hacer porque el resto de los problemas estarán relacionados con la creación de tu compilación. Entonces, si está utilizando maven, asegúrese de limpiar la compilación y borrar todo el caché del navegador. Resolví mis problemas con esto. Espero que ayude ¡Gracias!


Otro FWIW: creo que resolví un problema similar en una clase enum cambiando el modificador de acceso del constructor de un único argumento de forma predeterminada (sin modificador) a ''privado''. En cualquier caso, hacer eso no lo rompió porque está funcionando de esa manera ahora.


Se necesita incluir un método superfluo en el servicio RPC que "incluya en la lista blanca" una cantidad de objetos. Esto surge debido al uso de genéricos, GWT no puede necesariamente determinar qué objeto puedo serializar para incluir dentro de algunos genéricos.

Incluí todos los tipos que pueden necesitar ser (un) serializados como miembros de un objeto ( SerializableWhitelist ). Agregué un método al objeto servlet de RPC como:

public SerializableWhitelist junk(SerializableWhitelist l) { return null; }

Vale la pena señalar que debe incluir los tipos de datos de la lista blanca como argumento y como tipo de retorno, ya que aparentemente GWT mantiene dos políticas de serialización separadas.