Search code examples
javaxmlxml-binding

How to bind xml to bean


In my application i use some API via HTTP and it returns responces as xml. I want automaticaly bind data from xml to beans.

For example bind following xml:

<xml>
   <userid>123456</userid>
   <uuid>123456</uuid>
</xml>

to this bean (maybe with help of annotations)

class APIResponce implement Serializable{

private Integer userid;
private Integer uuid;
....
}

What the simplest way to do this?


Solution

  • I agree with using JAXB. As JAXB is a spec you can choose from multiple implementations:

    Here is how you can do it with JAXB:

    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name="xml")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class APIResponce {
    
        private Integer userid; 
        private Integer uuid; 
    
    }
    

    When used with the follow Demo class:

    import java.io.File;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.Unmarshaller;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            JAXBContext jc = JAXBContext.newInstance(APIResponce.class);
    
            File xml = new File("input.xml");
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            APIResponce api = (APIResponce) unmarshaller.unmarshal(xml);
    
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(api, System.out);
        }
    }
    

    Will produce the following XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xml>
        <userid>123456</userid>
        <uuid>123456</uuid>
    </xml>