解组@XMLElement具有相同的名称属性
我正在尝试使用JAXB来处理已经以某种格式写入XML的应用程序。我必须遵守向后兼容性问题的格式。解组@XMLElement具有相同的名称属性
,我有以下的一类代码段:
@XmlElement(name = "field")
private StudyIdentifier2 studyIdentifier;
@XmlElement(name = "field")
private List<GenericField> demographicsFields = new ArrayList<GenericField>();
此代码将正确地写出下面的XML:
<field>
<value>2</value>
<XMLtag>id</XMLtag>
</field>
<field>
<value>JAMES</value>
<XMLtag>patient_name</XMLtag>
</field>
<field>
<value>This is a test</value>
<XMLtag>study_description</XMLtag>
</field>
然而,当我试图来解读它,我只是得到我的StudyIdentifier2
包含最后一个XML字段详细信息的对象,其中study_description
和demographicsFields
ArrayList
刚刚得到空值。我认为这是因为我在@XMLElement
注释中指定了相同的名称值,所以它不能正确地取消打印。不过,我需要他们都被称为<field>
。是否可以给他们两个相同的名字,还是他们必须有所不同才能正确解开?
可能是一个非常简单的解决方案,我还没有完全掌握JAXB的工作原理。
此XML中没有任何内容可用于以编程方式确定它是哪种类型的“字段”(StudyIdentifier2
或GenericField
)。我可能甚至无法“手动”组织这个XML,而忽略JAXB可能存在的任何限制或困难。
在没有看到GenericField
的类定义的情况下,很难确切地看到发生了什么。然而,很可能,是的,如果你想“正确地”解组,那么你需要给它们不同的名字(改变你的XML,并可能导致你提到的一些向后兼容性问题)。或者,如果GenericField
可以表示来自XML示例的所有3个字段,那么如果您只删除studyIdentifier
,并且让demographicsFields
代表编组和解编码的所有内容 - 在将其重命名为genericFields
之类的更合适的内容之后呢?
现在,如果你知道的例子,StudyIdentifer2
应始终从XML第三<field/>
阅读,和其他一切需要进入demographicsFields
,请澄清你的问题,我们或许可以找到一些额外的选项。