在我的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
生成的。
请建议我缺少什么。
谢谢
答案 0 :(得分:1)
如果您使用org.jvnet.jaxb2.maven2:maven-jaxb2-plugin
,那么您应该使用bindingIncludes
代替xjbSources
(org.codehaus.mojo:jaxb2-maven-plugin
代码)。
<bindingIncludes>
<include>sampleJaxb/Customers.xjb</include>
</bindingIncludes>`
此外,您必须像在教程中看到的那样为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" />`
希望它有所帮助!