2013-08-01 8 views
0

Я хочу сериализовать объект в GWT, который наследует другие виды объектов в этом коде. Мой результат должен быть System.out.print:NotSerializableExeption в GWT (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, которая основана на java.io.Serializable интерфейсе. Интерфейс GWT IsSerializable не расширяет java.io.Serializable, поэтому с точки зрения сериализатора java ваши объекты не являются сериализуемыми

1

На стороне клиента для сериализации GWT переводит классы Java на JavaScript. Для этого у него есть некоторые ограничения на классы, которые вы можете использовать. Не все стандартные классы Java не поддерживаются, а ограниченный набор. Подробнее об этом см. В документации GWT: Serializable Types.

Интерфейс IsSerializable является остатком старых версий GWT, и вы можете просто использовать стандартный интерфейс Serializable, который также делает Java-сериализуемым на стороне сервера.

+0

Так что мне не нужно делать это так: public class '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 –

Смежные вопросы