2016-06-09 75 views
0

這是我的客戶端代碼,通過RPC調用獲取字符串「get-image-data」並從服務器獲取byte[]帶序列化的GWT

CommandMessage msg = new CommandMessage(itemId, "get-image-data"); 
cmain.ivClient.execute(msg, new AsyncCallback<ResponseMessage>() { 

    @Override 
    public void onFailure(Throwable caught) { 

    } 

    @Override 
    public void onSuccess(ResponseMessage result) { 
     if (result.result) { 
      result.data is byte[]. 
     } 
    } 
}); 

從服務器端,我得到了數據的長度是241336. 但onSuccess方法我不能得到的價值。它總是去onFailure方法。

而且我得到了登錄的Apache:

com.google.gwt.user.client.rpc.SerializationException:輸入「[B」被 不包括在該組的類型可以通過序列化此 SerializationPolicy或其Class對象無法加載。

如何在GWT中進行序列化?

+2

是什麼'ResponseMessage'樣子?該錯誤表示byte [] _cant_通過線路發送,而在您的情況下,服務器說它不允許發送該數據。 –

+0

您使用的是哪個版本的GWT?我的直覺告訴我,byte []應該是可序列化的,但我會檢查。 – RockyMM

+0

字節[]是絕對可序列化的。 http://developerlife.com/tutorials/?p=131檢查你的瀏覽器是否緩存了舊編譯的JS。做一個Ctrl-F5刷新緩存,它可能工作。 – RockyMM

回答

1

1)創建一個實現Serializable接口 讓這個POJO擁有所有你在RPC服務的響應所需的數據,在這種情況下,圖像數據的POJO

2)爲響應通過這個POJO您RPC服務。

下面的教程有用於創建RPC服務 http://www.gwtproject.org/doc/latest/tutorial/RPC.html

1
  1. 您轉移到從服務器必須實現IsSerializable的對象的足夠信息。

  2. 您正在傳輸的對象中的所有自定義對象也需要實現IsSerializable。

  3. 您的對象不能有最終字段,需要一個無參數構造函數。

  4. 你需要獲得者和制定者。

常見的序列化對象在GWT:

public class MyClass implements IsSerializable { 

     private String txt; 
     private MyOtherClass myOtherClass; // Also implements IsSerializable 

     public MyClass() { 

     } 

     public String getTxt() { 
      return this.txt; 
     } 

     public void setTxt(String txt) { 
      return this.txt = txt; 
     } 

     public String getMyOtherClass() { 
      return this.myOtherClass; 
     } 

     public void setMyOtherClass(MyOtherClass myOtherClass) { 
      return this.myOtherClass = myOtherClass; 
     } 
}