Exceção estranha de serialização do GWT ao substituir o método do objeto serializado

StackOverflow https://stackoverflow.com/questions/2667687

  •  28-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma classe serializável do GWT, vamos chamá-la de Foo.Foo implementa IsSerializable, possui membros primitivos e serializáveis, bem como outros membros transitórios e um construtor sem argumento.

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

Também é um serviço que usa a instância Foo na comunicação RPC.

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

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

Como eu uso isso:

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

No caso acima, o código está em execução e o método onSuccess() da instância de retorno de chamada é executado.

Mas quando eu substituo o método bar() na instância foo assim:

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

Eu recebo a SerializationException do GWT.

Por favor, me esclareça, porque eu realmente não entendo o porquê.

Foi útil?

Solução

Acho que o problema vem da política de serialização rpc, que cria uma "lista branca" de tipos serializáveis ​​para o serviço rpc.

No seu caso, a classe "Foo" está na lista de permissões, mas quando você substitui um método, você cria uma classe anônima que estende Foo, mas não está na lista de permissões, então o GWT se recusa a serializá-lo...e não vejo como fazer o que você deseja sem criar uma subclasse explícita...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top