解组@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_descriptiondemographicsFieldsArrayList刚刚得到空值。我认为这是因为我在@XMLElement注释中指定了相同的名称值,所以它不能正确地取消打印。不过,我需要他们都被称为<field>。是否可以给他们两个相同的名字,还是他们必须有所不同才能正确解开?

可能是一个非常简单的解决方案,我还没有完全掌握JAXB的工作原理。

此XML中没有任何内容可用于以编程方式确定它是哪种类型的“字段”(StudyIdentifier2GenericField)。我可能甚至无法“手动”组织这个XML,而忽略JAXB可能存在的任何限制或困难。

在没有看到GenericField的类定义的情况下,很难确切地看到发生了什么。然而,很可能,是的,如果你想“正确地”解组,那么你需要给它们不同的名字(改变你的XML,并可能导致你提到的一些向后兼容性问题)。或者,如果GenericField可以表示来自XML示例的所有3个字段,那么如果您只删除studyIdentifier,并且让demographicsFields代表编组和解编码的所有内容 - 在将其重命名为genericFields之类的更合适的内容之后呢?

现在,如果你知道的例子,StudyIdentifer2应始终从XML第三<field/>阅读,和其他一切需要进入demographicsFields,请澄清你的问题,我们或许可以找到一些额外的选项。