类型绑定 bindings.xml
XML 与 Java 都有自身语言的数据类型,它们大多数是对应的,有时候我们想更改这种映射关系,就需要使用到 bindings.xml
。
如下是一个简单的映射关系,表示将 XML 中的 xs:date
类型映射到 Java 中的 java.util.Calendar
。
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<javaType name="java.util.Calendar" xmlType="xs:date"
parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
printMethod="javax.xml.bind.DatatypeConverter.printDate" />
</globalBindings>
</bindings>
这里使用到了内置的解析函数parseDate
。
- 单个映射文件
xjc book.xsd -b bindings.xml
- 多个映射文件,需要每一个都指定
-b
参数xjc book.xsd -b binding1.xml -b binding2.xml
如果不能满足业务需求,还可以自己实现解析规则:
public class DateAdapter {
public static Date parseDate(String s) {
return DatatypeConverter.parseDate(s).getTime();
}
public static String printDate(Date dt) {
Calendar cal = new GregorianCalendar();
cal.setTime(dt);
return DatatypeConverter.printDate(cal);
}
}
代码置于 com.csdn.jaxb.DateAadpter
,编写自定义mybindings.xml
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<globalBindings>
<javaType name="java.util.Date" xmlType="xs:date"
parseMethod="com.csdn.jaxb.DateAadpter.parseDate"
printMethod="com.csdn.jaxb.DateAdapter.printDate"
/>
</globalBindings>
</binding>
指定为自己定义的映射文件(如果要直接在终端运行,需要配置Java 的 CLASSPATH)
xjc book.xsd -b mybindings.xml