Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.io.StringReader;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

public class Main {
    public static void main(String[] args) throws Exception {
        List<Element> elementList = new ArrayList<Element>();
        List<Item> itemList = new ArrayList<Item>();
        Element element1 = new Element();
        Element element2 = new Element();
        Item item1 = new Item();
        Item item2 = new Item();
        Elements elements = new Elements();

        item1.setId(1);
        item1.setName("Test1");
        item2.setId(2);
        item2.setName("Test2");
        itemList.add(item1);
        itemList.add(item2);

        element1.setProperty1("prop1");
        element1.setProperty2("prop2");
        element1.setType(2);
        element1.setItems(itemList);

        element2.setProperty1("prop11");
        element2.setProperty2("prop22");
        element2.setType(22);
        element2.setItems(itemList);

        elementList.add(element1);
        elementList.add(element2);

        elements.setElements(elementList);

        System.out.println("------- Object to XML -----------\n");
        JAXBContext jaxbContext = JAXBContext.newInstance(Elements.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(elements, System.out);

        System.out.println("\n------- XML to Object -----------\n");

        String xml = "<elements><element><items><item><id>1</id><name>Test1</name></item><item><id>2</id><name>Test2</name></item></items><property1>prop1</property1><property2>prop2</property2><type>2</type></element><element><items><item><id>1</id><name>Test1</name></item><item><id>2</id><name>Test2</name></item></items><property1>prop11</property1><property2>prop22</property2><type>22</type></element></elements>";
        StringReader reader = new StringReader(xml);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        Elements elementsOut = (Elements) jaxbUnmarshaller.unmarshal(reader);
        System.out.println(elementsOut);

    }

    @XmlRootElement(name = "elements")
    public static class Elements {

        List<Element> elements;

        @XmlElement(name = "element")
        public List<Element> getElements() {
            return elements;
        }

        public void setElements(List<Element> elements) {
            this.elements = elements;
        }

        @Override
        public String toString() {
            Field[] fields = this.getClass().getDeclaredFields();
            String res = "";
            try {
                for (Field field : fields) {
                    res += field.getName() + " :\n" + field.get(this);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return res;
        }
    }

    public static class Element {

        Integer type;
        String property1;
        String property2;
        List<Item> items;

        public Integer getType() {
            return type;
        }

        public void setType(Integer type) {
            this.type = type;
        }

        public String getProperty1() {
            return property1;
        }

        public void setProperty1(String property1) {
            this.property1 = property1;
        }

        public String getProperty2() {
            return property2;
        }

        public void setProperty2(String property2) {
            this.property2 = property2;
        }

        @XmlElementWrapper(name = "items")
        @XmlElement(name = "item")
        public List<Item> getItems() {
            return items;
        }

        public void setItems(List<Item> items) {
            this.items = items;
        }

        @Override
        public String toString() {
            Field[] fields = this.getClass().getDeclaredFields();
            String res = "\n";
            try {
                for (Field field : fields) {
                    res += field.getName() + " : " + field.get(this) + "\n";
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            return res;
        }
    }

    public static class Item {
        Integer id;
        String name;

        public Integer getId() {
            return id;
        }

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

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            Field[] fields = this.getClass().getDeclaredFields();
            String res = "{";
            try {
                for (Field field : fields) {
                    res += field.getName() + " : " + field.get(this);
                }
                res += "}";
            } catch (Exception e) {
                e.printStackTrace();
            }

            return res;
        }
    }
}