1

嗨,有人可以解释如何解决以下问题。我有这样的班级结构..

 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。

请尽快回复此帖...

4

1 回答 1

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

了解更多信息

于 2012-09-26T10:28:36.830 回答