`
maomaode
  • 浏览: 122678 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAXB如何将Schema日期类型xsd:date映射为java.util.Date

    博客分类:
  • JAVA
阅读更多
默认情况下,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呢?

<link rel="stylesheet" type="text/css" href="http://maomaode.bokeland.com/plugins/plogeshi/styles/plogeshi.css">答案就是使用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>
 

分享到:
评论
2 楼 nile60bbt 2009-12-19  
显示不全, 再发

<jaxb:javaType name="java.util.Date" xmlType="xsd:date" parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseTime" printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printTime"/>
1 楼 nile60bbt 2009-12-19  
<jaxb:javaType name="java.util.Date" xmlType="xsd:date" parseMethod="org.apache.cxf.tools.common.DataTypeAdapter.parseTime" printMethod="org.apache.cxf.tools.common.DataTypeAdapter.printTime"/>

相关推荐

    用JAXB来实现Java程序配置的简单方法

    1. **`java.util.prefs`包**:从Java 1.4开始,Java内置了`java.util.prefs`包,提供了简单的首选项存储,包括属性文件和Windows注册表。但因为其功能有限,且不适用于复杂的配置场景,所以使用并不广泛。 2. **...

    java+xml联合编程简单例子

    10. **Java的XML处理API**:如`java.io.FileReader`、`java.util.Properties`和`javax.xml.parsers`包下的各种类,用于读取、解析和处理XML文件。 这个作业例子可能包含了上述一种或多种技术的运用,通过分析源代码...

    XML JAVA指南

    8. **XML处理工具**:Java还提供了诸如`java.io.FileReader`、`java.io.FileWriter`、`java.net.URL`等工具类,帮助读写XML文件,以及`java.util.Properties`类用于XML格式的配置文件。 9. **Spring框架中的XML配置...

    JAVA XML 解析

    通过注解或绑定文件,JAXB可以将XML文档转换为Java对象,反之亦然。`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller/Unmarshaller`是主要组件。JAXB特别适用于处理复杂的数据结构和XML文档。 5. XML ...

    Xml本地格式化工具(Java代码显示,图形操作)

    import javax.xml.bind.util.ValidationEventHandler; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException...

    Java 读写XML总结

    1. **JAXB**:主要用于对象与XML之间的绑定,通过注解或配置文件将Java对象自动转换为XML,反之亦然。适合于对象结构与XML结构相对应的情况,且数据量适中,因为它会创建整个对象树,内存消耗较大。 2. **DOM**:这...

Global site tag (gtag.js) - Google Analytics