Strange GWT serialización excepción cuando overiding método de objeto serializado

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

  •  28-09-2019
  •  | 
  •  

Pregunta

Tengo una clase serializable GWT, vamos a llamarlo Foo. implementos Foo IsSerializable, tiene miembros primitivos y serializables, así como otros miembros transitorios y un constructor sin argumentos.

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

También un servicio que utiliza la instancia de Foo en comunicación RPC.

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

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

¿Cómo puedo utilizar esta:

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

En el caso anterior se ejecuta el código, y el método onSuccess () de la instancia de devolución de llamada es ejecutado.

Pero cuando reemplazar el método bar () en la instancia de foo como esto:

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

Me da la GWT SerializationException.

Por favor me ilumine, porque realmente no entiendo por qué.

¿Fue útil?

Solución

Creo que el problema viene de la política de serialización RPC que crea una "lista blanca" de tipos serializables para el servicio RPC.

En el caso de la clase "Foo" está en la lista, pero cuando se reemplaza un método, se crea una clase anónima que se extiende Foo, pero no está en la lista, por lo que se niega a GWT serializarlo ... y yo sin verte manera de hacer lo que quiera sin crear una subclase explícita ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top