How to Marshalling and Unmarshalling Java Objects

2 min read

How to Marshalling and Unmarshalling Java Objects

Introduction

Marshalling and unmarshalling are essential processes in Java when working with object serialization and data exchange. Marshalling refers to converting a Java object into a different format (such as XML or JSON), while unmarshalling is the process of converting the formatted data back into a Java object.

This tutorial will explore how to marshall and unmarshall Java objects using JAXB (Java Architecture for XML Binding) and Jackson (for JSON handling) with detailed examples.

Marshalling and Unmarshalling with JAXB (XML Format)

Step 1: Add JAXB Dependencies

For Java 9 and above, you need to include the JAXB API dependency. If using Maven, add this to your pom.xml:

<dependencies>
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>3.0.1</version>
    </dependency>
</dependencies>

Step 2: Define the Java Object

Annotate the Java class with JAXB annotations:

import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Person {
    private String name;
    private int age;

    public Person() {}

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @XmlElement
    public String getName() {
        return name;
    }

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

    @XmlElement
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Step 3: Marshalling (Java Object to XML)

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
import java.io.StringWriter;

public class MarshallingExample {
    public static void main(String[] args) {
        try {
            Person person = new Person("John Doe", 30);
            JAXBContext context = JAXBContext.newInstance(Person.class);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            StringWriter writer = new StringWriter();
            marshaller.marshal(person, writer);

            System.out.println("XML Output:\n" + writer.toString());
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Step 4: Unmarshalling (XML to Java Object)

import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Unmarshaller;
import java.io.StringReader;

public class UnmarshallingExample {
    public static void main(String[] args) {
        try {
            String xmlData = "<person><name>John Doe</name><age>30</age></person>";
            JAXBContext context = JAXBContext.newInstance(Person.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();

            Person person = (Person) unmarshaller.unmarshal(new StringReader(xmlData));
            System.out.println("Unmarshalled Java Object: " + person.getName() + ", Age: " + person.getAge());
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

Marshalling and Unmarshalling with Jackson (JSON Format)

Step 1: Add Jackson Dependency

If using Maven, add the following dependency:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

Step 2: Define the Java Object

import com.fasterxml.jackson.annotation.JsonProperty;

public class Employee {
    @JsonProperty("name")
    private String name;

    @JsonProperty("salary")
    private double salary;

    public Employee() {}

    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

Step 3: Marshalling (Java Object to JSON)

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonMarshallingExample {
    public static void main(String[] args) {
        try {
            Employee employee = new Employee("Alice", 50000.0);
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(employee);
            System.out.println("JSON Output: " + json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Step 4: Unmarshalling (JSON to Java Object)

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonUnmarshallingExample {
    public static void main(String[] args) {
        try {
            String jsonData = "{\"name\":\"Alice\",\"salary\":50000.0}";
            ObjectMapper objectMapper = new ObjectMapper();
            Employee employee = objectMapper.readValue(jsonData, Employee.class);
            System.out.println("Unmarshalled Java Object: " + employee.getName() + ", Salary: " + employee.getSalary());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Conclusion

In this guide, we explored how to marshall and unmarshall Java objects using:

  • JAXB for XML processing
  • Jackson for JSON processing

Both techniques allow seamless conversion between Java objects and data formats, making them essential for RESTful APIs, data storage, and communication between services.

🤞 Never miss a story from us, get weekly updates to your inbox!