GWT - RPC SerializationException
Il a été un moment depuis que j'ai fait GWT et j'avais besoin de quelque chose de petit, fait rapidement. J'ai mis les choses en place et maintenant, j'ai un RPC j'ai besoin, mais il échoue.
La RPC est censé me donner une liste de tableaux et de Vacance est situé dans #projectname#.client.de modèle.
L'appel est fait dans #projectname#.client.de modèle.
Les interfaces pour mes Services sont dans #projet#nom.client.Service.
Enfin, les appels, bien sûr, vont à #projectname#.serveur.
Vacance implémente IsSerializable. L'Exception que j'ai de mon RPC est la suivante:
Starting Jetty on port 8888
[WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.client.rpc.SerializationException: Type 'firsteight.client.model.Vacancy' 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 = firsteight.client.model.Vacancy@15fdd2f
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.serialize(Collection_CustomFieldSerializerBase.java:44)
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serialize(ArrayList_CustomFieldSerializer.java:39)
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:51)
at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.serializeInstance(ArrayList_CustomFieldSerializer.java:28)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:740)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:621)
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:539)
at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616)
at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:474)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:571)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
La RPC j'ai à faire est le suivant:
void getVacs() {
try {
homeService.getVacancies(new AsyncCallback<ArrayList<Vacancy>>() {
public void onFailure(Throwable caught)
{
RootPanel.get("grayblock").add(new HTML("Failed:" + caught.getMessage()));
}
public void onSuccess(ArrayList<Vacancy> result)
{
RootPanel.get("grayblock").add(new HTML(result.get(0).getTitle()));
}
});
} catch (IllegalArgumentException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
J'ai pensé que j'avais fait tout ce que je besoin de faire de Vacance Serializable, et une liste de tableaux de Vacance comme returntype pour le RPC compte comme Vacance comme type de retour..? Ce que je fais mal?
Merci d'avance!
source d'informationauteur Mark Tielemans
Vous devez vous connecter pour publier un commentaire.
Normalement, c'est causée par l'utilisation d'une classe sérialisable, ce qui peut se produire si votre classe n'implémente pas
com.google.gwt.user.client.rpc.IsSerializable
ou si vous avez oublié d'ajouter un constructeur vide.Pour passer un haricot, vous devez remplir les conditions suivantes (à partir de GWT site):
l'interface, soit directement, soit parce qu'il dérive d'une super-classe
qui n'.
serializable
modificateur (par exemple les Foo(){} de travail)
Même si vous acquitter de ces exigences peut arriver que le compilateur GWT dire:
Le problème peut avoir différentes causes. Ici sa complète de la liste de vérification à utiliser pour résoudre le problème:
implémente une Interface qui étend Serializable ou s'étend une classe
que Sérialisable
votre GWT xml de définition de module. Par défaut
est présent. Si votre classe est dans un autre package, vous devez l'ajouter
à la source. Par exemple, si votre classe est sous domaine.* vous devriez
ajouter xml . Être conscient que la classe
ne peut pas appartenir à le package du serveur! Plus de détails sur GWT page:
http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml
ajouter l'hérite à votre xml de définition de module. Par exemple, si votre
la classe Foo est dans le package com.factice.nom de domaine, vous devez ajouter
pour la définition du module.
Plus de détails ici:
http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideInheritingModules
un pot de vérifier que le pot contient également le code source parce que GWT
recompiler aussi la source de Java pour les classes transmis au Client.
PS:copié à partir de http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/ parce que le site n'est pas disponible actuellement. Si vous voulez lire l'article original de recherche de google à l'aide de l'URL ci-dessus et de le lire à partir de google web cache.
Ahother raison de cette exception a été dépassée javascript sur le navigateur de côté. J'ai eu dur de rechargement (CTRL+F5) le code et cette exception a disparu.
Je reçois aussi ce message d'erreur lorsque j'ai utilisé de la sous-liste:
Dans mon cas il y a quelques vieux cache dans mon
target
dossier qui n'a pas été correctement mis à jour. J'ai eu à reconstruire le projet (Maven -> mise à Jour du Projet) et puis il a travaillé.Tout d'abord, assurez-vous d'avoir défini une constructeur vide.
Si non, votre classe ne sera pas sérialisable ...
Si vous avez un constructeur vide, assurez-vous que votre classe (ou de toute classe du étend de la chaîne d') implémente IsSerializable (ou toute autre interface qui s'étend IsSerialisable)
Si votre classe implémente IsSerialisable, vérifier qu'il est non-final ...