讨厌的gwt SerializationException

今天调试在调试GWT做的应用得客户端,为了优化生成的代码,自以为得意的给service api的方法增加了@gwt.typeArgs.结果出现了SerializationException,搞了一天(下午--半夜)才搞定。郁闷!

半夜了,也睡不着觉了,总结一下SerializationException产生的原因,与大家共勉。

1。客户端UI依赖的java code和服务器端的不一致。

一般情况下,客户端和服务器端都会使用相同的业务模型,或者pojo,或者说是DTO更标准些,因为这些对象就是从服务器端传递到客户端的。如果这些代码两边使用的不一致,客户端就会报错了。客户段按照编译好的js里面定义的对象格式来解析服务器端传递过来序列化过的对象,如果多个属性或者少个,客户端可不会忽略掉,报个错提示你一下。

常见提示:the application is out of date(host mode)

2.某些属性不能序列化
gwt只是对jdk类的一个子集提供支持,除此之外都是不能直接序列化的。比如java.sql.Date,我们在使用hibernate从数据库中取到的date都是java.sql.Date的实例,而gwt只认识java.util.Date.该异常经常发生在服务器端,不能序列化嘛。当然,客户端的有这些类的话,呵呵,编译都不会过的。

3.不知其所以然的情况。类似上面我遇到的问题。我检查代码都不知道看了多少遍,客户端和服务器段代码绝对一致,所有的属性均可序列化 。而且奇怪的是,同样的一个List<MyObject>的list,有的可以,有的就是不行。最后解决办法,关机,重启,然后在测试的时候顺手把@gwt.typeArgs都去掉了。OK,终于好了!

你可能感兴趣的:(java,sql,应用服务器,Google,gwt)