默认情况下,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>
分享到:
相关推荐
1. **`java.util.prefs`包**:从Java 1.4开始,Java内置了`java.util.prefs`包,提供了简单的首选项存储,包括属性文件和Windows注册表。但因为其功能有限,且不适用于复杂的配置场景,所以使用并不广泛。 2. **...
10. **Java的XML处理API**:如`java.io.FileReader`、`java.util.Properties`和`javax.xml.parsers`包下的各种类,用于读取、解析和处理XML文件。 这个作业例子可能包含了上述一种或多种技术的运用,通过分析源代码...
8. **XML处理工具**:Java还提供了诸如`java.io.FileReader`、`java.io.FileWriter`、`java.net.URL`等工具类,帮助读写XML文件,以及`java.util.Properties`类用于XML格式的配置文件。 9. **Spring框架中的XML配置...
通过注解或绑定文件,JAXB可以将XML文档转换为Java对象,反之亦然。`javax.xml.bind.JAXBContext`和`javax.xml.bind.Marshaller/Unmarshaller`是主要组件。JAXB特别适用于处理复杂的数据结构和XML文档。 5. XML ...
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...
1. **JAXB**:主要用于对象与XML之间的绑定,通过注解或配置文件将Java对象自动转换为XML,反之亦然。适合于对象结构与XML结构相对应的情况,且数据量适中,因为它会创建整个对象树,内存消耗较大。 2. **DOM**:这...