🚀 Master Spring & Java with Ram N Java!
Subscribe today for practical Spring frameworks, OXM mappings, and clear Java tutorials.
🔔 Subscribe to YouTube ChannelOverview: 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'sMarshallerandUnmarshallerinterfaces.
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>
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 + "]";
}
}
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>
<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!");
}
}
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 [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:
No comments:
Post a Comment