2011-05-06 2 views
7

После обновления до GWT 2.3 некоторые из моих служб RPC больше не работают, а сбой «Отказ не может быть десериализован». Кажется, что происходят с службами, возвращающими объекты, которые используют Date объектов, которые аннотируются с помощью @Temporal (TemporalType.TIMESTAMP). I использовать Gilead 1.3.2 и Hibernate 3.6, и у меня не было проблем с GWT 2.2. Любая идея, что может произойти, или как начать отладку?Ошибка RPC после обновления GWT 2.3

Вот трассировки стека:

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

Вы также перешли на GWT 2.3 со стороны обслуживания? Есть трассировка стека с сервера? –

+0

Может быть, объекты, которые вы используете, не реализуют интерфейс сериализуемым, вот что я думаю. – Ankit

+0

Является ли эта проблема исправлена ​​в более поздних выпусках GWT?(Я пытаюсь обновить до 2.5.0-rc1) Или нам нужно применить исправление для определенного? (Gilead 1.3.2) – rpr

ответ

3

У меня очень похожая проблема - Gilead 1.3.1, Hibernate. Исключение также жалуется на поле Timestamp.

Вот то, что я нашел на сайте Галаадова:

«Timestamp_FieldSerializer, который поставляется с конфликтами Gilead с той, которая была, по-видимому, введенных в GWT 2.2 или 2.3»

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

Конец «Подробности» раздел предлагает легко исправить, однако, я еще не пробовал это.

+0

Спасибо за помощь. Для любопытных удалите пакет com.google.gwt.user.client.rpc.core.java.sql из gilead4gwt.jar – KevMo

3

Если вы не хотите касаться JAR - когда вы используете Gilead 1.3.2 как Maven dependecy, есть лучшее решение, которое я нашел сегодня.

Конфликтующие сериализаторы Gilead должны быть затенены ими от GWT 2.3, но поскольку оба JAR находятся на одном уровне, а позиционирование inherit в gwt.xml не помогает им переопределять в вашей структуре проекта. «Новые» сериализаторы будут иметь приоритет как на сервере, так и на компилированном клиенте. Наконец, вы получаете рабочие GWT 2.3 и Gilead 1.3.2.

На этапах:

  1. Создать пакет com.google.gwt.user.client.rpc.core.java.sql в вашем проекте.
  2. Использование Eclipse open gwt-servlet-2.3.jar и найти выше пакет с тремя файлами Date_CustomFieldSerializer.class, Time_CustomFieldSerializer.class и Timestamp_CustomFieldSerializer.class. Вы должны увидеть источник, если Maven скачал его.
  3. Восстановите эти исходные файлы в своем проекте.

Я полагаю, что команда Gilead должна удалить сериализаторы в следующем выпуске, а затем удалить их из своего проекта.

0

Просто вы можете найти на [project_path]/война/WEB-INF/Библиотека для библиотеки json.jar и добавить его в путь сборки (я использую Eclipse).

0

Это очень просто. Вам просто нужно удалить пакет com.google.* с gilead4gwt-1.3.2.1839.jar.

Фактически он действительно решает эту проблему.

Смежные вопросы