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

joh*_*ode 6 xsd wsdl cxf jaxb

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

Pat*_*ick 10

生成对象时,可以使用JAXB绑定文件,如cxf-codegen-plugin文档的示例7中所示.根据您要使用的类型(日历,日期等),您需要指定适当的适配器.要使用Calendar,JAXB提供适配器javax.xml.bind.DatatypeConverter.要将其与dateTime,date和time一起使用,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>
Run Code Online (Sandbox Code Playgroud)

如果要使用Date,CXF在cxf-xjc-runtime中提供org.apache.cxf.xjc.runtime.DataTypeAdapter.