今天发现一个很暴汗的问题!

    今天,一位同事发现一个很郁闷的问题,找我解决。然后我也郁闷了。

    我们为公司本身的应用开发基础平台,平台的功能以webservice形式提供出去,我们使用的是axis1.4和hessian-3.2.0提供服务。

    问题是这样的:

        服务端有一个类,有2个java.util.Date对象,用axis打成客户端为java.util.Calendar对象。如下:

                服务端

  1. private java.util.Date createdate;      // 创建日期
  2. private java.util.Date age;    // 使用期限

              客户端

  1. private java.util.Calendar createdate;
  2. private java.util.Calendar age;

             问题出现:

                 在服务端接口返回的对象中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。如下:

  1. <property name="createdate" column="createdate" type="date"/>
  2. <property name="age" column="age" type="date"/>

            修改为:

  1. <property name="createdate" column="createdate" type="java.sql.Timestamp"/>
  2. <property name="age" column="age" type="java.sql.Timestamp"/>

            再测试,竟然没问题了!!

            得出一个结论:如果使用axis1.4(不知道其他版本如何),则Hiberate中对日期的映射date必须改为java.sql.Timestamp。

                而Hessian则无此问题。

            所以很郁闷,不知道有没有其他人遇到过类似的问题,原理如何,解惑一下?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值