CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
来源:互联网 发布:上瘾1-18网络剧 编辑:程序博客网 时间:2024/05/23 00:06
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需要自己来完成,好在我已经把这个代码放到了apachecxf里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
- 将date类型的数据转换成XMLGregorianCalendar
- cxf 客户端 Date XMLGregorianCalendar
- XMLGregorianCalendar与Date的类型相互转换
- XMLGregorianCalendar与Date的类型相互转换
- Date 和 XMLGregorianCalendar 转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- XMLGregorianCalendar类型和Date类型之间的相互转换
- 把Date对象转为XMLGregorianCalendar
- XMLGregorianCalendar和Date的转换
- CXF全接触(八) --- 使用wsdl2java时转换XMLGregorianCalendar为Date
- JS把字符串转换成Date类型
- Java把date类型转换成long
- XMLGregorianCalendar日期类型与Date(java.util.*)日期类型之间相互转换
- mysqli的扩展函数
- Spring配置中出现的基本类型和集合
- 管道通信
- MyEclipse编译后,classes目录下没有类文件,也没有目录和配置文件
- LinuxI2C总线驱动大致框架
- CXF ,在Client端用于把 Date 类型转换成 XMLGregorianCalendar
- UIView 动画的两种编程方式
- Toast
- Xcode 4 免证书开发调试 来源:Xcode 3.2.5免证书开发调试
- 在 Java 中使用 AES 加密算法 .
- That 'Internet of Things' Thing
- Oracle数据库表关联的一条准则
- javaTest12
- INPUT 子系统经典文章