• Home
  • LLMs
  • Docker
  • Kubernetes
  • Java
  • All
  • About
Samples | JAXB Marshalling/Unmarshalling
  1. Notes
  2. The project Structure
  3. Maven - POM Configuration
  4. ResourceUtils.java
  5. Model (JAXB): Payload.java
  6. Model (JAXB): PayloadParameter.java
  7. package-info.java
  8. Model (Jackson): Payload.java
  9. Model (Jackson): PayloadParameter.java
  10. Schema: payload.xsd
  11. Sample XML: payload.xml
  12. Sample Json: payload.json
  13. Marshaller (JAXB): TestMarshaller.java
  14. Marshaller (Jackson): TestXMLMarshaller.java
  15. Unmarshaller (Jackson): TestXMLUnmarshaller.java
  16. Marshaller (Jackson): TestJsonMarshaller.java
  17. Unmarshaller (Jackson): TestJsonUnmarshaller.java

  1. Notes
    This sample code shows how to use Jackson to:
    • marshal java objects (annotated with JAXB annotations) into XML data: TestMarshaller.java

    • marshal java objects (annotated with Jackson annotations) into XML data: TestXMLMarshaller.java
    • unmarshal XML data into java objects: TestXMLUnmarshaller.java

    • marshal java objects (annotated with Jackson annotations) into Json data: TestJsonMarshaller.java
    • unmarshal Json data into java objects: TestJsonUnmarshaller.java
  2. The project Structure

    mtitek-jackson-marshalling
  3. Maven - POM Configuration
    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.1</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.10.1</version>
        </dependency>
    </dependencies>
  4. ResourceUtils.java
    package mtitek.jackson.marshalling.utils;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.commons.io.IOUtils;
    
    public class ResourceUtils {
        private ResourceUtils() {
        }
    
        public static InputStream getResourceAsStream(final String fileName) {
            return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
        }
    
        public static String getResourceAsString(final String fileName) throws IOException {
            try (final InputStream inputStream = ResourceUtils.getResourceAsStream(fileName)) {
                return IOUtils.toString(inputStream, "UTF-8");
            }
        }
    }
  5. Model (JAXB): Payload.java
    package mtitek.jackson.marshalling.jaxb.payload;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlTransient;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "payload")
    @XmlType(name = "payload", propOrder = { "id", "code", "parameters" })
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Payload {
        @XmlElement(name = "id", required = true)
        private String id;
    
        @XmlElement(name = "code", required = true)
        private String code;
    
        @XmlTransient
        private String desc;
    
        @XmlElementWrapper(name = "parameters")
        @XmlElement(name = "parameter")
        private final List<PayloadParameter> parameters = new ArrayList<>();
    
        public String getId() {
            return id;
        }
    
        public void setId(String value) {
            this.id = value;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String value) {
            this.code = value;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        public List<PayloadParameter> getParameters() {
            List<PayloadParameter> copyParameters = new ArrayList<PayloadParameter>();
            copyParameters.addAll(this.parameters);
            return copyParameters;
        }
    
        public void setParameters(final List<PayloadParameter> parameters) {
            this.parameters.clear();
    
            if (parameters != null) {
                this.parameters.addAll(parameters);
            }
        }
    
        @Override
        public String toString() {
            return "Payload [id=" + id + ", code=" + code + "]";
        }
    }
  6. Model (JAXB): PayloadParameter.java
    package mtitek.jackson.marshalling.jaxb.payload;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    @XmlRootElement(name = "parameter")
    @XmlType(name = "parameterType", propOrder = { "name", "value" })
    @XmlAccessorType(XmlAccessType.FIELD)
    public class PayloadParameter {
        @XmlAttribute(name = "id", required = true)
        private String id;
    
        @XmlElement(name = "name", required = true)
        private String name;
    
        @XmlElement(name = "value", required = true)
        private String value;
    
        public String getId() {
            return id;
        }
    
        public void setId(String value) {
            this.id = value;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String value) {
            this.name = value;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        @Override
        public String toString() {
            return "PayloadParameter [id=" + id + ", name=" + name + ", value=" + value + "]";
        }
    }
  7. package-info.java
    @javax.xml.bind.annotation.XmlSchema(namespace = "http://marshalling.jackson.mtitek/payload", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
    package mtitek.jackson.marshalling.jaxb.payload;
  8. Model (Jackson): Payload.java
    package mtitek.jackson.marshalling.payload;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlCData;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
    
    @JacksonXmlRootElement(namespace = "http://marshalling.jackson.mtitek/payload", localName = "payload")
    @JsonPropertyOrder({ "id", "code" })
    public class Payload {
        @JsonProperty("id")
        @JacksonXmlProperty(isAttribute = false, localName = "id", namespace = "")
        private String id;
    
        @JsonProperty("code")
        @JacksonXmlProperty(isAttribute = false, localName = "code", namespace = "")
        private String code;
    
        @JsonProperty("label")
        @JacksonXmlProperty(isAttribute = false, localName = "label", namespace = "")
        @JacksonXmlCData
        private String label;
    
        @JsonIgnore
        private String desc;
    
        @JacksonXmlElementWrapper(localName = "parameters")
        @JsonProperty("parameter")
        private final List<PayloadParameter> parameters = new ArrayList<>();
    
        public String getId() {
            return id;
        }
    
        public void setId(String value) {
            this.id = value;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String value) {
            this.code = value;
        }
    
        public String getLabel() {
            return label;
        }
    
        public void setLabel(String label) {
            this.label = label;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        public List<PayloadParameter> getParameters() {
            List<PayloadParameter> copyParameters = new ArrayList<PayloadParameter>();
            copyParameters.addAll(this.parameters);
            return copyParameters;
        }
    
        public void setParameters(final List<PayloadParameter> parameters) {
            this.parameters.clear();
    
            if (parameters != null) {
                this.parameters.addAll(parameters);
            }
        }
    
        @Override
        public String toString() {
            return "Payload [id=" + id + ", code=" + code + ", label=" + label + "]";
        }
    }
  9. Model (Jackson): PayloadParameter.java
    package mtitek.jackson.marshalling.payload;
    
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
    import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
    
    @JacksonXmlRootElement(localName = "parameter")
    @JsonPropertyOrder({ "name", "value" })
    public class PayloadParameter {
        @JsonProperty("id")
        @JacksonXmlProperty(isAttribute = true, localName = "id", namespace = "")
        private String id;
    
        @JsonProperty("name")
        @JacksonXmlProperty(isAttribute = false, localName = "name", namespace = "")
        private String name;
    
        @JsonProperty("value")
        @JacksonXmlProperty(isAttribute = false, localName = "value", namespace = "")
        private String value;
    
        public String getId() {
            return id;
        }
    
        public void setId(String value) {
            this.id = value;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String value) {
            this.name = value;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        @Override
        public String toString() {
            return "PayloadParameter [id=" + id + ", name=" + name + ", value=" + value + "]";
        }
    }
  10. Schema: payload.xsd
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified"
        elementFormDefault="qualified" targetNamespace="http://marshalling.jackson.mtitek/payload"
        xmlns="http://marshalling.jackson.mtitek/payload" xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1">
    
        <xs:element name="payload">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="id" type="xs:string" />
    
                    <xs:element name="code" type="xs:string" />
    
                    <xs:element name="parameters" type="parametersType"
                        minOccurs="0" maxOccurs="1" />
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    
        <xs:complexType name="parametersType">
            <xs:sequence>
                <xs:element name="parameter" type="parameterType"
                    minOccurs="1" maxOccurs="unbounded" />
            </xs:sequence>
        </xs:complexType>
    
        <xs:complexType name="parameterType">
            <xs:all>
                <xs:element name="name" type="xs:string" />
                <xs:element name="value" type="xs:string" />
            </xs:all>
    
            <xs:attribute name="id" type="xs:string" />
        </xs:complexType>
    </xs:schema>
  11. Sample XML: payload.xml
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <payload>
        <id>123</id>
        <code>xyz</code>
    
        <parameters>
            <parameter id="11">
                <name>bar</name>
                <value>foo</value>
            </parameter>
    
            <parameter id="22">
                <value>ti</value>
                <name>ta</name>
            </parameter>
        </parameters>
    </payload>
  12. Sample Json: payload.json
    {
        "id": "111",
        "code": "222",
        "label": "label payload",
        "parameter": [
            {
                "name": "ddd",
                "value": "eee",
                "id": "111"
            },
            {
                "name": "rrr",
                "value": "ttt",
                "id": "222"
            }
        ]
    }
  13. Marshaller (JAXB): TestMarshaller.java
    package mtitek.jackson.marshalling.jaxb;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
    
    import mtitek.jackson.marshalling.jaxb.payload.Payload;
    import mtitek.jackson.marshalling.jaxb.payload.PayloadParameter;
    
    public class TestMarshaller {
        public static void main(String[] args) throws Exception {
            final Payload payload = initPayload();
    
            JacksonXmlModule xmlModule = new JacksonXmlModule();
            xmlModule.setDefaultUseWrapper(false);
    
            ObjectMapper objectMapper = new XmlMapper(xmlModule);
    
            // Indentation
            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    
            // JAXB annotations
            objectMapper.registerModule(new JaxbAnnotationModule());
    
            System.out.println(objectMapper.writeValueAsString(payload));
        }
    
        private static Payload initPayload() {
            final Payload payload = new Payload();
    
            payload.setId("1");
            payload.setCode("111");
            payload.setDesc("transient");
    
            final List<PayloadParameter> parameters = new ArrayList<>();
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("1");
                parameter.setName("aaa");
                parameter.setValue("bbb");
    
                parameters.add(parameter);
            }
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("2");
                parameter.setName("ccc");
                parameter.setValue("ddd");
    
                parameters.add(parameter);
            }
    
            payload.setParameters(parameters);
    
            return payload;
        }
    }

    Output:
    <payload>
        <id>1</id>
        <code>111</code>
        <parameters>
            <parameter id="1">
                <name>aaa</name>
                <value>bbb</value>
            </parameter>
            <parameter id="2">
                <name>ccc</name>
                <value>ddd</value>
            </parameter>
        </parameters>
    </payload>
  14. Marshaller (Jackson): TestXMLMarshaller.java
    package mtitek.jackson.marshalling;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    import mtitek.jackson.marshalling.payload.Payload;
    import mtitek.jackson.marshalling.payload.PayloadParameter;
    
    public class TestXMLMarshaller {
        public static void main(String[] args) throws Exception {
            final Payload payload = initPayload();
    
            JacksonXmlModule xmlModule = new JacksonXmlModule();
            xmlModule.setDefaultUseWrapper(false);
    
            ObjectMapper objectMapper = new XmlMapper(xmlModule);
    
            // Indentation
            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    
            System.out.println(objectMapper.writeValueAsString(payload));
        }
    
        private static Payload initPayload() {
            final Payload payload = new Payload();
    
            payload.setId("1");
            payload.setCode("111");
            payload.setLabel("aa vvv ddd");
            payload.setDesc("transient");
    
            final List<PayloadParameter> parameters = new ArrayList<>();
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("1");
                parameter.setName("aaa");
                parameter.setValue("bbb");
    
                parameters.add(parameter);
            }
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("2");
                parameter.setName("ccc");
                parameter.setValue("ddd");
    
                parameters.add(parameter);
            }
    
            payload.setParameters(parameters);
    
            return payload;
        }
    }

    Output:
    <payload xmlns="http://marshalling.jackson.mtitek/payload">
        <id xmlns="">1</id>
        <code xmlns="">111</code>
        <label xmlns=""><![CDATA[aa vvv ddd]]></label>
        <parameters xmlns="">
            <parameter id="1">
                <name>aaa</name>
                <value>bbb</value>
            </parameter>
            <parameter id="2">
                <name>ccc</name>
                <value>ddd</value>
            </parameter>
        </parameters>
    </payload>
  15. Unmarshaller (Jackson): TestXMLUnmarshaller.java
    package mtitek.jackson.marshalling;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.xml.bind.JAXBException;
    
    import org.xml.sax.SAXException;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
    import com.fasterxml.jackson.dataformat.xml.XmlMapper;
    
    import mtitek.jackson.marshalling.payload.Payload;
    import mtitek.jaxb.utils.ResourceUtils;
    
    public class TestXMLUnmarshaller {
        public static void main(String[] args) throws SAXException, IOException, JAXBException {
            try (final InputStream inputStream = ResourceUtils.getResourceAsStream("payload.xml")) {
                JacksonXmlModule xmlModule = new JacksonXmlModule();
                xmlModule.setDefaultUseWrapper(false);
    
                ObjectMapper objectMapper = new XmlMapper(xmlModule);
    
                final Payload payload = objectMapper.readValue(inputStream, Payload.class);
    
                System.out.println(payload);
                System.out.println(payload.getParameters());
            }
        }
    }

    Output:
    Payload [id=123, code=xyz, label=null]
    [PayloadParameter [id=11, name=bar, value=foo], PayloadParameter [id=22, name=ta, value=ti]]
  16. Marshaller (Jackson): TestJsonMarshaller.java
    package mtitek.jackson.marshalling;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    
    import mtitek.jackson.marshalling.payload.Payload;
    import mtitek.jackson.marshalling.payload.PayloadParameter;
    
    public class TestJsonMarshaller {
        public static void main(String[] args) throws Exception {
            final Payload payload = initPayload();
    
            ObjectMapper objectMapper = new ObjectMapper();
    
            // Indentation
            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
    
            System.out.println(objectMapper.writeValueAsString(payload));
        }
    
        private static Payload initPayload() {
            final Payload payload = new Payload();
    
            payload.setId("1");
            payload.setCode("111");
            payload.setLabel("aa vvv ddd");
            payload.setDesc("transient");
    
            final List<PayloadParameter> parameters = new ArrayList<>();
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("1");
                parameter.setName("aaa");
                parameter.setValue("bbb");
    
                parameters.add(parameter);
            }
    
            {
                final PayloadParameter parameter = new PayloadParameter();
    
                parameter.setId("2");
                parameter.setName("ccc");
                parameter.setValue("ddd");
    
                parameters.add(parameter);
            }
    
            payload.setParameters(parameters);
    
            return payload;
        }
    }

    Output:
    {
        "id": "1",
        "code": "111",
        "label": "aa vvv ddd",
        "parameter": [
            {
                "name": "aaa",
                "value": "bbb",
                "id": "1"
            },
            {
                "name": "ccc",
                "value": "ddd",
                "id": "2"
            }
        ]
    }
  17. Unmarshaller (Jackson): TestJsonUnmarshaller.java
    package mtitek.jackson.marshalling;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.xml.bind.JAXBException;
    
    import org.xml.sax.SAXException;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import mtitek.jackson.marshalling.payload.Payload;
    import mtitek.jaxb.utils.ResourceUtils;
    
    public class TestJsonUnmarshaller {
        public static void main(String[] args) throws SAXException, IOException, JAXBException {
            try (final InputStream inputStream = ResourceUtils.getResourceAsStream("payload.json")) {
                ObjectMapper objectMapper = new ObjectMapper();
    
                final Payload payload = objectMapper.readValue(inputStream, Payload.class);
    
                System.out.println(payload);
                System.out.println(payload.getParameters());
            }
        }
    }

    Output:
    Payload [id=111, code=222, label=label payload]
    [PayloadParameter [id=111, name=ddd, value=eee], PayloadParameter [id=222, name=rrr, value=ttt]]
© 2025  mtitek