加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 02:38:04 所属栏目:安全 来源:网络整理
导读:????今天,一位同事发现一个很郁闷的问题,找我解决。然后我也郁闷了。 ???? 我们为公司本身的应用开发基础平台,平台的功能以webservice形式提供出去,我们使用的是axis1.4和hessian-3.2.0提供服务。 ????问题是这样的: ????????服务端有一个类,有2个java

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

????我们为公司本身的应用开发基础平台,平台的功能以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则无此问题。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读