2011-05-06 14 views
7

Después de actualizar a GWT 2.3 algunos de mis servicios RPC ya no funcionan y fallan con "La respuesta no se ha podido deserializar". Parece suceda a los servicios que están regresando objetos que se encuentran utilización Fecha objetos que están anotados con @Temporal (TemporalType.TIMESTAMP). I uso Gilead 1.3.2 e Hibernate 3.6 y no tuve problemas con GWT 2.2. ¿Alguna idea de lo que podría estar pasando o cómo iniciar la depuración?RPC error después de GWT 2.3 actualización

Aquí está el seguimiento de la pila:

com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: The response could not be deserialized 
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:221) 
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java: 287) 
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395) 
    at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp l.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:132) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) 
    at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:167) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: com.google.gwt.user.client.rpc.SerializationException: java.sql.Timestamp/1769758459 
Caused by: com.google.gwt.user.client.rpc.SerializationException: java.sql.Timestamp/1769758459 
    at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153) 
    at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:114) 
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:111) 
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119) 
    at com.lensoo.shared.entity.Course_FieldSerializer.deserialize(Course_FieldSerializer.java:320) 
    at com.lensoo.shared.entity.Course_FieldSerializer.deserial(Course_FieldSerializer.java:405) 
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95) 
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:113) 
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119) 
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter$ResponseReader$8.read(RequestCallbackAdapter.java:106) 
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:214) 
    ... 26 more 
    ... 26 more 
+0

¿Usted también actualizar a GWT 2.3 en el lado del servicio? ¿Hay un rastro de pila del servidor? –

+0

Puede ser que los objetos que está utilizando no estén implementando la interfaz serializable, eso es lo que creo. – Ankit

+0

¿Se ha corregido este problema en las versiones más recientes de GWT?(Estoy tratando de actualizar a 2.5.0-rc1) ¿O tenemos que aplicar una solución para ciertos? (Gilead 1.3.2) – rpr

Respuesta

3

tengo problema muy similar - Gilead 1.3.1, Hibernate. La excepción también se queja en el campo Marca de tiempo.

Aquí hay algo que he encontrado en el sitio web de Gilead:

"Timestamp_FieldSerializer que se incluye con Gilead conflictos con uno que al parecer se introdujo en GWT 2.2 o 2.3"

http://sourceforge.net/tracker/index.php?func=detail&aid=3285026&group_id=239931&atid=1111398

Fin de "Detalles" sección sugiere la solución fácil, sin embargo, aún no lo he intentado.

+0

Gracias por la ayuda. Para los curiosos, quite el paquete com.google.gwt.user.client.rpc.core.java.sql de gilead4gwt.jar – KevMo

3

Si no quieres tocar JAR - cuando se utiliza como Gilead 1.3.2 Maven dependecy, hay una mejor solución que he encontrado hoy.

Los serializadores conflictivos de Gilead deben ser sombreados por estos a partir de GWT 2.3, pero como ambos JAR están en el mismo nivel y el posicionamiento inherit en gwt.xml no ayuda, estos deben reimplementarse en la estructura de su proyecto. Los "nuevos" serializadores tendrán prioridad tanto en el servidor como en el cliente compilado. Finalmente trabajas GWT 2.3 y Gilead 1.3.2.

En pasos:

  1. Crear paquete com.google.gwt.user.client.rpc.core.java.sql en su proyecto.
  2. Usando Eclipse abra gwt-servlet-2.3.jar y encuentre el paquete anterior con tres archivos Date_CustomFieldSerializer.class, Time_CustomFieldSerializer.class y Timestamp_CustomFieldSerializer.class. Debería ver el código fuente si Maven lo descargó.
  3. Recrear estos archivos fuente en su proyecto.

Supongo que el equipo de Gilead debería eliminar los serializadores en la siguiente versión y luego eliminarlos de su proyecto también.

0

Simplemente puede buscar en [project_path]/war/WEB-INF/lib para la biblioteca json.jar y añadirlo a la ruta de compilación (estoy usando Eclipse).

0

Es muy simple. Solo tiene que eliminar el paquete com.google.* del gilead4gwt-1.3.2.1839.jar.

De hecho, se resuelve este problema.

Cuestiones relacionadas