使用CXF时,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
来源:互联网 发布:晋中教育网网络教研 编辑:程序博客网 时间:2024/05/22 21:31
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
private XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) {
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
XMLGregorianCalendar gc = null;
try {
gc = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
} catch (DatatypeConfigurationException e) {
LOG
.debug(
"There are some error for convert java.util.Date to XMLGregorianCalendar",
e);
}
return gc;
}
Remark:
由于在使用CXF的 wsdl2java 生成Java客户端时,JAXB(默认)把java.util.Date类型解释为 XMLGregorianCalendar,所以在客户端调用的时候,也需要传入XMLGregorianCalendar参数来对应Date类型,此上是一种解决办法。
----------------------------------------------------------------------------------------------
默认情况下,JAXB将xsd:date, xsd:time, 和xsd:dateTime映射为XMLGregorianCalendar , 对于从java开始构建service的人,很少会直接用到这个类, 一般情况下我们都是用java.util.Date或者java.util.Calendar, 调用apache cxf 的java2wsdl, 我们得到的wsdl 的schema部分是xsd:dateTime, 当你再次调用wsdl2java来生产impl的时候,你会发现这个impl根本无法编译, 因为impl里是用的是XMLGregorianCalendar , 而SEI则是java.util.Date或者java.util.Calendar
那么如何才能使得wsdl2java生产的impl里,也是java.util.Date或者java.util.Calendar呢?
答案就是使用jaxws/jaxb 的customization。jaxb允许我们做数据类型的转换,类javax.xml.bind.DatatypeConverter, 就是用来做这个的。
但是,jaxb只为我们做了xsd:date 到java.util.Calendar, java.util.Date需要自己来完成,好在我已经把这个代码放到了apache cxf里org.apache.cxf.tools.common.DataTypeAdapter
这里给出一个简单的例子,注意jaxb customzation部分是嵌入在schema里的
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
private XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) {
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
XMLGregorianCalendar gc = null;
try {
gc = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
} catch (DatatypeConfigurationException e) {
LOG
.debug(
"There are some error for convert java.util.Date to XMLGregorianCalendar",
e);
}
return gc;
}
Remark:
由于在使用CXF的 wsdl2java 生成Java客户端时,JAXB(默认)把java.util.Date类型解释为 XMLGregorianCalendar,所以在客户端调用的时候,也需要传入XMLGregorianCalendar参数来对应Date类型,此上是一种解决办法。
----------------------------------------------------------------------------------------------
默认情况下,JAXB将xsd:date, xsd:time, 和xsd:dateTime映射为XMLGregorianCalendar , 对于从java开始构建service的人,很少会直接用到这个类, 一般情况下我们都是用java.util.Date或者java.util.Calendar, 调用apache cxf 的java2wsdl, 我们得到的wsdl 的schema部分是xsd:dateTime, 当你再次调用wsdl2java来生产impl的时候,你会发现这个impl根本无法编译, 因为impl里是用的是XMLGregorianCalendar , 而SEI则是java.util.Date或者java.util.Calendar
那么如何才能使得wsdl2java生产的impl里,也是java.util.Date或者java.util.Calendar呢?
答案就是使用jaxws/jaxb 的customization。jaxb允许我们做数据类型的转换,类javax.xml.bind.DatatypeConverter, 就是用来做这个的。
但是,jaxb只为我们做了xsd:date 到java.util.Calendar, java.util.Date需要自己来完成,好在我已经把这个代码放到了apache cxf里org.apache.cxf.tools.common.DataTypeAdapter
这里给出一个简单的例子,注意jaxb customzation部分是嵌入在schema里的
<xs schema elementformdefault="qualified" version="1.0" xmlns xs="http://www.w3.org/2001/XMLSchema" jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" targetnamespace="calendar-schemalet">
<xs annotation> <xs appinfo>
<jaxb globalbindings>
<jaxb javatype name="java.util.Calendar" xmltype="xs:date" parsemethod="javax.xml.bind.DatatypeConverter.parseDate" printmethod="javax.xml.bind.DatatypeConverter.printDate" />
</jaxb globalbindings>
</xs appinfo></xs annotation>
</xs schema>
那么上面这段代码就可以把xsd:date转换为java.util.Calendar了,而且是全局替换
如果你需要转换的schema类型是dateTime, 那么parseMethod 的parseDate就得改成parseDateTime, printMethod 也是类似。
这里再给一个java.util.Date的例子, 假设我们需要映射xsd:time 到java.util.Date,那么我们可以这些写:
<xs schema elementformdefault="qualified" version="1.0" xmlns xs="http://www.w3.org/2001/XMLSchema" jaxb="http://java.sun.com/xml/ns/jaxb" version="2.0" targetnamespace="calendar-schemalet">
<xs annotation> <xs appinfo>
<jaxb globalbindings>
<jaxb javatype name="java.util.Date" xmltype="xs:time" parsemethod="org.apache.cxf.tools.common.DataTypeAdapter.parseTime" printmethod="org.apache.cxf.tools.common.DataTypeAdapter.printTime" />
</jaxb globalbindings>
</xs appinfo></xs annotation>
</xs schema>
- 使用CXF时,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
- CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
- CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
- Java WebService把Date类型转换成XMLGregorianCalendar
- CXF全接触(八) --- 使用wsdl2java时转换XMLGregorianCalendar为Date
- 将date类型的数据转换成XMLGregorianCalendar
- cxf 客户端 Date XMLGregorianCalendar
- XMLGregorianCalendar与Date的类型相互转换
- XMLGregorianCalendar与Date的类型相互转换
- Date 和 XMLGregorianCalendar 转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- 把Date对象转为XMLGregorianCalendar
- XMLGregorianCalendar和Date的转换
- JS把字符串转换成Date类型
- Java把date类型转换成long
- XMLGregorianCalendar日期类型与Date(java.util.*)日期类型之间相互转换
- Program E的Flash前端
- Struts实现图片上传
- The run order about Loaded event and OnApplyTemplate in custom control of Silverlight 2 beta 2
- Welcome, Kevin & his friends
- informix存储过程中的截取字符串、取当天日期
- 使用CXF时,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
- Java研习计划
- 开发之准备:为目标设备创建映像
- 流行AJAX框架大比拼
- script 乱码问题
- ACE中网络通讯编程基本架构
- .net换肤
- IC设计流程
- wps学习感悟