tutorial - gwt json
GWT: ocasional com.google.gwt.user.client.rpc.SerializationException (12)
Encontré el problema cuando utilicé Tomcat6 + Devmode en Ubuntu Lucid amd64. Usar com.google.gwt.user.client.rpc.IsSerializable en lugar de java.io.Serializable pareció resolver el problema.
estamos obsesionados por ocasionales ocurrencias de excepciones tales como:
com.google.gwt.user.client.rpc.SerializationException: Escriba ''xxx'' no se puede asignar a ''com.google.gwt.user.client.rpc.IsSerializable'' y no tiene un serializador de campos personalizado. Por razones de seguridad, este tipo no se serializará: instancia = xxx en com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize (ServerSerializationStreamWriter.java:610) en com.google.gwt.user.client.rpc.impl .AbstractSerializationStreamWriter.writeObject (AbstractSerializationStreamWriter.java:129) en com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter $ ValueWriter $ 8.write (ServerSerializationStreamWriter.java:152) en com.google.gwt.user.server. rpc.impl.ServerSerializationStreamWriter.serializeValue (ServerSerializationStreamWriter.java:534) en com.google.gwt.user.server.rpc.RPC.encodeResponse (RPC.java:609) en com.google.gwt.user.server.rpc. RPC.encodeResponseForSuccess (RPC.java:467) en com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse (RPC.java:564) en com.google.g wt.user.server.rpc.RemoteServiceServlet.processCall (RemoteServiceServlet.java:188) en de.softconex.travicemanager.server.TraviceManagerServiceImpl.processCall (TraviceManagerServiceImpl.java:615) en com.google.gwt.user.server.rpc. RemoteServiceServlet.processPost (RemoteServiceServlet.java:224) en com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost (AbstractRemoteServiceServlet.java:62) en javax.servlet.http.HttpServlet.service (HttpServlet.java:710) en javax.servlet.http.HttpServlet.service (HttpServlet.java:803) en org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:290) en org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain) .java: 206) en org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter (ReplyHeaderFilter.java:96) en org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) en org.apache. catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:20) 6) en org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:230) en org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:175) en org.jboss.web.tomcat.security .SecurityAssociationValve.invoke (SecurityAssociationValve.java:179) en org.jboss.web.tomcat.security.JaccContextValve.invoke (JaccContextValve.java:84) en org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:127 ) en org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) en org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke (CachedConnectionValve.java:157) en org.apache.catalina. core.StandardEngineValve.invoke (StandardEngineValve.java:109) en org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:262) en org.apache.coyote.ajp.AjpAprProcessor.process (AjpAprProcessor.java:419) en org.apache.coyote.ajp.AjpAprProtocol $ AjpConnectionHandler.process (AjpAprProtocol.java:378) en org.apache.tomcat.util.net.AprEndpoint $ Worker .run (AprEndpoint.java:1508) en java.lang.Thread.run (Thread.java:619)
La aplicación normalmente funciona bien. La clase indicada implementa Serializable (el gráfico completo del objeto).
Hasta ahora, los únicos patrones / observaciones son:
parece que tenemos el problema solo cuando la aplicación se usa dentro de un iframe
el problema parece ocurrir cuando se ha implementado una nueva versión de la aplicación
ejecutar Firefox en modo de privacidad (deshabilitando todas las cachés, etc.) no soluciona el problema
¿Algunas ideas?
Holger
Este problema se produce cuando se compila una aplicación GWT 2.5 utilizando JDK 1.7. GWT 2.5 es compatible con JDK 1.6 y el uso de esta versión de JDK solucionará este problema.
He tenido el mismo error y soluciono esto limpiando el caché de navegación y el historial de navegación.
La mejor manera de conocer el problema exacto es compilar su código usando -logLevel DEBUG o TRACE y verificar dentro de Validar Unidades. Estoy seguro de que también podrás averiguar el problema exacto con los números de línea.
Por lo tanto, los archivos RPC son únicos porque los cargan los servlets y se usan en GWT. Consulte http://code.google.com/webtoolkit/release-notes.html#Release_Notes_1_4_59 donde dice "Este archivo debe implementarse en su servidor web como un recurso público, al que se puede acceder desde RemoteServiceServlet a través de ServletContext.getResource ()"
¿Es posible que la nueva aplicación se vuelva a cargar dinámicamente y getResource está fallando de alguna manera? ¿El reinicio de la aplicación soluciona las cosas?
Razón muy posible: la versión anterior del cliente aún está almacenada en caché en el navegador. Envía solicitudes rpc, pero el servidor ya está reiniciado y tiene versiones más recientes de archivos rpc (* .symbolMap)
Si se está ejecutando en JBoss, esto podría deberse al hecho de que la aplicación desplegada previamente no se elimina cuando se despliega. Para solucionarlo, debe modificar el siguiente archivo en JBoss: $ {JBOSS_HOME} /server/default/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml y establecer el siguiente atributo en true: deleteWorkDirOnContextDestroy
Cuando la aplicación implementada anteriormente no se limpia, GWT puede confundirse sobre qué archivo RPC necesita cargar y usted termina con esas SerializationException
Supongo que está ejecutando la aplicación en localhost y en modo hospedado ? Si es así, es posible que desee mantener un ojo en el directorio de trabajo (o en el directorio equivalente si no está ejecutando la aplicación en un servidor Tomcat). Compruebe la carpeta de la aplicación web para ver los archivos policiales de serialización (* .gwt.rpc).
Es posible que no estén cargados correctamente, la única solución que hemos encontrado hasta ahora es reiniciar el servidor después de cada falla de serialización.
El problema se debe al hecho de que GWT generará sus archivos de políticas de serialización en tiempo de ejecución, suponiendo que se ejecute en modo hospedado. En modo compilado, GWT generará todos los archivos necesarios en tiempo de compilación. AFAIK, tomcat no puede cargar los archivos de recursos en tiempo de ejecución y, por lo tanto, no incluirá los archivos de serialización cada vez que los necesite por primera vez.
Al reiniciar el servidor, tomcat puede recoger el archivo generado anteriormente y, por lo tanto, no debería recibir el mismo error después de reiniciar.
¿Puedes verificar esto?
También recibía una SerializationException, pero también estaba viendo este error aparecer justo antes de la excepción de serialización:
[uptimereports / 2.340102563369350884] .: Ejemplo: error: no se puede encontrar la plantilla registration-confirmation.vm
Resultó ser un problema para encontrar mi plantilla de velocidad. Una vez que solucioné ese problema, la SerializationException dejó de aparecer, por lo que si sigue los consejos de Kerem y aún tiene problemas, busque otras excepciones en su registro.
Tuve el mismo problema y encontré una solución de otra persona:
"Existe la posibilidad de que tengas una clase que implemente Serializable y tengas un campo de atributo dentro de esa clase que no sea Serializable, por lo tanto, es posible que obtengas esta excepción".
Muchas gracias a esa persona :)
Mi consejo es hacer todos los campos (que no son tipos primitivos) en su clase para implementar Serializable también. Esto resolvió mi problema.
tu obtiens cette erreur parce que tu essaies de faire passer une liste d''objets non sérialisée par le tunel rpc. tu devras d''abord sérialiser ta liste d''objet avant le tranfert vers le tunel rpc. pour sérialiser ta liste, tu peux faire un truc du genre ci-dessous et faire passer ce nouveau object vers tunel rpc
public class ListObjet<T> implements Serializable{
/** Constant used for serialization purpose (serial number). */
private static final long serialVersionUID = 8153484637403868153L;
private List<T> listObjet;
public List<T> getListOjets()
{
return listObjet;
}
public void setListObjet(List<T> m_listObjet)
{
this.listObjet= m_listObjet;
}
}
Merci
Lagrange
revisó http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#serialize el artículo dice: Tiene un constructor predeterminado (cero argumentos) con cualquier modificador de acceso (por ejemplo, private Foo(){}
funcionará)
Siempre me olvido de la const de zeroargument. cuando estoy haciendo un objeto serializable: D