RPC调用(GWT)期间POJO信息丢失

时间:2012-12-20 02:37:20

标签: gwt

我遇到RPC调用和GWT问题。本质上,我有一个Person类(客户端和服务器之间的公共代码),它在客户端Web代码中创建,通过RPC调用发送到服务器代码,然后保存到DB(OrientDB)。我已经验证了以下工作:

  1. RPC调用 - 我可以将信息发送到服务器并从服务器检索信息
  2. 保存到数据库 - 已验证Person对象已保存到数据库
  3. 我遇到问题的地方是将POJO从客户端转移到服务器。我已经验证了POJO的属性在发送到服务器之前是完整的,但是,传递给服务器的对象包含所有属性的空值。从本质上讲,课程是转移的,但信息不是。然后它保存到DB,但显然没有包含任何相关信息。

    我将在下面复制我认为相关的内容,请让我知道我还能提供什么来使这个问题更容易识别。注意这些仍然处于测试状态,所以请注意评论:)

    知道为什么我的POJO信息在翻译中丢失了吗?

    Person对象,后跟它继承的抽象类:

    public class Person extends org.matesweb.shared.AbsPerson implements Serializable
    {
        @Id 
        private String id; // DON'T CREATE GETTER/SETTER FOR IT TO PREVENT THE CHANGING BY THE USER APPLICATION, 
                           // UNLESS IT'S NEEDED
    
        //sets new user details
        public void setPerson(String fIrstName, String mIdInit, String lAstName, String email, String password)
        {
            firstName = fIrstName;
            middleInitial = mIdInit;
            lastName = lAstName;
        }
    
        /*getter and setter methods - required for every 
         * field due to restrictions imposed by OrientDB*/ 
    
        public Object getId()
        {
            String tmp;
            tmp = id.toString();
            return tmp;
        }
    //end class  
    }
    
    public class AbsPerson implements Serializable
    {
        String firstName;
        String middleInitial;
        String lastName;
    
      //  public sys.Login login;
    
        public org.matesweb.shared.Group[] groups;
        private org.matesweb.shared.Purchase[] purchases;
    
    
        /*this method adds a new purchase to the purchases variable*/
    /*    public void addPurchase(float price, String description)
        {
            people.Purchase newPurchase = new people.Purchase(login, price, description);
        }
    */    
        /*adds a person to a group by comparing the passed in group ID and PWD*/
        public void addGroup(String groupID, String groupPWD)
        {
            //compare group ID with group PWD to add a user to the group
        }
    
        /*getter and setter methods - required for every 
         * field due to restrictions imposed by OrientDB*/
        public String getFirstName()
            {
                return firstName;
            }
        public void setFirstName(String name)
            {
                firstName = name;
            }       
    
        public String getMiddleInitial()
            {
                return middleInitial;
            }
        public void setMiddleInitial(String midInit)
            {
                middleInitial = midInit;
            }       
    
        public String getLastName()
            {
                return lastName;
            }
        public void setLastName(String ln)
            {
                lastName = ln;
            }       
    
        /*
        public sys.Login getLogin()
            {
                return login;
            }
        public void setLogin(sys.Login log)
            {
                login = log;
            }
        */
    
        public org.matesweb.shared.Group[] getGroups()
            {
                return groups;
            }
        public void setGroups(org.matesweb.shared.Group[] gro)
            {
                groups = gro;
            }       
    
        public org.matesweb.shared.Purchase[] getPurchases()
            {
                return purchases;
            }
        public void setPurchases(org.matesweb.shared.Purchase[] purch)
            {
                purchases = purch;
            }
    }
    

    服务

    package org.matesweb.client;
    
    import com.google.gwt.user.client.rpc.RemoteService;
    import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
    import org.matesweb.shared.Person;
    
    @RemoteServiceRelativePath("peopleService")
    public interface PeopleService extends RemoteService {
    
    //test services
        String stringTest(String outgoingString);
        Person getPerson(String persId);
    
    //production services
        String savePerson(Person p);
    }
    

    ServiceAsync

    import com.google.gwt.user.client.rpc.AsyncCallback;
    import org.matesweb.shared.Person;
    
    public interface PeopleServiceAsync
    {
        //tests
        void stringTest(String outgoingString, AsyncCallback<String> incomingString);
        void getPerson(String persId, AsyncCallback<Person> retPerson);
    
        //production services
        void savePerson(Person p , AsyncCallback<String> st);
    }
    

    ServiceImpl要求使用此特定方法:

    //production calls
        @Override
        public String savePerson(Person p) {
            String st = ioObj.saveObj(p);
            if(st.equals("Success")){
                return "Your information has been saved successfully!";
            } else{
                return "Something has gone wrong on our end... Sorry! Error:<br /> " + st;
            } 
        }
    

    最后,呼叫本身

    private static void savePerson(Person p)
        {        
            // Initialize the service proxy.
            if (peopleSvc == null) {
              peopleSvc = GWT.create(PeopleService.class);
            }
    
            //resets status
            st="";
    
            // Set up the callback object.
            AsyncCallback<String> callback = new AsyncCallback<String>() {
                @Override
                public void onFailure(Throwable caught) {
                    st = caught.getMessage();
                    Label stLabel= new Label(st);
                    personTable.setWidget(3,1,stLabel);            
                }
    
                @Override
                public void onSuccess(String result) {
                    st = result;
                    HTML stLabel= new HTML(st);
                    joinPanel.add(stLabel);
                }
            };
            // Make the call to the people service.
            peopleSvc.savePerson(p, callback);    
        }
    

1 个答案:

答案 0 :(得分:1)

我能够通过实现GWT的IsSerializable接口来解决这个问题。我还从Person类中删除了Serializable接口,并让它从它继承的抽象类继承IsSerializable。