java - JAXB 中的 XmlAdaptar

标签 java jaxb jaxb2 moxy

我有以下Enum类:

@XmlJavaTypeAdapter(value = PastMedicalHistoryAdapter.class)
public enum PastMedicalHistory {
    Diabetes, Obesity, Smoking, COPD, CAD, PVD, Other
}

和通用适配器:

public abstract class GenericEnumAdapter<T extends Enum> extends XmlAdapter<String, Enum> {

    @Override
    public Enum unmarshal(String v) throws Exception {
        log.info("unmarshal: {}", v);
        return convert(v + "");
    }

    public abstract T convert(String value);

    @Override
    public String marshal(Enum v) throws Exception {
        log.info("marshal: {}", v.name());
        String s = "{\"" + v.name() + "\":" + true + "}";
        return s;
    }
}

和基本实现

public class PastMedicalHistoryAdapter extends GenericEnumAdapter<PastMedicalHistory> {
    @Override
    public PastMedicalHistory convert(String value) {
        return PastMedicalHistory.valueOf(value);
    }
}

我这样使用它:

@Data
@XmlRootElement(name = "Patient")
public class Test {

    private List<PastMedicalHistory> history;


    public static void main(String[] args) throws Exception {
        JAXBContext cxt = JAXBContext.newInstance(Test.class);
        Marshaller mar = cxt.createMarshaller();
        mar.setProperty(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        mar.setProperty(JAXBContextProperties.MEDIA_TYPE, "application/json");
        mar.setProperty(JAXBContextProperties.JSON_INCLUDE_ROOT, Boolean.FALSE);
        Test t = new Test();
        t.setHistory(Arrays.asList(PastMedicalHistory.CAD, PastMedicalHistory.Diabetes));
        mar.marshal(t, System.out);
    }
}

问题是历史记录的输出始终为空,如下所示:

[exec:exec]
2013-09-29 12:13:18:511 INFO marshal: CAD
2013-09-29 12:13:18:522 INFO marshal: Diabetes
{
   "history" : [ null, null ]
}

我使用 Moxy 2.5.1 作为 JAXB 提供程序,那么我缺少什么,或者我做错了什么?

最佳答案

注意:我是EclipseLink JAXB (MOXy) JAXB (JSR-222) 的领导者和成员专家组。

我已经能够重现您遇到的错误。您可以使用以下链接跟踪我们在此问题上的进展:

关于java - JAXB 中的 XmlAdaptar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076339/

相关文章:

java - 使用正则表达式解析地址

java - 返回数组java中的唯一数字

rest - 如何在 CXF 中向 JAXBContext 添加其他类

java - 从流中过滤/删除无效的 xml 字符

java - @XmlElements 标有@XmlJavaTypeAdapters?

java - LWJGL NVIDIA 驱动问题

java - 在小型应用程序中工作时使用 Maven Multimodule 有什么好处吗?

java - JAXB 更改服务器上的 XML 顺序,但不更改本地主机上的 XML 顺序

jaxb - 为什么 CXF/JAXB 在编码到 SOAP 消息之前将整个 InputStream 读入内存

java - JAXB 解码未知 XML 内容的子集