Search code examples
javaxmljaxbsax

How can I use JAXB to bind mulitple non-unique elements


I'm having this issue with parsing XML using JAXB. Here is a simplified layout of the XML in question:

<message>
  <header>
    <network>NET</network>
    <sendTime>0722</sendTime>
  </header>
  <generalInformation>
    <senderReference>1234</senderReference>
    <linkage>
      <externalReference>extRef</externalReference>
    </linkage>
    <linkage>
      <internalReference>intRef</internalReference>
    </linkage>
    <linkage>
      <systemReference>sysRef</externalReference>
    </linkage>
  </generalInformation>
</message>

The problem I'm having is that these references are being sent under the linkage tag which is not unique, and also doesn't have a root like "linkages" which would allow me to easily wrap it in a list in Java, because the generalInformation tag has other tags in it. Here is how I have it set up so far:

@XmlRootElement(name="message")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Message {
  private Header header;
  private GeneralInformation generalInformation;
}

@XmlRootElement(name="header")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Header {
  private String network;
  private String sendTime;
}

@XmlRootElement(name="generalInformation")
@NoArgsConstructor
@AllArgsConstructor
@Data
public class GeneralInformation {
  private String senderReference;
  //How to create for linkages??
}

So my question to you is, how can I configure the GeneralInformation class to handle these multiple linkages? I am mostly concerned with unmarshalling from XML to Java at the moment.


Solution

  • Just define it as a List, for example:

    private List<Linkage> linkage;
    

    and define the Linkage class to have single String property:

    @XmlRootElement(name="linkage")
    ...
    public class Linkage {
      private String systemReference;
    }