【问题标题】:Strange GWT serialization exception when overiding method of serialized object重写序列化对象的方法时出现奇怪的 GWT 序列化异常
【发布时间】:2010-04-19 13:22:30
【问题描述】:

我有一个 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。

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

【问题讨论】:

  • 常见,没有人试过这个?我不敢相信以前没有人有这个铅!
  • 很明显,当客户端序列化要通过 RPC 发送的对象时会抛出错误。

标签: gwt-rpc overriding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2011-05-20
    • 2015-12-09
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多