我知道JAXB (Java Architecture for XML Binding)可以编组/解组 java.util.Date 对象,正如Blaise Doughan 在这个答案中看到的那样。
但是Java 8中新的java.time 包对象呢,比如?JAXB 是否已更新以处理这种新的内置数据类型?ZonedDateTime
我知道JAXB (Java Architecture for XML Binding)可以编组/解组 java.util.Date 对象,正如Blaise Doughan 在这个答案中看到的那样。
但是Java 8中新的java.time 包对象呢,比如?JAXB 是否已更新以处理这种新的内置数据类型?ZonedDateTime
在 Java SE 8 中,JAXB 尚未更新以支持java.time类型。
实际上,在参考实现中存在与此相关的问题。
您需要创建并使用 anXmlAdapter
来处理这些类型。使用类似于本贴文 JAXB 和 Joda-Time: Dates and Times 中所述的Joda -Time方法。
您也许可以将适配器的此实现用于java.time。
我们无法使用已接受答案中链接的库,因为它掩盖了一个重要细节:在 XML Schema 中,日期/时间值允许缺少时区偏移量。适配器必须能够处理这种情况。此外,必须支持 Java 没有仅日期数据类型这一事实。
jTextTime 库解决了这个问题。
该库围绕 JDK8OffsetXXX
日期/时间类,因为它们是 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
....
}
}
如果您不想单独注释每个类,那么您可以使用包级注释,如此处所述。
如果您使用 xjc 工具从 XSD 文件生成 Java 类,那么这也将得到解释。