今天发现一个很暴汗的问题!
????今天,一位同事发现一个很郁闷的问题,找我解决。然后我也郁闷了。 ????我们为公司本身的应用开发基础平台,平台的功能以webservice形式提供出去,我们使用的是axis1.4和hessian-3.2.0提供服务。 ????问题是这样的: ????????服务端有一个类,有2个java.util.Date对象,用axis打成客户端为java.util.Calendar对象。如下: ????????????????服务端
????????????? 客户端
???????????? 问题出现: ?????????????????在服务端接口返回的对象中createdate=2017-04-13、age=2058-04-15。而客户端得到的对象中createdate=2058-04-15、age=2058-04-15。 ???????????????当时立刻换用Hessian协议来测试,发现无此问题。第一个反应就是axis在客户端的对象赋值过程中有bug(对axis真是很不看好。。之前用1.3版本出现其他严重的bug,另找时间说下。)。在生成的客户端代码中设置断点在setCreatedate(Calendar date1)和setAge(Calendar date2),调试。果然发现date1和date2都指向内存中的同一个Calendar对象。到这一步已经有点无语了,然后本着先怀疑自身的原则,再去测试工作流平台的代码(另外个平台,场景相同);发现竟然没有问题,很惊讶,然后对比2边的代码。最后只在Hiberate的映射上有点区别。在这个平台中对日期对象的映射为date,而工作流平台中映射为java.sql.Timestamp。如下:
????????????修改为:
????????????再测试,竟然没问题了!! ????????????得出一个结论:如果使用axis1.4(不知道其他版本如何),则Hiberate中对日期的映射date必须改为java.sql.Timestamp。 ????????????????而Hessian则无此问题。 ????????????所以很郁闷,不知道有没有其他人遇到过类似的问题,原理如何,解惑一下? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |