我有一个XML文件,格式如下所述。我目前正在使用JAXB将XML元素(event
)解组为Java对象(Event
)。所有房产都很好,除了一个......
正如您在XML中看到的那样,date
元素仅存储 日期,而time
只存储 事件的时间。我想将这两个XML元素组合成一个名为time
的 LocalDataTime 字段,并使用适当的getter和setter。
XML:
...
<event>
...
<date>2014-02-19</date>
<time>2000-01-01T14:17:00Z</time>
...
</event>
...
所需的Java对象:
public class Event {
...
// Returns a combination of the date and time stored in the XML
public LocalDateTime getDateTime() {
return dateTime;
}
...
}
我的第一个想法是使用XMLAdapter
,但似乎这只允许我将1个XML元素映射到1个Java对象。
之后,我尝试通过覆盖设置者setTime
和setDate
来实现此目的。这些setter每个只会改变存储时间的时间或日期。但是我无法让它工作,这似乎是一种非常难看的方式。
我已阅读以下JAXB convert multiple attributes to one type while unmarshalling。但对于这个项目,我宁愿不使用像MOXy这样的外部库。
是否有人知道如何使用 clean 方式单独使用JAXB?
答案 0 :(得分:1)
您可以在Event对象生命周期方法中定义:
void afterUnmarshal(Unmarshaller unm, Object parent) {
localDateTime = ....
};
boolean beforeMarshal(Marshaller mar) {
date = localDateTime.toDate();
....
};
在解组(使用日期和时间值)之后构造LocalDateTime属性,并在使用当前LocaLDateTime值进行编组之前准备日期/时间字段。 您仍然需要时间/日期字段来匹配xml,而localDateTime字段必须是XmlTransient。所以它与set / getter方法没那么不同,但可能更“干净”。