Note
Jackson is not a JAXB (JSR-222) . This means that there is no guarantee as to how it interprets standard JAXB annotations.
By default, the JAXB implementation (JSR-222) does not apply the wrapper element to the properties of the collection.
A
By default, the JAXB implementation (JSR-222) will display by default based on properties. To save space, I omitted these methods and indicated @XmlAccessorType(XmlAccessType.FIELD) so that the metadata is obtained from instance variables (fields).
package forum13097559; import java.util.List; import javax.xml.bind.annotation.*; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class A { private String b1; private String b2; private List<B3> b3; }
B3
package forum13097559; import javax.xml.bind.annotation.*; @XmlAccessorType(XmlAccessType.FIELD) public class B3 { private String c1; private String c2; }
Demo
package forum13097559; import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(A.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum13097559/input.xml"); A a = (A) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(a, System.out); } }
Input.xml / output
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <a> <b1>b1</b1> <b2>b2</b2> <b3> <c1></c1> <c2></c2> </b3> <b3> <c1></c1> <c2></c2> </b3> <b3> <c1></c1> <c2></c2> </b3> </a>
Additional Information
source share