JAXB XmlElementRef查找整个类路径

时间:2012-09-26 10:12:45

标签: java spring java-ee jaxb jaxb2

您好,有人可以解释如何解决以下问题。 我有类似的课程结构..

 public class RequestWrapper implements Seriallizable
 {
    private List<Request> requests = null;
    @XmlElementRefs( { @XmlElementRef(type = Class1.class), @XmlElementRef(type = Class2.class), .. And so on } )
    public List<Request> getRequests()
    {
        return requests;
    }
 }

此Request类是一个Abstract类。项目中的许多类扩展了此Request类。出于这个原因,我无法通过声明许多@XmlElementRef注释来添加代码。

这个@XmlElementRefs标记有没有办法查找整个类路径,而不是只查看声明的@XmlElementRef。

请快速回复此帖...

1 个答案:

答案 0 :(得分:2)

JAXBContext意识到子类

JAXB (JSR-222)实现无法通过反射或扫描类路径来确定映射类型的子类。您需要明确告诉JAXB包含它们。这可以通过以下方式之一完成。

选项#1 - @XmlSeeAlso注释

@XmlSeeAlso注释是一种机制,您可以在映射的类中利用该机制来包含其他类。这通常用于引入JAXB应视为映射类的任何子类。

@XmlSeeAlso({Class1.class, Class2.class})
public class Request {
}

选项#2 - 在创建JAXBContext 时包含它们

JAXBContext jc = JAXBContext.newInstance(Class1.class, Class2.class);

应用@XmlElementRef

只要您的JAXBContext了解Request的所有子条款,您就可以将映射简化为以下内容:

@XmlElementRef
public List<Request> getRequests()
{
    return requests;
}

了解更多信息