Java 使用同名属性解组@XMLElement

Java 使用同名属性解组@XMLElement,java,xml,jaxb,Java,Xml,Jaxb,我试图将JAXB用于已经以某种格式编写XML的应用程序。我必须保持向后兼容性问题的格式 我在一个类中有以下代码段: @XmlElement( name = "field" ) private StudyIdentifier2 studyIdentifier; @XmlElement( name = "field" ) private List<GenericField> demographicsFields = new ArrayList<GenericField>()

我试图将JAXB用于已经以某种格式编写XML的应用程序。我必须保持向后兼容性问题的格式

我在一个类中有以下代码段:

@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_描述和demographicsFields ArrayList,其中只有空值。我假设这是因为我在@XMLElement注释中指定了相同的名称值,因此无法正确地对其进行解组。但是我需要他们两个都打电话。是否可以给它们取相同的名字,或者它们必须不同才能正确解组


很可能是一个非常简单的解决方案,我还没有完全了解JAXB是如何工作的。

这个XML中没有任何内容可以用来通过编程确定它是StudyIdentifier2还是GenericField。我甚至可能无法手动组织此XML,忽略了JAXB可能存在的任何限制或困难

如果看不到GenericField的类定义,很难准确地看到这里发生了什么。但是,如果希望正确地取消对XML的编组,则很可能需要为它们指定不同的名称更改XML,并可能导致您提到的一些向后兼容性问题。或者,如果GenericField可以表示示例XML中的所有3个字段,那么如果您删除studyIdentifier,并让demographicsFields表示编组和解编组的所有内容,然后可能将其重命名为更合适的genericFields,会怎么样

现在,如果您知道StudyIdentifier2应该始终从XML的第三个字段读取,其他所有内容都需要进入人口统计学字段,请在您的问题中澄清这一点,我们可能会找到一些其他选项