2011-05-06 16 views
7

Dopo l'aggiornamento a GWT 2.3 alcuni dei miei servizi RPC non funzionano più e non riesce con "La risposta non può essere deserializzata". Sembra che avvenga ai servizi che restituiscono oggetti che sono utilizzati. Data oggetti annotati con @Temporal (TemporalType.TIMESTAMP). I utilizzano Gilead 1.3.2 e Hibernate 3.6 e non ho riscontrato problemi con GWT 2.2. Qualche idea su cosa potrebbe succedere o su come avviare il debugging?Errore RPC dopo l'aggiornamento a GWT 2.3

Ecco la traccia dello stack:

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

Hai eseguito l'upgrade a GWT 2.3 dal lato del servizio? C'è una traccia dello stack dal server? –

+0

Gli oggetti che stai usando non stanno implementando l'interfaccia serializzabile, questo è quello che penso. – Ankit

+0

Questo problema è stato risolto nelle versioni GWT più recenti?(Sto tentando di eseguire l'aggiornamento a 2.5.0-rc1) O è necessario applicare una correzione per certi? (Gilead 1.3.2) – rpr

risposta

3

Ho problema molto simile - Gilead 1.3.1, Hibernate. Eccezione si lamenta anche sul campo Timestamp.

ecco qualcosa che ho trovato sul sito di Gilead:

"Timestamp_FieldSerializer fornito con conflitti Gilead con uno che a quanto pare è stato introdotto in GWT 2.2 o 2.3"

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

Fine "Dettagli" la sezione suggerisce la soluzione facile, tuttavia, non l'ho ancora provato.

+0

Grazie per l'aiuto. Per i curiosi, rimuovere il pacchetto com.google.gwt.user.client.rpc.core.java.sql da gilead4gwt.jar – KevMo

3

Se non si desidera toccare i JAR - quando si utilizza Galaead 1.3.2 come dipendenza da Maven, c'è una soluzione migliore che ho trovato oggi.

contrastanti serializzatori Gilead deve essere ombreggiato da questi da GWT 2.3, ma in quanto entrambi vasi sono sullo stesso livello e il posizionamento inherit in non aiuta gwt.xml questi vanno reimplementate nella struttura del progetto. I "nuovi" serializzatori avranno la precedenza sia sul server che sul client compilato. Finalmente puoi lavorare su GWT 2.3 e Gilead 1.3.2.

Nei passaggi:

  1. Crea pacchetto com.google.gwt.user.client.rpc.core.java.sql nel progetto.
  2. Utilizzo di Eclipse aperto gwt-servlet-2.3.jar e trova sopra il pacchetto con tre file Date_CustomFieldSerializer.class, Time_CustomFieldSerializer.class e Timestamp_CustomFieldSerializer.class. Dovresti vedere la fonte se Maven l'ha scaricato.
  3. Ricrea questi file di origine nel progetto.

Suppongo che il team di Gilead debba rimuovere i serializzatori nella prossima versione, quindi eliminarli anche dal progetto.

0

Semplicemente si può cercare [project_path]/guerra/WEB-INF/lib per la libreria json.jar e aggiungerlo al percorso di generazione (sto usando Eclipse).

0

È molto semplice. Devi solo eliminare il pacchetto com.google.* da gilead4gwt-1.3.2.1839.jar.

In realtà risolve questo problema.

Problemi correlati