情况
我正在使用 MOXy 的 JAXB 实现来处理一个大型 XML 文档,该文档的架构具有许多类似的复杂类型。具体来说,大约有两种类型充当具有以下结构的列表包装元素:
<ITEMS attr1="X" attr2="Y">
<ITEM>...</ITEM>
...
<EXTENSION/>
<ITEMS>
对于这些类似列表包装器的元素中的每一个,名称都会发生变化,并且包含的列表元素也会发生变化。但是,属性(都是可选的)和单个 EXTENSION 元素(也是可选的)始终存在。这是使用两种类型的示例:
<ROLES visible="false">
<ROLE type="X"/>
<ROLE type="Y"/>
</ROLES>
<PAYMENTS visible="true">
<PAYMENT>
<PAYEENAME>Joe</PAYEENAME>
</PAYMENT>
<EXTENSION>
<SOMETHING>Here</SOMETHING>
</EXTENSION>
</PAYMENTS>
问题
我想避免代码重复,因为这些元素之间唯一改变的是名称和它包含的一个或多个元素。做这个的最好方式是什么?
我只能看到两种可能的解决方案。
1
使用泛型创建一个具体类,以指示要在更改的集合中使用的对象类型。然后使用 MOXy 的外部 OX 映射来指示该类的任何个人使用应如何序列化。就像是:
public class GenericContainer<T> {
@XmlAttribute
protected Boolean visibile;
@XmlElement(name = "Extension")
protected Extension extension;
// OX Mappings done in external meta file
protected List<T> items;
...
}
虽然我喜欢这个选项,但似乎不可能在每次使用的基础上重新定义类的 OX 映射。
2
创建一个没有 List 属性的基类,然后为每个自定义包装元素创建一个具体类。这个解决方案肯定有效,但我最终会得到大约两打几乎相同的类。
#1 是可能的还是有更好的方法来处理这个我没有想到的?
提前致谢!