Java HTML / XML How to - Marshalling selected fields only, using JAXB








Question

We would like to know how to marshalling selected fields only, using JAXB.

Answer

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
//w  w w .j a  va  2  s. c o  m
public class Main {
  public static void main(String[] args) throws Exception {
    JAXBContext context = JAXBContext.newInstance(Disk.class,
        MyStatus.class, MyDisk.class);
    Marshaller m = context.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    Disk disk = new Disk();
    disk.setStatus("attached");
    disk.setSize(10000000000L);
    disk.setFreeSpace(25600000L);
    disk.setId("1");

    m.marshal(disk, System.out);
    m.marshal(new MyStatus(disk), System.out);
    m.marshal(new MyDisk(disk), System.out);
  }

}

@XmlRootElement
class Disk {
  private String status;
  private long size;
  private long freeSpace;
  private String id;

  public String getStatus() {
    return status;
  }

  public void setStatus(String status) {
    this.status = status;
  }

  public long getSize() {
    return size;
  }

  public void setSize(long size) {
    this.size = size;
  }

  public long getFreeSpace() {
    return freeSpace;
  }

  public void setFreeSpace(long freeSpace) {
    this.freeSpace = freeSpace;
  }

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  @Override
  public String toString() {
    return "Disk [status=" + status + ", size=" + size + ", freeSpace="
        + freeSpace + ", id=" + id + "]";
  }
}

@XmlRootElement(name = "Disk")
class MyStatus {
  private Disk disk;

  public MyStatus() {
  }

  public MyStatus(Disk disk) {
    this.disk = disk;
  }

  public String getStatus() {
    return disk.getStatus();
  }

  public void setStatus(String status) {
  }
}

@XmlRootElement(name = "Disk")
class MyDisk {
  private Disk disk;

  public MyDisk() {
  }

  public MyDisk(Disk disk) {
    this.disk = disk;
  }

  public long getFreeSpace() {
    return disk.getFreeSpace();
  }

  public void setFreeSpace(long freeSpace) {
  }
}