我知道JAXB (Java Architecture for XML Binding)可以编组/解组java.util.Date对象,如this answer by Blaise Doughan中所示。
但是java.time package中的新Java 8对象呢,例如ZonedDateTime
? JAXB是否已更新以处理这种新的内置数据类型?
答案 0 :(得分:22)
在Java SE 8中,尚未更新JAXB以支持 java.time 类型。
实际上,在参考实现中有一个issue与此相关。
您需要创建并使用XmlAdapter
来处理这些类型。使用与此帖子Joda-Time中描述的JAXB and Joda-Time: Dates and Times类似的方法。
答案 1 :(得分:0)
我们无法使用接受的答案中链接的库,因为它掩盖了一个重要的细节:在XML Schema中,日期/时间值允许缺少时区偏移量。适配器必须能够处理这种情况。另外,必须支持Java没有仅日期数据类型的事实。
jTextTime library解决了这个问题。
该库围绕JDK8 OffsetXXX
日期/时间类,因为它们是XML模式类型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。