2013-08-01 35 views
0

我想序列化GWT中的一個對象,該對象繼承此代碼中的其他類型的對象。我的結果應該是一個System.out.printGWT中的NotSerializableExeption(ByteArrayOutputStream)

import java.io.ByteArrayOutputStream; 
import java.io.ObjectOutputStream; 
import com.google.gwt.user.client.rpc.IsSerializable; 
import spa.shared.storages.RouteStorage; 

public class RouteStorageHelper implements IsSerializable { 

    public RouteStorageHelper() { 

    } 

    public void storeRoutes(RouteStorage routeStorage) { 

     ByteArrayOutputStream baos; 
     ObjectOutputStream out; 
     baos = new ByteArrayOutputStream(); 

     try { 
      out = new ObjectOutputStream(baos); 
      out.writeObject(routeStorage); 
      //byte[] byteArray=baos.toByteArray(); 
      out.close(); 
      byte[] serializedGraph=baos.toByteArray(); 
      System.out.println(serializedGraph); 


     } catch (Exception sqle) { 
      System.out.print(sqle); 
     } 
    } 

但我的一切,是一個NotSerializableException,它講述的東西不是序列。我不明白,因爲其他子類對象也有IsSerializable接口。

其他類這個接口:RouteStorage, Storage, Patient, Employee,等... 的事情,我也使用:String, Integer, HashMap, ArrayList, Date (java.util)和兩個enums Status and Qualifikation

是否有任何此類不可序列化? GWT有什麼不同嗎?

回答

1

是的,這裏您使用基於java.io.Serializable接口的java序列化。 GWT接口IsSerializable不擴展java.io.Serializable,所以從java序列化程序的角度來看,您的對象不是可序列化的

1

在客戶端進行序列化GWT將Java類轉換爲JavaScript。爲此,它對您可以使用的類有一些限制。並不是所有的標準java類都不支持,但是有限的一組。在GWT文檔中查看更多信息:Serializable Types

接口IsSerializable是較舊的GWT版本的補遺,您可以使用標準的Serializable接口,這也使得某些Java在服務器端可序列化。

+0

所以我不必這樣做:公共類'RouteStorageHelper實現IsSerializable,Serializable'但只使用'Serializable'? –

+0

是的,你只需要'Serializable'。請參閱:http://www.gwtproject.org/doc/latest/FAQ_Server.html#Does_the_GWT_RPC_system_support_the_use_of_java.io.Serializable –

相關問題