无法从xsd生成java.util.Calendar - 获取XmlGregorianCalendar

问题描述:

是否可以使用xsd文件生成Claendar类型字段的实体?我正在尝试xs:date和xs:dateTime,但仍然获得XMLGregarionCalendar。我正在使用cxf-codegen-plugin和jaxb bninding。 谢谢。 保罗。无法从xsd生成java.util.Calendar - 获取XmlGregorianCalendar

当您生成对象时,您可以使用JAXB绑定文件,如cxf-codegen-plugin documentation的示例7中所示。根据您想使用的类型(日历,日期等),您需要指定一个合适的适配器。为了使用日历,JAXB提供了适配器javax.xml.bind.DatatypeConverter。要使用日期时间,日期和时间使用它时,JAXB绑定文件应该是

<?xml version="1.0" encoding="UTF-8"?> 
<jxb:bindings version="2.1" 
       xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> 

    <jxb:globalBindings> 
     <!-- use Calendar instead of XMLGregorianCalendar --> 
     <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" 
      parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
      printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/> 

     <jxb:javaType name="java.util.Calendar" xmlType="xs:date" 
      parseMethod="javax.xml.bind.DatatypeConverter.parseDate" 
      printMethod="javax.xml.bind.DatatypeConverter.printDate"/> 

     <jxb:javaType name="java.util.Calendar" xmlType="xs:time" 
      parseMethod="javax.xml.bind.DatatypeConverter.parseTime" 
      printMethod="javax.xml.bind.DatatypeConverter.printTime"/> 

    </jxb:globalBindings>   
</jxb:bindings> 

如果你想使用日期代替,CXF在CXF-xjc-提供org.apache.cxf.xjc.runtime.DataTypeAdapter运行。

+0

太谢谢你了!终于解决了! –

大厦帕特里克的答案,这里是XJC相当于:

<jaxb:bindings version="2.1" 
       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xs="http://www.w3.org/2001/XMLSchema" 
       xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> 

    <jaxb:globalBindings> 
     <!-- use Calendar Date instead of XMLGregorianCalendar --> 
     <jaxb:javaType name="java.util.Date" xmlType="xs:dateTime" 
       parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime" 
       printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime"/> 

     <jaxb:javaType name="java.util.Date" xmlType="xs:date" 
       parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate" 
       printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/> 

     <jaxb:javaType name="java.util.Date" xmlType="xs:time" 
       parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseTime" 
       printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printTime"/> 

    </jaxb:globalBindings>   
</jaxb:bindings>