Pregunta

En mi GWT aplicación que tenga la siguiente clase de modelo:

import com.google.gwt.user.client.rpc.IsSerializable;

public class TestEntity implements IsSerializable {
    public String testString;
}

Esta clase implementa la interfaz personalizada marcador IsSerializable GWT - que realmente no me gusta, porque uso mis clases del modelo no sólo para GWT. Así que prefiero java.io.Serializable.

Pero si modifico la clase para implementar Serializable en lugar de IsSerializable, el mecanismo de GWT RPC ya no funciona. No me sale un error en el servidor, pero en el AsyncCallback cliente .onFailure se invoca.

Estoy utilizando ...

  • GWT 1.7.0.
  • Primavera 2.5.6.SEC01
  • Spring y GWT están configurados como se describe aquí .
¿Fue útil?

Solución 3

Ok, me fui a través de los comentarios del Gwt-Primavera-artículo (el enlace que he publicado) y encontré la solución. Tenía que cambiar dos líneas en el método llamado proceso:

RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());

Otros consejos

Resulta que esta técnica híbrida Primavera-MVC y GWT se está utilizando en la base de código en mi nuevo trabajo - no es de extrañar que el error que estaba recibiendo era similar! Gracias por esta publicación - que me ayudó a identificar el problema y solucionarlo. El código que teníamos se basa en el viejo código del artículo informados - o lo que sea que el código se basa en! El plagio abundan!

En resumen, este artículo propone una manera de integrar GWT con Spring MVC. El quid de la solución es proporcionar una clase servlet Servlet que combina un controlador MVC del resorte con un GWT RemoteServiceServlet. DTO objetos serializables no eran compatibles ya que (creo) el código se basa en el código pre-GWT-1.4, que no podía hacer frente a las OTD que no implementan la interfaz marcador IsSerializable de GWT. La actualización a la clase del controlador es muy simple una vez que sabes lo que está pasando ...

Las dos líneas fijas veo simplemente pasan a través del SerializationPolicyProvider (que es el 'esto' método en el último parámetro a RPC.decodeRequest (). La clase de llamada se extiende de GWT RemoveServiceServlet, que es un SerializationPolicyProvider). Esta sencilla solución presumo hace que el (un 1,4) código actualizado GWT que se invoca, que puede manejar Serializable, así como clases IsSerializable. El SerializationPolicyProvider mira al serializationPolicy.

La segunda solución pasa el serializationPolicy a través de al método RPC.invokeAndEncodeResponse (). Supongo que esta es la lista blanca * .gwt.rpc de objetos DTO que fueron verificadas cuando el módulo de GWT fue compilado.

¿Qué es exactamente el error que recibe? Estamos utilizando Serializable para nuestro DTO sin ningún problema por lo que debe ser capaz también.

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