Monday, 28 January 2019

Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

🚀 Master Spring & Java with Ram N Java!

Subscribe today for practical Spring frameworks, OXM mappings, and clear Java tutorials.

🔔 Subscribe to YouTube Channel

Overview: Spring OXM with JAXB

Spring's Object/XML Mapping (OXM) framework simplifies XML binding by providing unified abstractions via Marshaller and Unmarshaller interfaces. Integrating Spring with JAXB (Java Architecture for XML Binding) enables seamless conversion between Java objects and XML documents with minimal configuration.

Key Concepts

  • Marshalling: Converting a Java object graph into an XML representation.
  • Unmarshalling: Parsing an XML document and instantiating corresponding Java objects.
  • Jaxb2Marshaller: The central Spring OXM class that implements both Spring's Marshaller and Unmarshaller interfaces.

Step-by-Step Implementation

1. Define the JAXB Annotated Model Class

@XmlRootElement(name = "customer")
public class Customer {
    private int id;
    private String name;
    private int age;

    @XmlAttribute(name = "id")
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    @XmlElement(name = "name")
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    @XmlElement(name = "age")
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

2. Configure Spring Jaxb2Marshaller

Configure the Spring bean definition to bind the target classes to be bound:

<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>com.ram.model.Customer</value>
        </list>
    </property>
</bean>

3. Marshalling and Unmarshalling via Spring

ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
Jaxb2Marshaller marshaller = (Jaxb2Marshaller) context.getBean("jaxb2Marshaller");

// 1. Marshalling (Object to XML)
Customer customer = new Customer();
customer.setId(101);
customer.setName("John Doe");
customer.setAge(30);

marshaller.marshal(customer, new StreamResult(new FileOutputStream("customer.xml")));

// 2. Unmarshalling (XML to Object)
Customer unmarshalledCustomer = (Customer) marshaller.unmarshal(new StreamSource(new FileInputStream("customer.xml")));
System.out.println("Customer Name: " + unmarshalledCustomer.getName());

Related Tutorials from Ram N Java


Click here to watch on Youtube:
https://www.youtube.com/watch?v=DPZjhK66cE4&index=11&list=UUhwKlOVR041tngjerWxVccw

Click the below Image to Enlarge:
Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

Spring and JAXB Integration | Spring Object/XML Mapping | jaxb marshalling and unmarshalling

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ram.core</groupId>
    <artifactId>SpringDemo</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringDemo</name>
    <url>http://maven.apache.org</url>

    <properties>
        <spring.version>5.1.1.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</project>

Company.java

package com.ram.core.model;

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;

@XmlRootElement(name = "CompanyInfo", namespace = "com.ram.core")
@XmlAccessorType(XmlAccessType.NONE)
public class Company
{
    @XmlAttribute(name = "Id")
    private Integer id;

    @XmlElement(name = "CompanyName")
    private String companyName;

    @XmlElement(name = "CEO_Name")
    private String ceoName;

    @XmlElement(name = "Number_Of_Employees")
    private Integer numberOfEmployees;

    public Integer getId()
    {
        return id;
    }

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

    public String getCompanyName()
    {
        return companyName;
    }

    public void setCompanyName(String companyName)
    {
        this.companyName = companyName;
    }

    public String getCeoName()
    {
        return ceoName;
    }

    public void setCeoName(String ceoName)
    {
        this.ceoName = ceoName;
    }

    public Integer getNumberOfEmployees()
    {
        return numberOfEmployees;
    }

    public void setNumberOfEmployees(Integer numberOfEmployees)
    {
        this.numberOfEmployees = numberOfEmployees;
    }

    @Override
    public String toString()
    {
        return "Company [id=" + id + ", companyName=" + companyName
                + ", ceoName=" + ceoName + ", numberOfEmployees="
                + numberOfEmployees + "]";
    }

}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:oxm="http://www.springframework.org/schema/oxm"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
   http://www.springframework.org/schema/oxm  
   http://www.springframework.org/schema/oxm/spring-oxm-4.3.xsd">


    <oxm:jaxb2-marshaller id="jaxbMarshallerBean">
        <oxm:class-to-be-bound
            name="com.ram.core.model.Company" />
    </oxm:jaxb2-marshaller>

</beans>

App.java

package com.ram.core;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;

import com.ram.core.model.Company;

public class App
{

    public static void main(String[] args) throws IOException
    {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        Marshaller marshaller = (Marshaller) context
                .getBean("jaxbMarshallerBean");

        Unmarshaller unmarshaller = (Unmarshaller) context
                .getBean("jaxbMarshallerBean");
     
        Company company = new Company();
        company.setId(201);
        company.setCompanyName("Google");
        company.setCeoName("Peter");
        company.setNumberOfEmployees(50000);

        // Perform Marshaling
        marshaller.marshal(company,
                new StreamResult(new FileWriter("company.xml")));

        System.out.println("XML Created Sucessfully");

        // Perform Unmarshaling
        Company company2 = (Company) unmarshaller
                .unmarshal(new StreamSource(new FileReader("company.xml")));
        System.out.println(company2);
        System.out.println("Converted XML to Object!");

    }
}

Output:

XML Created Sucessfully
Company [id=201, companyName=Google, ceoName=Peter, numberOfEmployees=50000]
Converted XML to Object!

company.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:CompanyInfo Id="201" xmlns:ns2="com.ram.core"><CompanyName>Google</CompanyName><CEO_Name>Peter</CEO_Name><Number_Of_Employees>50000</Number_Of_Employees></ns2:CompanyInfo>

Click the below link to download the code:
https://sites.google.com/site/javaspringram2019/java_spring_2019/SpringDemo_Spring_Jaxb_Integration.zip?attredirects=0&d=1

Github Link:
https://github.com/ramram43210/Java_Spring_2019/tree/master/Spring_2019/SpringDemo_Spring_Jaxb_Integration

Bitbucket Link:
https://bitbucket.org/ramram43210/java_spring_2019/src/2db5cd1f4e7d5ab55ad7af886d6164700143c614/Spring_2019/SpringDemo_Spring_Jaxb_Integration/?at=master

See also:

  • All JavaEE Videos Playlist
  • All JavaEE Videos
  • All JAVA EE Links
  • Spring Tutorial
  • Servlets Tutorial
  • All Design Patterns Links
  • JDBC Tutorial
  • Java Collection Framework Tutorial
  • JAVA Tutorial
  • Kids Tutorial
  • Cooking Tutorial
  • No comments:

    Post a Comment

    Tutorials