You don't seem to have a root element in your example. You can do something like this to get the structure you need: -
@XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement class Node { private MainNode mainNode; private MainNode2 mainNode2; public Node() { } public Node(MainNode mainNode, MainNode2 mainNode2) { this.mainNode = mainNode; this.mainNode2 = mainNode2; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement class MainNode { private String node1; private String node2; public MainNode() { } public MainNode(String node1, String node2) { this.node1 = node1; this.node2 = node2; } } @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement class MainNode2 { }
Here is my test code: -
JAXBContext jc = JAXBContext.newInstance(Node.class); Marshaller m = jc.createMarshaller(); MainNode mainNode = new MainNode("node1 value", "node2 value"); MainNode2 mainNode2 = new MainNode2(); Node node = new Node(mainNode, mainNode2); StringWriter sw = new StringWriter(); m.marshal(node, sw); System.out.println(sw.toString());
... and here is the listing: -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <node> <mainNode> <node1>node1 value</node1> <node2>node2 value</node2> </mainNode> <mainNode2/> </node>
limc
source share