【发布时间】:2017-07-12 15:09:56
【问题描述】:
有以下情况: 具有 List 字段的类,例如:
@XMLType
@XMLAccessType(XMLAccessorType.FIELD)
@XMLRootElement(name = "container")
public class ListContainer {
@XMLElementWrapper(name="elements")
private List<Element> elements = new ArrayList<>();
....
}
Element 类是带有 @XMLRootElement 注释的抽象 JAXB 注释类,例如:
@XMLType
@XMLRootElemenent
public abstract class Element {
....
}
这些类定义了某种框架,用户可以在自己的 JAR 包中添加自己的 Element 类实现。我想要实现的是,在解组之后,我将在类 ListContainer 类实例的实例的元素字段中拥有这些实例作为框架的扩展。例如,假设在其他一些 ext1.jar 中有一个类 DummyElement,它位于类路径中,如下所示:
@XMLType
@XMLRootElement(name = "dummy")
public class DummyElement extends Element {
....
}
在 ext2.jar 中,我将拥有 EasyElement,例如:
@XMLType
@XMLRootElement(name = "easy")
public class EasyElement extends Element {
...
}
在 xml 中我会有类似的地方:
<container>
<elements>
<dummy>....</dummy>
<easy>...</easy>
<easy>....</easy>
<dummy>...</dummy>
</elements>
</container>
预期结果应该是,ListContainer 类的未编组实例将在元素字段中有 2 个 DummyElement 实例和 2 个 EasyElement 实例。
到目前为止,如果我让 ListContainer 类像这样注释 - 我将在列表中没有任何内容。如果我使用 @XMLAnyElement(lax=true) 进行注释,那么我将拥有 ElementNSImpl 实例。
提前感谢您的想法。
【问题讨论】:
标签: java xml jaxb annotations