簡體   English   中英

com.google.gwt.user.client.rpc.SerializationException:為什么我的類不是Serializable

[英]com.google.gwt.user.client.rpc.SerializationException: why is my class not Serializable

我加載GWT頁面時遇到此錯誤:

錯誤com.google.gwt.user.client.rpc.SerializationException: Type 'com.summerbreezemotel.server.DBReservation'未包含在可由此SerializationPolicy序列化的類型集中,或者無法加載其Class對象。

我查看了文檔,似乎遵循了所有限制。 我還有其他3個類做同樣的事情但是這個似乎引起了一個問題。 任何幫助,將不勝感激。

failing:DBReservation的類failing:DBReservation

    package com.summerbreezemotel.server;
    import java.util.Date;

    import com.google.appengine.api.datastore.DatastoreService;
    import com.google.appengine.api.datastore.DatastoreServiceFactory;
    import com.google.appengine.api.datastore.Entity;
    import com.google.appengine.api.datastore.Key;
    import com.google.appengine.api.datastore.KeyFactory;
    import com.summerbreezemotel.shared.DataReservation;
    import com.summerbreezemotel.shared.SiteConstants;

    public class DBReservation extends DataReservation
    {
      /**
       * 
       */
      private static final long serialVersionUID = 146606067638056872L;
      Date dateReserved;
      String userEmail;

      public DBReservation() {}

      public DBReservation(DataReservation in) {
        checkIn = in.checkIn;
        checkOut = in.checkOut;
        form_FirstName = in.form_FirstName;
        form_LastName = in.form_LastName;
        form_Addr1 = in.form_Addr1;
        form_Addr2 = in.form_Addr2;
        form_City = in.form_City;
        form_State = in.form_State;
        form_Zip = in.form_Zip;
        form_Country = in.form_Country;
        form_Phone = in.form_Phone;
        form_Email = in.form_Email;
        form_CardType = in.form_CardType;
        form_CardMonth = in.form_CardMonth;
        form_CardNumber = in.form_CardNumber;
        form_CardYear = in.form_CardYear;
        form_RoomType = in.form_RoomType;
        form_isSmoking = in.form_isSmoking;
        form_numRooms = in.form_numRooms;
        ratePerNightPerRoom = in.ratePerNightPerRoom;
        totalRate = in.totalRate;   
      }

      DataReservation getData()
      {
        DataReservation out = new DataReservation();
        out.checkIn = checkIn;
        out.checkOut = checkOut;
        out.form_FirstName = form_FirstName;
        out.form_LastName = form_LastName;
        out.form_Addr1 = form_Addr1;
        out.form_Addr2 = form_Addr2;
        out.form_City = form_City;
        out.form_State = form_State;
        out.form_Zip = form_Zip;
        out.form_Country = form_Country;
        out.form_Phone = form_Phone;
        out.form_Email = form_Email;
        out.form_CardType = form_CardType;
        out.form_CardMonth = form_CardMonth;
        out.form_CardNumber = form_CardNumber;
        out.form_CardYear = form_CardYear;
        out.form_RoomType = form_RoomType;
        out.form_isSmoking = form_isSmoking;
        out.form_numRooms = form_numRooms;
        out.ratePerNightPerRoom = ratePerNightPerRoom;
        out.totalRate = totalRate;
        return out;
      }

      // gets item from DB and convertes it to this
      void fillReservationFromEntity(Entity item)
      {
        userEmail = (String) item.getProperty(SiteConstants.USER_PROPERTY);
        dateReserved = (Date) item.getProperty(SiteConstants.RESERVE_DATE_PROPERTY);
        checkIn = (Date) item.getProperty(SiteConstants.IN_DATE_PROPERTY);
        checkOut = (Date) item.getProperty(SiteConstants.OUT_DATE_PROPERTY);
        form_FirstName = (String) item.getProperty(SiteConstants.FORM_FIRSTNAME_PROPERTY);
        form_LastName = (String) item.getProperty(SiteConstants.FORM_LASTNAME_PROPERTY);
        form_Addr1 = (String) item.getProperty(SiteConstants.FORM_ADDR1_PROPERTY);
        form_Addr2 = (String) item.getProperty(SiteConstants.FORM_ADDR2_PROPERTY);
        form_City = (String) item.getProperty(SiteConstants.FORM_CITY_PROPERTY);
        form_State = (String) item.getProperty(SiteConstants.FORM_STATE_PROPERTY);
        form_Zip = (String) item.getProperty(SiteConstants.FORM_ZIP_PROPERTY);
        form_Country = (String)item.getProperty(SiteConstants.FORM_COUNTRY_PROPERTY);
        form_Phone = (String) item.getProperty(SiteConstants.FORM_PHONE_PROPERTY);
        form_Email = (String) item.getProperty(SiteConstants.FORM_EMAIL_PROPERTY);
        form_CardType = (String) item.getProperty(SiteConstants.FORM_CARDTYPE_PROPERTY);
        form_CardMonth = (String) item.getProperty(SiteConstants.FORM_CARDMONTH_PROPERTY);
        form_CardNumber = (String) item.getProperty(SiteConstants.FORM_CARDNUMBER_PROPERTY);
        form_CardYear = (Long) item.getProperty(SiteConstants.FORM_CARDYEAR_PROPERTY);
        form_RoomType = (Long) item.getProperty(SiteConstants.FORM_ROOMTYPE_PROPERTY);
        form_isSmoking = (Boolean) item.getProperty(SiteConstants.FORM_ISSMOKING_PROPERTY);
        form_numRooms = (Long) item.getProperty(SiteConstants.FORM_NUMROOMS_PROPERTY);
        ratePerNightPerRoom = (Double) item.getProperty(SiteConstants.RATEPERNIGHTPERROOM_PROPERTY);
        totalRate = (Double) item.getProperty(SiteConstants.TOTALRATE_PROPERTY);
      }

      void addReservationsToEntity(Entity item)
      {
        item.setProperty(SiteConstants.USER_PROPERTY, userEmail);
        item.setProperty(SiteConstants.RESERVE_DATE_PROPERTY, dateReserved);
        item.setProperty(SiteConstants.IN_DATE_PROPERTY, checkIn);
        item.setProperty(SiteConstants.OUT_DATE_PROPERTY, checkOut);
        item.setProperty(SiteConstants.FORM_FIRSTNAME_PROPERTY,form_FirstName);
        item.setProperty(SiteConstants.FORM_LASTNAME_PROPERTY,form_LastName);
        item.setProperty(SiteConstants.FORM_ADDR1_PROPERTY,form_Addr1);
        item.setProperty(SiteConstants.FORM_ADDR2_PROPERTY,form_Addr2);
        item.setProperty(SiteConstants.FORM_CITY_PROPERTY,form_City);
        item.setProperty(SiteConstants.FORM_STATE_PROPERTY,form_State);
        item.setProperty(SiteConstants.FORM_ZIP_PROPERTY,form_Zip);
        item.setProperty(SiteConstants.FORM_COUNTRY_PROPERTY,form_Country);
        item.setProperty(SiteConstants.FORM_PHONE_PROPERTY,form_Phone);
        item.setProperty(SiteConstants.FORM_EMAIL_PROPERTY,form_Email);
        item.setProperty(SiteConstants.FORM_CARDTYPE_PROPERTY,form_CardType);
        item.setProperty(SiteConstants.FORM_CARDMONTH_PROPERTY,form_CardMonth);
        item.setProperty(SiteConstants.FORM_CARDNUMBER_PROPERTY,form_CardNumber);
        item.setProperty(SiteConstants.FORM_CARDYEAR_PROPERTY,form_CardYear);
        item.setProperty(SiteConstants.FORM_ROOMTYPE_PROPERTY,form_RoomType);
        item.setProperty(SiteConstants.FORM_ISSMOKING_PROPERTY,form_isSmoking);
        item.setProperty(SiteConstants.FORM_NUMROOMS_PROPERTY,form_numRooms);
        item.setProperty(SiteConstants.RATEPERNIGHTPERROOM_PROPERTY,ratePerNightPerRoom);
        item.setProperty(SiteConstants.TOTALRATE_PROPERTY,totalRate);
      }

      void store()
      {
    //      UserService userService = UserServiceFactory.getUserService();
    //      User user = userService.getCurrentUser();
    //      if(user.getEmail() != null)
    //          userEmail = user.getEmail();

        DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

        String SummerBreezeDateStoreName = new String(SiteConstants.KEY_NAME);
        Key SummerBreezeDateStoreKey = KeyFactory.createKey(SiteConstants.KEY_KEY, SummerBreezeDateStoreName);
        Entity reservationsEntry = new Entity(SiteConstants.DB_RESERVATIONS, SummerBreezeDateStoreKey);

        addReservationsToEntity(reservationsEntry);
        datastore.put(reservationsEntry);
        // use this if writes get to high
        //      item.setProperty("testBlob",new Blob(toByte(roomResevationRequest)));

        datastore.put(reservationsEntry);
      }
    }

我的DataReservation

      package com.summerbreezemotel.shared;

      import java.io.Serializable;
      import java.util.Date;

      public class DataReservation implements Serializable
      {
        private static final long serialVersionUID = -7598404617383692994L;

        public String form_FirstName;
        public String form_LastName;
        public String form_Addr1;
        public String form_Addr2;
        public String form_City;
        public String form_State;
        public String form_Zip;
        public String form_Country;
        public String form_Phone;
        public String form_Email;
        public String form_CardType;
        public String form_CardMonth;
        public String form_CardNumber;
        public long form_CardYear;
        public long form_RoomType;
        public boolean form_isSmoking;
        public Date checkIn;
        public Date checkOut;
        public long form_numRooms;
        public double ratePerNightPerRoom;
        public double totalRate;

        public DataReservation()
        {   
        }
      }

您正在共享文件夾中使用實現Serializable並在服務器端擴展它的文件。 你確定這個邏輯嗎? 它通常是客戶端/共享端上的pojo / dto / model實現IsSerializable並將其發送到服務器。 然后服務器執行操作並將其返回。

我認為這是一個典型的射擊自己的案例。 通過使用共享類中的邏輯擴展服務器對象,您可以更輕松地創建包含數據庫代碼的服務器端類,但是如果您意外返回服務器端而不是在將其發送到服務器端之前調用getData()客戶端你得到的服務器端類當然不能發送給客戶端。 但是編譯器不會因為語法正確而警告你。 所以我認為答案不在給出的代碼中,看起來不錯,但在gwt servlet和DBReservation的使用DBReservation

它應該實現Serializable接口。 您不通過擴展類來“繼承”實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM