您的位置:首页 > 其它

Axis2传递date类型参数丢失时分秒

2013-07-25 15:14 344 查看
公司开发的项目用到了web  service,以前也没有接触过,老大说用Axis2实现。刚开始的时候给了我们一个基本的框架(也就是web  service的基本调用),自己不太懂,也就只能照葫芦画瓢,但是这个项目中大量用到了含有时分秒的Date类型的数据。

Axis2传递的参数只能是一些简单类型,Vo,数组等。本来说Date类型是支持的。但是在使用的过程中发现每次Date传到service就变成了yyyy-MM-dd 00:00:00,针对这个问题,有些人建议就是转为String类型处理。但是感觉怪怪的。

这两天想看看Axis2到底是怎么传递数据的。于是在eclipse导入源代码。jar文件右键----》properties----》java source attachmen -----》  选择src文件-----》ok。这样就可以在eclispe里面查看jar文件的源代码了。Axis2传递数据主要在axis2-adb-1.6.1.jar。打开org.apache.axis2.databinding.typemapping.SimpleTypeMapper.class文件可以看到里面定义了很多类型,估计这些就是Axis2支持的数据类型吧。看到309行为: SimpleDateFormat
zulu = new SimpleDateFormat("yyyy-MM-dd");原来Axis2是先将Date类型转为了String类型。而格式为yyyy-MM-dd,看到这里,自然就想到了service端接收到的数据肯定是没有时分秒的。于是我就将yyyy-MM-dd改为了yyyy-MM-ddhh:mm:ss,心想这样就成了。反编译、保存、替换运行结果报错了。In
valid string sufix。于是想,既然将Date转为了自定义的String类型,那么是不是在service接收转不回来了呢?终于SimpleTypeMapper.class下面找到了一个方法:public static Object makeDate(String source) {

                                                   return ConverterUtil.convertToDate(source);

                                        }于是找到ConverterUtil类的convertToDate方法,看了一下这个方法,确实就是将String转回为Date的逻辑。但是怎么会错呢,原来它有字符串格式要求。我那自定义的格式不能识别。赶紧着这个方法进行了一点修改。在反编译、保存、替换,这次终于成功了。

传入new Date()



service 输出含时分秒的Date类型

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Axis2 时分秒