2014-12-05 57 views
5

我與數據類型的豆:如何java.time.Duration映射到XML

private java.time.Duration duration 

類的屬性被設置這樣的:

object.setDuration(Duration.ofSeconds(2)); 

我想馬歇爾我的對象XML使得持續時間看起來像

<duration>PT2S</duration> 

限定ISO 8601

據我瞭解,JAXB使用default binding data types,如:

xsd:duration javax.xml.datatype.Duration 

但在我的豆我不想包含任何XML的依賴。

我看到寫的包裝,我可以添加一個XmlAdapter的可能性,但我不知道該怎麼java.time.Duration轉化爲javax.xml.datatype.Duration中

回答

6

我發現通過搜索圍繞API進行檢查。這裏是我的代碼:

import java.time.Duration 
import javax.xml.bind.annotation.adapters.XmlAdapter; 
import javax.xml.datatype.DatatypeFactory; 

public class DurationAdapter extends XmlAdapter<javax.xml.datatype.Duration, Duration> 
{ 
    @Override 
    public Duration unmarshal(javax.xml.datatype.Duration v) throws Exception { 
     return Duration.parse(v.toString()); 
    } 

    @Override 
    public javax.xml.datatype.Duration marshal(Duration v) throws Exception { 
     return DatatypeFactory.newInstance().newDuration(v.toString()); 
    } 
} 
1

我發現這個適配器的實現上GitHub。除了Duration它還有其他java.time.*類型,如InstantPeriod

唯一的缺點是編組使用字符串,而不是相應的javax.xml.datatype.*

+0

我明白了,我的改進版本是:https://github.com/migesok/jaxb-java-time-adapters/blob/master/src/main/java/com/migesok/jaxb/adapter/ javatime/DurationXmlAdapter.java – 2016-01-25 13:21:26