Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.io.File;
import java.io.Serializable;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

public class Main {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Compound.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Compound compound = (Compound) unmarshaller.unmarshal(new File("input.xml"));
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(compound, System.out);
    }

    public static abstract class Value implements Serializable {
    }

    public static class SimpleAdapter extends XmlAdapter<String, Simple> {

        @Override
        public Simple unmarshal(String v) throws Exception {
            Simple simple = new Simple();
            simple.setSimple(v);
            return simple;
        }

        @Override
        public String marshal(Simple v) throws Exception {
            return v.getSimple();
        }

    }

    @XmlRootElement(name = "compound")
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Compound extends Value {
        @XmlElements({ @XmlElement(name = "simple", type = Simple.class),
                @XmlElement(name = "compound", type = Compound.class) })
        protected List<Value> value;

        public List<Value> getValue() {
            return value;
        }

        public void setValue(List<Value> value) {
            this.value = value;
        }

    }

    @XmlJavaTypeAdapter(SimpleAdapter.class)
    public static class Simple extends Value {
        private java.lang.String simple;

        public java.lang.String getSimple() {
            return simple;
        }

        public void setSimple(java.lang.String simple) {
            this.simple = simple;
        }

    }

}