使用外部绑定文件(XJB)将XMLGregorianCalendar更改为Date

时间:2017-03-28 15:40:35

标签: java maven jaxb

在我的maven项目中,我希望我的所有datetime条目都应生成java.util.date而不是XMLGregorianCalendar。您可能知道默认情况下会生成XMLGregorianCalendar

我们可以提供示例项目here

CustomersOrders.xsd 中,您可以看到attriute ShippedDate的类型为dateTime

<xs:attribute name='ShippedDate' type='xs:dateTime' />

要将其数据类型转换为java.util.date,我遵循文档here中提供的方法。即通过使用外部绑定文件,如:

Customer.xjb

<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:datetime"
      parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
      printMethod="javax.xml.bind.DatatypeConverter.printDate"
    />
  </globalBindings>
</bindings>

然后我在Customer.xjb中映射pom.xml文件,如:

<executions>
    <execution>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <!-- the package for the generated java classes -->
            <generatePackage>com.dimitrisli.jaxb.producedClasses</generatePackage>
            <!-- If the following not specified all xsd in resources are included -->
            <schemaIncludes>
                <include>sampleJaxb/CustomersOrders.xsd</include>
            </schemaIncludes>
            <!-- if you don't want old output -->
            <removeOldOutput>true</removeOldOutput>
            <!-- if you want verbosity -->
            <!-- verbose>true</verbose -->

            <xjbSources>
                <xjbSource>sampleJaxb/Customers.xjb</xjbSource>
            </xjbSources>

        </configuration>


    </execution>
</executions>

但是当我mvn clean install时,我仍然无法看到ShippedDate中的任何差异,这仍然是XMLGregorianCalendar生成的。

请建议我缺少什么。

谢谢

1 个答案:

答案 0 :(得分:1)

  1. 如果您使用org.jvnet.jaxb2.maven2:maven-jaxb2-plugin,那么您应该使用bindingIncludes代替xjbSourcesorg.codehaus.mojo:jaxb2-maven-plugin代码)。

    <bindingIncludes>
        <include>sampleJaxb/Customers.xjb</include>
    </bindingIncludes>`
    
  2. 此外,您必须像在教程中看到的那样为java.util.Date实现自定义适配器或转换为java.util.Calendar

    <javaType name="java.util.Calendar" xmlType="xsd:dateTime"
    parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
    printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />`
    
  3. 希望它有所帮助!