2011-11-25 101 views
1

我想跟進這個問題gwt-serialization-policy-hosted-mode-out-of-sync。簡而言之 - 當我從託管瀏覽器執行RPC時,此調用會在服務器上失敗,併發生異常。第二次編譯相同的源文件產生不同的gwt.rpc文件集

INFO: GwtRpcEventSrvc: ERROR: The serialization policy file '/84EC7BA65AF8175BAA99B47877FDE163.gwt.rpc' was not found; did you forget to include it in this deployment? 
    SEVERE: GwtRpcEventSrvc: WARNING: Failed to get the SerializationPolicy '84EC7BA65AF8175BAA99B47877FDE163' for module 'http://host:19980/MYAPP/'; a legacy, 1.3.3 compatible, serialization policy will be used. Youmay experience SerializationExceptions as a result. 
    SEVERE: Exception while dispatching incoming RPC call 

雖然當我從瀏覽器執行相同的RPC時,請求在服務器上成功執行。

此外,我觀察到GWT編譯器的一個奇怪行爲,可能導致託管瀏覽器模式的問題。

我假設當我做兩個後續的完全相同的代碼編譯,那麼單個編譯的結果應該是相同的。我的意思是至少xxxxx.html和yyyyy.gwt.rpc文件必須相同。 (其中xxxxx和yyyyy是諸如84EC7BA65AF8175BAA99B47877FDE163的長數字。)

目前我有兩個版本的我的項目。

  • 的舊項目由GWT編譯1.7不從問題中gwt-serialization-policy-hosted-mode-out-of-sync
  • 一個新的項目中描述的託管瀏覽器是由GWT編譯2.0.4遭遇。這個新項目是基於舊項目。此項目遭受託管的瀏覽器問題。

案例1:老項目與GWT 1.7

我帶着我的,是由GWT編譯1.7舊項目。我做了兩個編譯,我比較了編譯的工件。 gwt.rpc文件相同html文件有不同的內容和名稱。由於gwt.rpc文件是相同的,我沒有託管瀏覽器的問題。

案例2:與GWT 2.0.4

我編了兩遍,都gwt.rpc和html文件的新項目是不同的。因此,託管瀏覽器中的RPC調用由於缺少gwt.rpc文件而在服務器上失敗。

案例3:老項目,GWT 2.0.4

我編了兩遍,都gwt.rpc和html文件是不同的。因此,託管瀏覽器中的RPC調用由於缺少gwt.rpc文件而在服務器上失敗。

我做了一些調查,並確定當我註釋掉一個類中的數據成員從服務器傳輸到客戶端的數據,然後編譯的文件開始相同。

class Data implements IsSerializable { 
      List<IsSerializable> data; 
      ... 
    } 
  1. 我想做同樣的事情,在新的項目,但它似乎有很多類進行修改。因此,隨着項目的增長,問題在增加。
  2. 我不知道用什麼來代替

    List<IsSerializable> data; 
    

    來傳輸數據。

回答

0

您需要了解更多一些的GWT序列化政策:

Serializable Types

通常你不.rpc文件混在一起,除非你正在做先進RPC調用,直接到你的服務器。

您的序列化對象:

class Data implements IsSerializable { 
     List<IsSerializable> data; 
     ... 
} 

用戶定義類是可序列化的,如果所有的下列規定: 這是分配給IsSerializable或序列化,可能是因爲它直接實現這些接口中的一個或因爲它來自一個超類,所有非最終的,非暫時的實例字段本身都是可序列化的,並且從GWT 1.5開始,它必須有一個默認的(零參數)構造函數(帶有任何訪問修飾符)或者沒有構造函數所有。

所以,你應該有類似:

class Data implements IsSerializable { 
     List<YOUR_TYPE> data; 
     ... 
} 

你的列表的模板類型,您沒有設置「IsSerializable」 ...它應該是這樣的:

List<int> data; 
相關問題