我知道JAXB (Java Architecture for XML Binding)可以编组/解组java.util.Date对象,如this answer by Blaise Doughan中所示。
但是java.time package中新的Java 8物体怎么样,比如ZonedDateTime
? JAXB是否已更新以处理这种新的内置数据类型?
在Java SE 8中,JAXB尚未更新以支持java.time类型。
实际上,在参考实现中存在与此相关的issue。
您需要创建并使用XmlAdapter
来处理这些类型。使用类似于Joda-Time所做的方法,如本文所述,JAXB and Joda-Time: Dates and Times。
我们无法使用在接受的答案中链接的库,因为它掩盖了一个重要的细节:在XML Schema日期/时间值允许缺少时区偏移。适配器必须能够处理这种情况。此外,必须支持Java不具有仅日期数据类型的事实。
jTextTime library解决了这个问题。
该库围绕JDK8 OffsetXXX
日期/时间类,因为这些是XML Schema类型date
,dateTime
和time
的(唯一)自然等价物。
使用这样:
添加依赖:
<dependency>
<groupId>com.addicticks.oss</groupId>
<artifactId>jtexttime</artifactId>
<version> ... latest ...</version>
</dependency>
注释您的类:
public class Customer {
@XmlElement
@XmlJavaTypeAdapter(OffsetDateTimeXmlAdapter.class)
@XmlSchemaType(name="dateTime")
public OffsetDateTime getLastOrderTime() {
....
}
@XmlElement
@XmlJavaTypeAdapter(OffsetDateXmlAdapter.class)
@XmlSchemaType(name="date")
public OffsetDateTime getDateOfBirth() { // returns a date-only value
....
}
}
如果您不想单独注释每个类,那么您可以使用包级别注释,如here所述。
如果使用xjc工具从XSD文件生成Java类,那么这就是also explained。