Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
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(Foo.class);

        Foo foo = new Foo();
        List<Bar> bars = new ArrayList<Bar>();
        foo.setBars(bars);

        Bar<String> stringBar = new Bar<String>();
        stringBar.setValue("string data");
        bars.add(stringBar);

        Bar<byte[]> binaryBar = new Bar<byte[]>();
        binaryBar.setValue("binary data".getBytes());
        bars.add(binaryBar);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(foo, System.out);
    }

    public static class BarAdapter extends XmlAdapter<Object, Bar<?>> {

        @Override
        public Bar<?> unmarshal(Object v) throws Exception {
            if (null == v) {
                return null;
            }
            Bar<Object> bar = new Bar<Object>();
            bar.setValue(v);
            return bar;
        }

        @Override
        public Object marshal(Bar<?> v) throws Exception {
            if (null == v) {
                return null;
            }
            return v.getValue();
        }

    }

    @XmlRootElement
    public static class Foo {
        private List<Bar> bars;

        @XmlElement(name = "bar")
        @XmlJavaTypeAdapter(BarAdapter.class)
        public List<Bar> getBars() {
            return bars;
        }

        public void setBars(List<Bar> bars) {
            this.bars = bars;
        }

    }

    public static class Bar<T> {
        private T value;

        public T getValue() {
            return value;
        }

        public void setValue(T value) {
            this.value = value;
        }
    }
}