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

 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。

请快速回复此帖子...

最佳答案

使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;
}




了解更多信息


http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html

07-28 02:09