覆盖序列化对象方法时出现奇怪的GWT序列化异常

时间:2010-04-19 13:22:30

标签: gwt-rpc override

我有一个GWT可序列化类,我们称之为Foo。 Foo实现了IsSerializable,具有原始和可序列化的成员以及其他临时成员和无参数构造函数。

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

也是在RPC通信中使用Foo实例的服务。

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

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

我如何使用它:

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

在上面的例子中,代码正在运行,并且回调实例的onSuccess()方法被执行。

但是当我覆盖foo实例上的bar()方法时,如下所示:

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

我收到了GWT SerializationException。

请赐教,因为我真的不明白为什么。

1 个答案:

答案 0 :(得分:0)

我认为问题来自rpc序列化策略,该策略为rpc服务创建可序列化类型的“白名单”。

在你的情况下,“Foo”类在白名单中,但是当你覆盖一个方法时,你创建一个扩展Foo但不在白名单中的匿名类,所以GWT拒绝序列化它......我看不到在不创建显式子类的情况下做你想做的事......