Ниже приведено несколько подходов:
Стандартный JAXB
Следующее будет работать с любой реализацией JAXB (Metro, MOXy , JaxMe, так далее).Вы можете создать элемент " FOO ", а затем направить в него свой экземпляр Bar.Код ниже, как продемонстрировать это с помощью StAX (это также можно сделать с помощью DOM или SAX):
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamWriter;
public class Demo {
public static void main(String[] args) throws Exception {
XMLOutputFactory xof = XMLOutputFactory.newFactory();
XMLStreamWriter xsw = xof.createXMLStreamWriter(System.out);
xsw.writeStartDocument();
xsw.writeStartElement("FOO");
Bar bar = new Bar();
bar.setId(1);
bar.setPoints(111);
bar.setCode(123);
JAXBContext jc = JAXBContext.newInstance(Bar.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(bar, xsw);
xsw.writeEndElement();
xsw.writeEndDocument();
xsw.close();
}
}
EclipseLink JAXB (MOXy)
Если вы случитесьчтобы использовать EclipseLink JAXB (MOXy) , тогда вы можете использовать расширение @XmlPath (я технический руководитель MOXy).Ваш класс Bar будет выглядеть так:
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="FOO")
@XmlType(propOrder={"id", "points", "code"})
public class Bar {
private int id;
private int points;
private int code;
@XmlPath("BAR/id/text()")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlPath("BAR/POINTS/text()")
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
@XmlPath("BAR/CODE/text()")
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
Для получения дополнительной информации см .: