`
maomaode
  • 浏览: 120588 次
  • 性别: 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"/>

相关推荐

    java.lang.ClassNotFoundException异常的解决1

    在Java 6、7和8中,Java平台的标准版(Java SE)包含了Java企业版(Java EE)的一些API,如JAXB(Java Architecture for XML Binding)。然而,从Java 9开始,为了实现模块化并提高系统的可维护性和安全性,Java EE...

    JAXB 利用xsd文件生成java类

    XSD元素、属性和复杂类型将映射为Java类的字段和方法。 2. **JAXB绑定过程**: - **编译XSD到Java类**:使用JAXB的`xjc`工具,可以将XSD文件转换为Java源代码。`xjc`命令行工具通常包含在JDK中,也可以通过Maven或...

    用jaxb自动生成xsd对像

    当你需要在XML与Java类之间进行数据交换时,JAXB提供了一种自动化的机制,可以将XML Schema (XSD) 文件转换为Java类,反之亦然。这个过程被称为“绑定”或“反绑定”。 标题“用jaxb自动生成xsd对像”指的是利用...

    根据xsd批量生成java类

    根据xsd批量生成java类,觉得很方便也很酷。但是有时候xsd生成的java类中含有汉字,结果总是有些问题。 可是xjc命令参数又没有encoding参数之类的。在网上搜了一通,忽然发现了一个好东东:xjc是由...

    JAVA高级编程中Enum枚举

    在Java编程语言中,`Enum`(枚举)是一种特殊的类类型,用于定义固定的、预定义的常量集合。它们在程序设计中扮演着重要的角色,特别是在需要表示一组固定值时,如状态、颜色、星期等。本资源包提供了一些关于`Enum`...

    JAXB的安装包及插件

    **JAXB(Java Architecture for XML Binding)** 是Java平台中用于XML到Java对象绑定的API,它是Java EE和Java SE标准的一部分,允许开发者在Java应用程序中方便地将XML数据转换为Java对象,反之亦然。这个过程极大...

    Java常用工具类集合

    `java.util.Calendar`和`java.util.Date`是早期的日期时间API,虽然现在推荐使用新的`java.time` API,但在许多遗留系统中仍然广泛使用。 3. **图像处理**:Java的`javax.imageio`包提供了图像输入/输出功能。`...

    java.lang.NoSuchMethodException: .getPortClassMap()

    - **JAXB**:Java Architecture for XML Binding,用于在Java对象和XML数据之间进行映射,便于数据交换。 理解并掌握这些概念有助于理解和解决`NoSuchMethodException` 类似的问题。在遇到此类问题时,务必细心排查...

    java工具类

    2. **日期时间**:`java.util.Date`和`java.util.Calendar`是Java的基础日期时间类,但它们的API设计并不理想。`java.time`包(自Java 8引入)提供了更友好的`LocalDate`、`LocalTime`和`LocalDateTime`等类,而`...

    castor1.4 xsd生成java

    在XML Schema(XSD)广泛应用于定义XML数据结构的今天,Castor提供了一个方便的方法,将XSD文件自动转化为Java类,使得开发者能够更轻松地处理XML数据。以下是关于"Castor 1.4 xsd生成java"的相关知识点: 1. **...

    [转载] JAXB中Java对象和XML之间的转换

    JAXB允许我们将Java类与XML Schema定义的元素和类型绑定,从而实现XML的序列化和反序列化。 在Java对象和XML之间的转换过程中,JAXB主要涉及到以下几个关键概念: 1. **Java类与XML Schema绑定**: JAXB使用`@...

    jaxb-2_1_9.zip

    java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI (from jar:file://build/web/WEB-INF/lib/jaxb-impl.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class...

    JAXB工具类 xml转为java对象 java对象转为xml

    JAXB提供了一种自动化的机制,将XML Schema(XSD)映射到Java类,反之亦然。这允许开发者在Java应用中存储和序列化数据为XML格式,同时保持代码的简洁性和可维护性。JAXB的核心组件包括: 1. **Unmarshaller**: ...

    使用jaxb根据xsd生成xml文档

    JAXB(Java Architecture for XML Binding)是Java平台标准的一部分,它提供了一种将Java对象转换为XML文档以及从XML数据恢复Java对象的机制。本篇将详细讲解如何利用JAXB根据XSD(XML Schema Definition)文件生成...

    java根据xml生成schema_xsd_生成javabean

    2. XSD到JavaBean的生成:生成JavaBean是将XSD文件中的元素和属性映射为Java类的过程,这有助于在Java应用程序中操作XML数据。通常,开发者会使用命令行脚本或者库来完成这个任务。例如,`createPro_Xsd.bat`和`...

    JAVA_API1.6文档(中文)

    javax.sql.rowset.serial 提供实用工具类,允许 SQL 类型与 Java 编程语言数据类型之间的可序列化映射关系。 javax.sql.rowset.spi 第三方供应商在其同步提供者的实现中必须使用的标准类和接口。 javax.swing 提供...

    jakarta.xml.bind-api-2.3.2-API文档-中英对照版.zip

    标签:jakarta、xml、bind、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    jaxb (XML操作)

    1. **绑定(Binding)**:JAXB通过绑定文件(一般为.xjb或绑定注解)将XML Schema(XSD)或者Java类与Java类结构关联起来。这个过程创建了一个Java类模型,其中每个XML元素和属性都对应Java类的字段或方法。 2. **...

    java生成xsd,xml示例

    使用Unmarshaller可以将XML数据解析为Java对象,而使用工具如JAXB或XML Schema Tools则可以生成XSD文件。 在提供的压缩包文件`xml_test`中,可能包含了用于演示如何生成XML和XSD的Java代码和样例文件。通过阅读和...

    JAVA API1.6中文文档.CHM

    JAVA API 1.6中文文档是Java开发人员的重要参考资料,它包含了Java 1.6版本的所有公共类、接口、枚举、注解及其方法的详细说明。这份文档以CHM(Microsoft Compiled HTML Help)格式提供,便于离线浏览和搜索。CHM...

Global site tag (gtag.js) - Google Analytics