Java JAXB XmlElementRef查找到整个类路径

Java JAXB XmlElementRef查找到整个类路径,java,spring,jakarta-ee,jaxb,jaxb2,Java,Spring,Jakarta 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 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;
    }
 }
public类RequestWrapper实现可序列化
{
私有列表请求=null;
@xmlementrefs({@xmlementref(type=Class1.class),@xmlementref(type=Class2.class),…等等})
公共列表getRequests()
{
返回请求;
}
}
这个请求类是一个抽象类。项目中的许多类扩展了这个请求类。因此,我不能通过声明许多@XmlElementRef注释来添加代码

这个@XmlElementRefs标记是否可以查找整个类路径,而不是只查找声明的@XmlElementRef


请快速回复此帖子…

使
JAXBContext
了解子类

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

选项#1-
@xmlsee也
注释

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

@XmlSeeAlso({Class1.class, Class2.class})
public class Request {
}
选项#2-在创建
JAXBContext

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

应用
@xmlementref

JAXBContext jc = JAXBContext.newInstance(Class1.class, Class2.class);
只要您的
JAXBContext
知道
Request
的所有子类,就可以将映射简化为以下内容:

@XmlElementRef
public List<Request> getRequests()
{
    return requests;
}
@xmlementref
公共列表getRequests()
{
返回请求;
}

了解更多信息


非常感谢Blaise的快速响应。@KiranT-没有任何版本的JAXB(JSR-222)能够自动检测映射类的子类。您可以潜在地实现一些代码,这些代码接受您希望引导
JAXBContext
的类,然后使用某种机制将其扩展为包含所有子类,然后使用扩展的类数组来构建
JAXBContext
。非常感谢Blaise。。有用的信息。实际上,我也在考虑将自定义类加载器传递给JAXBContect。。