【发布时间】:2019-09-08 10:08:22
【问题描述】:
让我们假设以下场景:
我有以下类型的对象列表:
public class MyObject {
private String name
private SomeClass someField
private List<Fact> facts
}
name 和 someField 字段只是为了表明该类有一些常规成员。您可以假设知道如何将这些类转换为 xml。
Fact 是我不知道其实现但由插件提供的接口。可以要求插件提供任意代码,但我想让它尽可能简单。
我想将这些对象保存并加载到 xml。请注意,在加载 xml 时,可能并非所有实现都存在(xml 可能是用一组不同的插件编写的)。我希望能够在再次保存时仍然读取 xml 并且不会丢失任何信息。换句话说:我愿意在类中添加诸如List<Element>或List<String>之类的字段,并且在读取xml时,应将存在插件的所有部分读入相应的Facts,而所有部分没有插件的应该存储在Element 或String 中,当再次保存时,两个列表都会被保存并且可以被具有所有插件的程序读取。
如何最好地使用 JAXB 实现这一点?
我可以看到的一种方法是使用 Map<Class, org.w3c.dom.Element> 而不是 List<Fact>,它可以通过 JaxB 转换为 xml,然后让任何插件使用 org.w3c.dom API 提供自定义代码与“他们的”元素之间的转换,但是使用那个API有点麻烦,不知道有没有更好的方法?
【问题讨论】:
-
告诉我们你到目前为止尝试了什么,结果如何,什么是好的,还有什么问题。
-
@metallurg:但我做到了:在最后一段中——我什至说我为什么不喜欢那个解决方案。如果它有助于理解场景,我当然可以提供一些近似代码,但我的麻烦是没有找到“一个”解决方案,我正在寻找一个充其量提供简单客户端界面的 JAXB 惯用解决方案。如果有人能指点一下,我也很高兴。