2010-04-19 7 views
1

J'ai une classe sérialisable GWT, appelons-la Foo. Foo implémente IsSerializable, possède des membres primitifs et sérialisables ainsi que d'autres membres transitoires et un constructeur sans argument.Étrange exception de sérialisation GWT lors de la méthode de l'objet sérialisé

class Foo implements IsSerializable { 
// transient members 
// primitive members 
    public Foo() {} 
    public void bar() {} 
} 

Un service qui utilise l'instance de Foo dans la communication RPC.

// server code 
public interface MyServiceImpl { 
    public void doStuff(Foo foo); 
} 

public interface MyServiceAsync { 
     void doStuff(Foo foo, AsyncCallback<Void> async); 
} 

Comment j'utiliser ceci:

private MyServiceAsync myService = GWT.create(MyService.class); 
Foo foo = new Foo(); 
... 
AsyncCallback callback = new new AsyncCallback {...}; 
myService.doStuff(foo, callback); 

Dans le cas au-dessus du code est en cours d'exécution, et la méthode onSuccess() de l'instance de rappel est exécuté.

Mais quand je substituez la méthode bar() sur l'instance foo comme ceci:

Foo foo = new Foo() { 
public void bar() { 
//do smthng different 
} 
}; 
AsyncCallback callback = new new AsyncCallback {...}; 
myService.doStuff(foo, callback); 

je reçois le GWT SerializationException.

S'il vous plaît, éclairez-moi, parce que je ne comprends vraiment pas pourquoi.

+0

Commune, personne ne l'avait essayé? Je ne peux pas croire que personne n'avait ce pb avant! –

+0

Évidemment, l'erreur est levée lorsque le client sérialise l'objet à envoyer via RPC. –

Répondre

0

Je pense que le problème vient de la politique de sérialisation rpc qui crée une "liste blanche" des types sérialisables pour le service rpc. Dans votre cas, la classe "Foo" est dans la liste blanche mais lorsque vous remplacez une méthode, vous créez une classe anonyme qui étend Foo mais n'est pas dans la liste blanche, donc GWT refuse de la sérialiser ... et je vois pas moyen de faire ce que vous voulez sans créer une sous-classe explicite ...

+0

Merci! Cela ressemble à une bonne explication. –