如何将java.time.Duration映射到XML

时间:2014-12-05 10:44:24

标签: java xml jaxb java-8 java-time

我有一个数据类型的bean:

private java.time.Duration duration

class属性设置如下:

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

我想将我的对象编组为xml,以便持续时间看起来像

<duration>PT2S</duration>

定义为ISO 8601

据我了解,Jaxb使用default binding data types之类的:

xsd:duration    javax.xml.datatype.Duration

但在我的bean中,我不想包含任何xml依赖项。

我看到编写包装器的可能性,我可以在其中添加XmlAdapter,但我不知道如何将java.time.Duration转换为javax.xml.datatype.Duration

2 个答案:

答案 0 :(得分:7)

我通过搜索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 :(得分:1)

我在GitHub找到了此适配器的实现。除了Duration之外,它还有其他java.time.*类型,例如InstantPeriod

唯一的缺点是编组使用字符串而不是相应的javax.xml.datatype.*