2011-05-06 31 views
7

Sau khi nâng cấp lên GWT 2.3, một số dịch vụ RPC của tôi không hoạt động nữa và không thành công với "Phản hồi không thể được deserialized". Dường như xảy ra với các dịch vụ đang trả về các đối tượng đang sử dụng Date các đối tượng được chú thích bằng @Temporal (TemporalType.TIMESTAMP). Tôi sử dụng Gilead 1.3.2 và Hibernate 3.6 và tôi không gặp vấn đề gì với GWT 2.2. Bất kỳ ý tưởng nào có thể xảy ra hoặc cách bắt đầu gỡ lỗi?Lỗi RPC sau khi nâng cấp GWT 2.3

Dưới đây là stack trace:

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

Bạn cũng đã nâng cấp lên GWT 2.3 ở phía dịch vụ chưa? Có một dấu vết ngăn xếp từ máy chủ? –

+0

Có thể là các đối tượng mà bạn đang sử dụng không thực hiện giao diện serializable, đó là những gì tôi nghĩ. – Ankit

+0

Sự cố này có được khắc phục trong các bản phát hành GWT gần đây không?(Tôi đang cố gắng nâng cấp lên 2.5.0-rc1) Hoặc chúng ta có cần áp dụng sửa chữa không? (Gilead 1.3.2) – rpr

Trả lời

3

Tôi có vấn đề rất giống nhau - Gilead 1.3.1, Hibernate. Ngoại lệ cũng đang phàn nàn về trường Dấu thời gian.

Dưới đây là một cái gì đó mà tôi tìm thấy tại trang web của Gilead của:

"Timestamp_FieldSerializer mà tàu với các cuộc xung đột Gilead với một trong đó dường như đã được giới thiệu trong GWT 2.2 hoặc 2.3"

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

Kết thúc "Details" phần cho thấy sửa chữa dễ dàng, tuy nhiên, tôi đã không cố gắng đó được nêu ra.

+0

Cảm ơn sự giúp đỡ. Vì tò mò, hãy xóa gói com.google.gwt.user.client.rpc.core.java.sql khỏi gilead4gwt.jar – KevMo

3

Nếu bạn không muốn chạm vào JAR - khi bạn sử dụng Gilead 1.3.2 làm phụ thuộc Maven, có một giải pháp tốt hơn tôi đã tìm thấy hôm nay.

Xung đột Công cụ nối tiếp Ga-la-át phải được làm mờ bởi các GWT 2.3, nhưng khi cả hai JAR cùng cấp và định vị inherit trong gwt.xml không giúp chúng phải được thực hiện lại trong cấu trúc dự án của bạn. "Serial" mới sẽ được ưu tiên cả trên máy chủ và máy khách được biên dịch. Cuối cùng bạn làm việc với GWT 2.3 và Gilead 1.3.2.

Trong bước sau:

  1. Tạo gói com.google.gwt.user.client.rpc.core.java.sql trong dự án của bạn.
  2. Sử dụng Eclipse mở gwt-servlet-2.3.jar và tìm gói ở trên có ba tệp Date_CustomFieldSerializer.class, Time_CustomFieldSerializer.classTimestamp_CustomFieldSerializer.class. Bạn sẽ thấy nguồn nếu Maven tải xuống.
  3. Tạo lại các tệp nguồn này trong dự án của bạn.

Tôi cho rằng nhóm Gilead nên xóa serializers trong bản phát hành tiếp theo, sau đó bạn cũng xóa chúng khỏi dự án của mình.

0

Đơn giản chỉ cần bạn có thể tìm kiếm trên [project_path]/chiến tranh/WEB-INF/lib cho thư viện json.jar và thêm nó vào việc xây dựng đường dẫn (Tôi đang sử dụng Eclipse).

0

Rất đơn giản. Bạn chỉ cần xóa gói com.google.* từ số gilead4gwt-1.3.2.1839.jar.

Thực tế nó giải quyết vấn đề này.

Các vấn đề liên quan