GWT RPC属性为空

GWT RPC属性为空,gwt,serialization,gwt-rpc,Gwt,Serialization,Gwt Rpc,在我的GWT应用程序中,我必须跟踪对hibernate对象所做的更改,因此我有一个简单的POJO将修改传输到服务器端,并记录在服务器端: 公共类ModifiedValueReference实现可序列化{ 私有静态最终长serialVersionUID=6144012539285913980L; 私有可序列化oldValue; 私有可序列化newValue; 公共ModifiedValueReference(){ 超级(); } public ModifiedValue引用(可序列化oldValu

在我的GWT应用程序中,我必须跟踪对hibernate对象所做的更改,因此我有一个简单的POJO将修改传输到服务器端,并记录在服务器端:

公共类ModifiedValueReference实现可序列化{
私有静态最终长serialVersionUID=6144012539285913980L;
私有可序列化oldValue;
私有可序列化newValue;
公共ModifiedValueReference(){
超级();
}
public ModifiedValue引用(可序列化oldValue、可序列化newValue){
这个();
setOldValue(oldValue);
设置新值(newValue);
}
可公开序列化的getOldValue(){
返回旧值;
}
public void setOldValue(可序列化的oldValue){
this.oldValue=oldValue;
}
可公开序列化的getNewValue(){
返回新值;
}
public void setNewValue(可序列化的newValue){
this.newValue=newValue;
}
}
属性
oldValue
newValue
的类型为
可序列化
,因此可以存储我的整数、字符串、日期和布尔值以及其他几个Hibernate对象

通过使用记录修改的特殊setter方法实现跟踪(例如:使用
setFirstNameLog()
而不是下面的
setFirstName()
):

公共类人物{
私有字符串名;
私有映射修改=
新HashMap(15);
public void addModification(字符串键、可序列化oldValue、可序列化newValue){
if(key!=null&&!key.isEmpty()){
修改。放置(键,
新修改的值引用(旧值,新值));
}
}
public void setFirstnameLog(字符串firstname){
addModification(“名字”,getFirstname(),firstname);
setFirstname(firstname);
}
public void setFirstname(字符串firstname){
this.firstname=firstname;
}
公共字符串getFirstname(){
返回这个.firstname;
}
}
ModifiedValueReference
对象通过GWT RPC到达服务器端时,
oldValue
newValue
为空为什么?


这些字段在客户端用字符串填充。在服务器端,它们不是null,而是空字符串。

问题在于我的
Person
类中的
修改
映射没有setter方法(例如:a
setModifications(map)
方法)


因此,当通过RPC方法保存
Person
对象时,GWT RPC无法在服务器端重建映射。

也许更多的代码会有所帮助。可能是实际的服务调用和服务器端实现。@enrybo感谢您的建议。由于该代码正在工作,我在家制作了一个示例GWT项目,试图重现该问题。我在家里的代码工作得很好,所以我怀疑是工作中的其他代码导致了这个问题。我们有hibernate和gilead在工作,所以任何事情都可能导致这个问题。如果你愿意,我可以发布我现在写的代码。@enrybo,我找到了。我没有用于
修改的setter
,这导致它不能在服务器端由GWT RPC重建。这真的很奇怪,因为GWT序列化不需要getter或setter。所有本身可序列化的非最终、非临时字段都将被序列化。@Strelok,我也不这么认为,但是
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeClass(类,对象)
,它调用
com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.getSetters(类)
不是这样说的。我在调试
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(String)
之后发生的所有事情时发现了这个问题。谢谢!因为缺少二传手浪费了这么多时间@卡卡马诺太棒了!很高兴知道3年前的答案仍然在帮助人们!