2009-08-29 64 views
1

在我的GWT應用程序,我有以下的模型類:GWT和java.io.Serializable接口

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

public class TestEntity implements IsSerializable { 
    public String testString; 
} 

這個類實現了GWT定製IsSerializable標記接口 - 我真的不喜歡,因爲我用我的模型類不僅適用於GWT。所以我更喜歡java.io.Serializable。

但是,如果我修改類實現Serializable而不是IsSerializable,GWT RPC機制不再工作。我沒有在服務器端發生錯誤,但在客戶端AsyncCallback.onFailure被調用。

我使用...

  • GWT 1.7.0。
  • 彈簧2.5.6.SEC01
  • 彈簧和GWT的配置如here所述。
+0

或許暗示:該類出現在* .gwt.rpc文件: package.path.TestEntity,真正 – 2009-08-29 13:51:33

回答

0

好吧,我通過Gwt-Spring-Article(我發佈的鏈接)的評論,並找到了解決方案。我不得不改變的過程中調用方法兩行:

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

您收到的錯誤究竟是什麼?我們爲我們的DTO使用Serializable而沒有任何問題,所以你應該也能夠。

+0

Throwable.getMessage()在客戶端上只是說: 調用失敗的服務器上;有關詳細信息,請參閱服務器日誌 堆棧跟蹤爲空。 在服務器日誌上只有我的調試消息。他們告訴我,一切都很好。 我忘了說,我也使用Spring。GWT和Spring的配置如下:http://technophiliac.wordpress.com/2008/08/24/giving-gwt-a-spring-in-its-step/ – 2009-08-29 13:02:12

1

原來,今年春季-MVC和GWT混合動力技術在代碼庫中使用我的新工作 - 難怪錯誤我得到是相似的!感謝這篇文章 - 它幫助我找出問題並修復它。我們的代碼是基於您發佈的文章中的舊代碼 - 或者代碼所基於的任何代碼!剽竊比比皆是!

總之,該文章提出了一種將GWT與Spring-MVC集成的方法。解決方案的關鍵是提供一個Servlet servlet類,它將Spring MVC控制器與GWT RemoteServiceServlet結合在一起。可序列化的DTO對象不被支持,因爲(我認爲)代碼是基於GWT-1.4之前的代碼的,它不能處理那些沒有實現GWT的isSerializable標記接口的DTO。一旦知道發生了什麼,控制器類的更新非常簡單...

我看到的兩條固定線路只是通過SerializationPolicyProvider(這是RPC.decodeRequest()的最後一個參數中的'this'方法,調用類擴展了GWT的RemoveServiceServlet,它是一個SerializationPolicyProvider)。我認爲這個簡單的修復會導致更新的(post 1.4)GWT代碼被調用,它可以處理Serializable以及isSerializable類。 SerializationPolicyProvider查看serializationPolicy。

第二個修復程序將serializationPolicy傳遞給RPC.invokeAndEncodeResponse()方法。我認爲這是編譯GWT模塊時驗證的DTO對象的* .gwt.rpc白名單。