讨厌的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,终于好了! 1 楼 edokeh 2008-12-17 挑个刺哦,GWT 1.5已经支持java.sql.Date了,呵呵
http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=ReleaseNotes_1_5_JreEmulation 2 楼 stone 2008-12-17 edokeh 写道挑个刺哦,GWT 1.5已经支持java.sql.Date了,呵呵
http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=ReleaseNotes_1_5_JreEmulation
oh.Sorry
最近一直采用1.4做开发,这个改变没有注意。1.5还是有好多方便的地方啊 3 楼 edokeh 2008-12-18 是啊,尤其是1.5支持泛型让我热泪盈眶啊