包级别的XmlJavaTypeAdapter不起作用

时间:2016-03-09 10:47:54

标签: java jaxb

我的package-info.java中有以下内容:

@XmlJavaTypeAdapters({
    @XmlJavaTypeAdapter(type=OffsetDateTime.class, value=OffsetDateTimeAdapter.class)
})
package java.time;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;

以及以下作为适配器:

package java.time;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class OffsetDateTimeAdapter extends XmlAdapter<String, OffsetDateTime> {

    @Override
    public OffsetDateTime unmarshal(String v) throws Exception {
        return OffsetDateTime.parse(v);
    }

    @Override
    public String marshal(OffsetDateTime v) throws Exception {
        return v.toString();
    }
}

但是当我做以下事情时:

    JAXBContext jc = JAXBContext.newInstance(Root.class);

    Unmarshaller unmarshaller = jc.createUnmarshaller();
    JAXBElement<Root> rootElement = unmarshaller.unmarshal(node, Root.class);

我得到以下内容:

  

com.sun.xml.internal.bind.v2.ClassFactory create0 INFO:在类java.time.OffsetDateTime上找不到默认构造函数

我的设置中是否缺少某些内容 - 它没有调用我的适配器?

1 个答案:

答案 0 :(得分:0)

java.time不是应该包含的包。注释必须引用用户空间中的包和类。

将package-info.java和OffsetDateTimeAdapter放入Root及其子项所在的包中。