`
js_hum
  • 浏览: 17424 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

xFire与java间Date之间的转换

 
阅读更多

org.codehaus.xfire.fault.XFireFault: java.util.Date 

下面是从别人那里转过来的:

在用XFire做的webservice测试项目中,有一个方法是传递java.util.Date参数,并返加在一个Date参数,

但这个方法在客户端调用的时候却报错了:
org.codehaus.xfire.fault.XFireFault: java.util.Date cannot be cast to javax.xml.datatype.XMLGregorianCalendar

在网上找了很多资料,但没有一个是说到点子上的,
我分析了一下,这个错误首先是由Date类型转换成XMLGregorianCalendar类型的时候报错,
在WSDL中,Date类型会被描述成XMLGregorianCalendar类型,于是我的解决思路便出来了。
只要我们调用方法的时候将日期类型先转换成XMLGregorianCalendar类型,返回值也相应的由XMLGregorianCalendar类型转回Date类型就行了。
webservice方法:
public Object testDate(Date date) {
//返回日期下一天
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
return calendar.getTime();
}
//客户端调用:
Client client = WebServiceContainer.getInstance().getClientHashMap().get(
WebServiceContainer.getInstance().getMethodHashMap().get(methodName));
Object[] result = client.invoke("testDate", new Object[] { getXMLGregorianCalendar(date) });
//输出返回结果:
System.out.println(getDateFromXMLGregorianCalendar((XMLGregorianCalendar)returnObject[0]).toLocaleString());

//XMLGregorianCalendar 与 Date 转换的方法
public static javax.xml.datatype.XMLGregorianCalendar getXMLGregorianCalendar(
java.util.Date date) throws Exception {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
javax.xml.datatype.DatatypeFactory dtf = javax.xml.datatype.DatatypeFactory
.newInstance();
return dtf.newXMLGregorianCalendar(calendar.get(calendar.YEAR),
calendar.get(calendar.MONTH) + 1, calendar
.get(calendar.DAY_OF_MONTH), calendar
.get(calendar.HOUR), calendar.get(calendar.MINUTE),
calendar.get(calendar.SECOND), calendar
.get(calendar.MILLISECOND), calendar
.get(calendar.ZONE_OFFSET)
/ (1000 * 60));
}
public static Date getDateFromXMLGregorianCalendar(XMLGregorianCalendar cal) {
return cal.toGregorianCalendar().getTime();
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics