GWT: La réponse ne pouvait être désérialisé
Je suis en utilisant GWT (2.4) avec le Ressort intégré que dans ce l'article. J'ai un problème avec l'obtention de la liste d'Utilisateur de base de données (Hibernate) et remplir la grille de données avec elle. Quand je l'appelle greetingService.allUsers()
méthode, j'obtiens une erreur (onFailure()):
com.google.gwt.de l'utilisateur.client.rpc.IncompatibleRemoteServiceException:
La réponse ne pouvait être désérialisé
Quelqu'un aide à faire ça? Ci-dessous quelques morceaux de code. Plein de travail du projet est ici.
public void onModuleLoad() {
//...
greetingService.allUsers(
new AsyncCallback<List<User>>(){
@Override
public void onFailure(Throwable caught) {
caught.printStackTrace();
}
@Override
public void onSuccess(List<User> result) {
GWT.log("SIZE: "+result.size());
dataGrid.setRowData(result);
}
}
);
//...
}
GreetingServiceImpl
@Override
public List<User> allUsers() {
return userDAO.findAll();
}
Utilisateur
@Entity
@Table(name = "users")
public class User implements Serializable, IsSerializable {
@Id
private Long id;
//only Strings and one Date
private String login;
private String password;
private String firstname;
private String lastname;
private Date date;
}
Vous devez vous connecter pour publier un commentaire.
Documentation pour IncompatibleRemoteServiceException dit:
Dans votre cas, est le dernier point, vous avez un type qui ne peut pas être sérialisé et désérialisé, c'est un de vos
User
de classe est l'un d'entre eux. Vous devriez avoir un transfert d'objet qui implémentecom.google.gwt.user.client.rpc.IsSerializable
interface pour la transmission de l'objet Utilisateur à travers le réseau. Pour plus d'informations voir: La compatibilité avec le Langage Java et les Bibliothèques. GWT RPC paramètres de la méthode et des types de retour doit être transmis à travers un réseau entre le client et le serveur d'applications et, par conséquent, ils doivent être serializable.Je voudrais essayer un couple de choses.
public Utilisateur() {
}
Tu ne fais rien de plus compliqué que ne peut pas être sérialisé, de sorte que vous devez être bien avec qui.
J'ai résolu mon problème en mettant à jour
GwtRpcController
selon cette. Maintenant, la désérialisation les bonnes œuvres sans l'utilisation de tout objet de transfert. TravailGwtRpcController
ci-dessous.Tous,
Passé beaucoup de temps avec cela, et j'ai une autre solution. J'ai été en utilisant une configuration très simple et mon Pojo ont vraiment rien de plus que les membres et un CTOR.
J'ai recréé un nouveau projet GWT et ajouté mes trucs de retour dans le nouveau projet, l'ajout de chaque POM.xml dépendance en retour. Ce que j'ai trouvé était le maven compilateur a été réglé trop haut. J'avais copié à partir d'un autre projet de ne pas y penser... GWT côté client est à peu près à seulement 1,5, peut-être de 1,6 compatible... de sorte que ces paramètres doivent être définis pour 1.5, 1.7
J'ai eu cette erreur lors de l'utilisation de goyave-gwt avec le champ "condition". Afin de satisfaire les dépendances lors de l'exécution, j'ai ajouté google-collections. GWT client ne pouvait pas désérialiser ceux.
Solution: supprimer la dépendance de google-collections, et le bâton avec la goyave.
À des problèmes avec des objets sérialisables, vous pouvez essayer cette liste de vérification:
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 devez l'ajouter à un document xml comme . Ê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 à la
définition de 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.
Police: http://isolasoftware.it/2011/03/22/gwt-serialization-policy-error/
Je travaille dans une équipe avec des logiciels qui, un jour, a arrêté de travailler pour moi à cause de cette erreur. Le reste de l'équipe était très bien. Nous avons essayé un certain nombre de choses à corriger. Finalement, nous avons remis l'Ide, et qu'il fixe.
Parfois, cette erreur peut être due à obsolètes/endommagé côté client fichiers/cache (Il n'y a pas de côté de serveur de message d'erreur dans ce cas). J'ai juste couru "reconstruire module" dans l'Ide, et c'était très bien de nouveau.