我有一个数据类型的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
答案 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.*
类型,例如Instant
和Period
。
唯一的缺点是编组使用字符串而不是相应的javax.xml.datatype.*
。