且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-02-18 23:27:45

当您生成对象时,您可以使用 JAXB 绑定文件,如 cxf-codegen-plugin 文档.根据您要使用的类型(日历、日期等),您需要指定适当的适配器.为了使用 Calendar,JAXB 提供了适配器 javax.xml.bind.DatatypeConverter.要将它与 dateTime、日期和时间一起使用,JAXB 绑定文件应该是

When you generate your objects you can use a JAXB binding file, as demonstrated in Example 7 of the cxf-codegen-plugin documentation. Depending on what type you want to use (Calendar, Date, etc.), you will need to specify an appropriate adapter. To use Calendar, JAXB provides the adapter javax.xml.bind.DatatypeConverter. To use it with dateTime, date, and time, the JAXB bindings file should be

<?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>

如果你想使用 Date 代替,CXF 在 cxf-xjc-runtime 中提供了 org.apache.cxf.xjc.runtime.DataTypeAdapter.

If you want to use Date instead, CXF provides org.apache.cxf.xjc.runtime.DataTypeAdapter in cxf-xjc-runtime.