转换 xs:date 到 java.util.Date 的Tips

转换 xs:date 到 java.util.Date 的Tips
如果想 JAXB 2.0 XJC 映射 xs:date 到 java.util.Date
最简单的方法是直接更改生成的代码, 找到所有XMLGregorianCalendar 然后用Date 替换. 如果有好的IDE工具很容易做到, 但这只对schema不常改动有用,否则每次都要做替换.

如果想让XJC生成正确的东西, 需要做customization
< xs:schema  elementFormDefault ="qualified"  version ="1.0"  xmlns:xs ="http://www.w3.org/2001/XMLSchema"  xmlns:jaxb ="http://java.sun.com/xml/ns/jaxb"  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 >
javaType 会做到, 上面是把xs:date 映射到 Calendar类型, 如果要映射到Date, 需要定义一对静态方法去转换 XML string 和 Date. 下面是转换代码
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);
  }

}
替换上面 parse/print 方面就可以了
< xs:schema  elementFormDefault ="qualified"  version ="1.0"  xmlns:xs ="http://www.w3.org/2001/XMLSchema"  xmlns:jaxb ="http://java.sun.com/xml/ns/jaxb"  jaxb:version ="2.0"  targetNamespace ="calendar-schemalet" >
  
< xs:annotation >< xs:appinfo >
    
< jaxb:globalBindings >
      
< jaxb:javaType  name ="java.util.Date"  xmlType ="xs:date"
        parseMethod
="DateAdapter.parseDate"
        printMethod
="DateAdapter.printDate"
        
/>
    
</ jaxb:globalBindings >
  
</ xs:appinfo ></ xs:annotation >
</ xs:schema >

你可能感兴趣的:(转换 xs:date 到 java.util.Date 的Tips)