GWT - occasionnels com.google.gwt.de l'utilisateur.client.rpc.SerializationException
nous sommes hantés par quelques cas d'exceptions telles que:
com.google.gwt.de l'utilisateur.client.rpc.SerializationException: Type 'xxx' est pas assignable à 'com.google.gwt.de l'utilisateur.client.rpc.IsSerializable " et n'ont pas un champ personnalisé sérialiseur.Pour des raisons de sécurité, ce type ne va pas être sérialisé.: instance = xxx
au com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:610)
au com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:129)
au com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:152)
au com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:534)
au com.google.gwt.de l'utilisateur.serveur.rpc.RPC.encodeResponse(RPC.java:609)
au com.google.gwt.de l'utilisateur.serveur.rpc.RPC.encodeResponseForSuccess(RPC.java:467)
au com.google.gwt.de l'utilisateur.serveur.rpc.RPC.invokeAndEncodeResponse(RPC.java:564)
au com.google.gwt.de l'utilisateur.serveur.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188)
au de.softconex.travicemanager.server.TraviceManagerServiceImpl.processCall(TraviceManagerServiceImpl.java:615)
au com.google.gwt.de l'utilisateur.serveur.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224)
au com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
au javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
au javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
au org.apache.catalina.de base.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
au org.apache.catalina.de base.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
au org.jboss.web.tomcat.les filtres.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
au org.apache.catalina.de base.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
au org.apache.catalina.de base.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
au org.apache.catalina.de base.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
au org.apache.catalina.de base.StandardContextValve.invoke(StandardContextValve.java:175)
au org.jboss.web.tomcat.de sécurité.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
au org.jboss.web.tomcat.de sécurité.JaccContextValve.invoke(JaccContextValve.java:84)
au org.apache.catalina.de base.StandardHostValve.invoke(StandardHostValve.java:127)
au org.apache.catalina.les vannes.ErrorReportValve.invoke(ErrorReportValve.java:102)
au org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
au org.apache.catalina.de base.StandardEngineValve.invoke(StandardEngineValve.java:109)
au org.apache.catalina.connecteur.CoyoteAdapter.service(CoyoteAdapter.java:262)
au org.apache.coyote.ajp.AjpAprProcessor.processus(AjpAprProcessor.java:419)
au org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.processus(AjpAprProtocol.java:378)
au org.apache.tomcat.util.net.AprEndpoint$Travailleur.exécuter(AprEndpoint.java:1508)
à java.lang.Fil de discussion.exécution(Thread.java:619)
L'application est normalement en cours d'exécution fine. L'indication de la classe implémente Serializable (l'ensemble de l'objet graphique).
Jusqu'à présent les seuls modèles /observations:
-
il semble que le problème uniquement lorsque l'application est utilisée à l'intérieur d'une iframe
-
le problème semble se produire quand une nouvelle version de l'application a été déployée
-
lancement de firefox en mode de confidentialité (la désactivation de tous les caches etc.) ne résout pas le problème
Des idées?
Holger
Vous devez vous connecter pour publier un commentaire.
avez-vous vérifier http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#serialize
l'article dit:
Il a une valeur par défaut (zéro argument) constructeur avec tout modificateur d'accès (par exemple,
private Foo(){}
de travail)Je suis toujours oublier zeroargument const. quand je fais un objet sérialisable 😀
http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html#serialize
.Très possible raison - ancienne version du client est toujours mis en cache dans le navigateur. Il envoie des requêtes rpc, mais le serveur est déjà redémarré et des versions plus récentes de la rpc fichiers (*.symbolMap)
J'ai rencontré un problème lorsque j'ai utilisé Tomcat6 + Devmode dans Ubuntu Lucid amd64. À l'aide de com.google.gwt.de l'utilisateur.client.rpc.IsSerializable au lieu de java.io.Serializable semblait résolu le problème.
java.io.Serializable
à GWTisSerializable
pour être en mesure d'héberger une application sur une machine Linux au lieu de Windows. AvecisSerializable
n'importe quel OS va faire. Il semble que pas toutes les permutations sont construits correctement.Je suppose que vous êtes l'exécution de l'application sur localhost et en mode hébergé? Si oui, vous voudrez peut-être garder un œil sur la travail répertoire (ou le répertoire équivalent si vous n'êtes pas à l'exécution de l'application dans un serveur tomcat). De vérifier la webapp du dossier pour la sérialisation politique les fichiers (*.gwt.rpc).
Il est possible qu'ils ne sont pas chargés correctement, la seule solution que nous avons trouvé jusqu'à présent, est de redémarrer votre serveur après chaque sérialisation faute.
Le problème est dû au fait GWT va générer sa sérialisation de la politique de fichiers au moment de l'exécution, en supposant que vous êtes en mode hébergé. En mode compilé, GWT va générer tous les fichiers nécessaires au moment de la compilation. Autant que je sache, tomcat, impossible de charger dans les fichiers de ressources au moment de l'exécution et, partant, ne comprendra pas la sérialisation des fichiers chaque fois qu'ils sont nécessaires pour la première fois.
Au moment de redémarrer le serveur tomcat est en mesure de ramasser précédemment fichier généré et donc vous ne devriez pas recevoir le même message d'erreur après le redémarrage.
Pouvez-vous le vérifier?
Si vous êtes en cours d'exécution sur JBoss, cela pourrait être dû au fait que le précédemment déployé l'application n'est pas supprimé lorsque annulée. Pour résoudre ce problème, vous devez modifier le fichier suivant dans JBoss:
${JBOSS_HOME}/server/default/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml
et définissez l'attribut suivant à true: deleteWorkDirOnContextDestroy
Lorsque le déployée précédemment application n'est pas nettoyée, GWT pouvez être confus au sujet de la RPC fichier dont il a besoin pour charger et vous vous retrouvez avec ceux SerializationException
J'ai eu le même problème et j'ai trouvé une solution à partir d'une autre personne:
"Il y a une possibilité que vous avez une classe qui implémente Serializable et vous avez un champ d'attribut à l'intérieur de cette classe, qui n'est pas Sérialisable par conséquent, vous pourriez être l'obtention de cette exception."
Un grand merci à cette personne 🙂
Mon conseil est de prendre tous les champs (qui ne sont pas des types primitifs) dans votre classe pour implémenter Serializable aussi! Cela a résolu mon problème.
Ce problème se produit lorsqu'un GWT 2.5 application est compilée à l'aide du JDK 1.7. GWT 2.5 prend en charge JDK 1.6 et l'utilisation de cette version du JDK va résoudre ce problème.
De sorte que le RPC fichiers sont uniques parce qu'ils sont chargés par des servlets ainsi que d'être utilisé dans GWT. Voir http://code.google.com/webtoolkit/release-notes.html#Release_Notes_1_4_59 où il est dit "Ce fichier doit être déployé sur votre serveur web comme une ressource publique, accessible à partir d'un RemoteServiceServlet via ServletContext.getResource()"
Est-il possible que la nouvelle application est en train d'être rechargée de façon dynamique et getResource est l'échec d'une certaine façon? Ne redémarrage de l'application arranger les choses?
J'ai eu la même erreur et de la corriger cela par nettoyer le parcourir cache et l'historique de navigation.
gwt-unitCache
ainsi.J'ai été faire un SerializationException aussi, mais j'ai aussi été voir cette erreur indiquant juste avant la sérialisation exception:
Il s'est avéré être un problème pour trouver ma vitesse de modèle. Une fois que j'ai résolu le problème de la SerializationException a de cesse de montrer, donc si vous suivez Kerem conseils et ont encore des problèmes, regardez pour les autres exceptions dans votre journal.
Le meilleur moyen pour connaître la cause exacte est de compiler votre code à l'aide d'-logLevel DEBUG ou TRACE et vérifier à l'intérieur de la Validation d'Unités. Je suis sûr que vous seriez en mesure de trouver la cause exacte avec les numéros de ligne ainsi.
tu obtiens cette erreur parce que tu essaies de faire passer une liste d'objets non sérialisée par le tunel de la rpc.
tu devras d'abord sérialiser ta liste d'objet avant le tranfert vers le tunel de la rpc.
versez sérialiser ta liste, tu peux faire un truc du genre ci-dessous et faire passer ce nouveau objet vers le tunel rpc
Merci
Lagrange