您好,有人可以解释如何解决以下问题。 我有类似的课程结构..
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。
请快速回复此帖...
答案 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;
}
了解更多信息