Странное исключение сериализации GWT при переопределении метода сериализованного объекта - PullRequest
1 голос
/ 19 апреля 2010

У меня есть сериализуемый класс GWT, давайте назовем его Foo. Foo реализует IsSerializable, имеет примитивные и сериализуемые члены, а также другие временные члены и конструктор без аргументов.

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

Также служба, которая использует экземпляр Foo для связи RPC.

// 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 () экземпляра обратного вызова.

Но когда я переопределяю метод bar () на экземпляре foo, вот так:

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

Я получаю GWT SerializationException.

Пожалуйста, просветите меня, потому что я действительно не понимаю, почему.

1 Ответ

0 голосов
/ 01 сентября 2010

Я думаю, что проблема связана с политикой сериализации rpc, которая создает «белый список» сериализуемых типов для службы rpc.

В вашем случае класс "Foo" находится в белом списке, но когда вы переопределяете метод, вы создаете анонимный класс, который расширяет Foo, но не входит в белый список, поэтому GWT отказывается его сериализовать ... и я не вижу способ сделать то, что вы хотите, без создания явного подкласса ...

...