您好,有人可以解释如何解决以下问题。
我有这样的课程结构..
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