Java HTML / XML How to - Marshal object array








Question

We would like to know how to marshal object array.

Answer

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
// ww  w  .  ja  va  2s.co m
public class Main {

  public static void main(String[] args) throws Exception {

    MyMessage sarm = new MyMessage();
    MyGroupResponse[] sgr = new MyGroupResponse[2];
    sgr[0] = new MyGroupResponse();
    sgr[1] = new MyGroupResponse();
    sarm.setSailingGroup(sgr);

    JAXBElement<MyMessage> rootElement = new JAXBElement<MyMessage>(
        new QName("root"), MyMessage.class, sarm);

    JAXBContext jc = JAXBContext.newInstance(
        MyMessage.class, MyGroup.class,
        MyGroupResponse.class);
    Marshaller marshaller = jc.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(rootElement, System.out);

  }

  @XmlType(propOrder = { "type", "sailingGroup" })
  public static class MyMessage {

    private MyGroupResponse[] sailingGroup;

    String type;

    public MyGroupResponse[] getSailingGroup() {
      return sailingGroup;
    }

    public void setSailingGroup(MyGroupResponse[] sailingGroup) {
      this.sailingGroup = sailingGroup;
    }

    @XmlAttribute
    public String getType() {
      return type;
    }

    public void setType(String type) {
      this.type = type;
    }

  }

  public static class MyGroupResponse extends MyGroup {

  }

  public static class MyGroup {

  }
}