JAVA对象和XML文件绑定

简介: <p>目的</p> <p>    在日常工作中,我们经常处理这些编组关系:JAVA对象 <--> XML文件;JAVA对象 <--> 数据库表。本文简单介绍一下JAVA对象和XML文件之间的绑定。虽然代码简单,但解决问题的广度与思路也是非常重要的。</p> <p><br></p> <p>    首先,在Maven中引入要用到的jar包。<br></p> <p

目的

    在日常工作中,我们经常处理这些编组关系:JAVA对象 <--> XML文件;JAVA对象 <--> 数据库表。本文简单介绍一下JAVA对象和XML文件之间的绑定。虽然代码简单,但解决问题的广度与思路也是非常重要的。


    首先,在Maven中引入要用到的jar包。

		<dependency>
			<groupId>castor</groupId>
			<artifactId>castor</artifactId>
			<version>1.0</version>
		</dependency>
		<dependency>
			<groupId>xerces</groupId>
			<artifactId>xerces</artifactId>
			<version>2.4.0</version>
		</dependency>


    1. 写两个有包含关系的Bean

package shuai.study.castor.bean;

import java.util.Collection;
import java.util.LinkedList;

public class CompanyBean {
	private String type;
	private String name;
	private String address;
	private Collection<EmployeeBean> employeeBeanCollection;

	public CompanyBean() {
		this.employeeBeanCollection = new LinkedList<EmployeeBean>();
	}

	public String getType() {
		return this.type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getName() {
		return this.name;
	}

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

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Collection<EmployeeBean> getEmployeeBeanCollection() {
		return this.employeeBeanCollection;
	}

	public void setEmployeeBeanCollection(Collection<EmployeeBean> employeeBeanCollection) {
		this.employeeBeanCollection = employeeBeanCollection;
	}

	public void addEmployeeBean(EmployeeBean employeeBean) {
		this.employeeBeanCollection.add(employeeBean);
	}
}

package shuai.study.castor.bean;

public class EmployeeBean {
	private String id;
	private String name;
	private String sex;
	private int age;
	private String address;

	public String getId() {
		return this.id;
	}

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

	public String getName() {
		return this.name;
	}

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

	public String getSex() {
		return this.sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public int getAge() {
		return this.age;
	}

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

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}

    2. 我们定义一个mapping文件,阐述JAVA对象和XML文件之间的关系。

<!DOCTYPE databases PUBLIC
"-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
"http://castor.exolab.org/mapping.dtd">
<mapping>
	<description>Flight Route Mapping</description>
	<class name="shuai.study.castor.bean.CompanyBean">
		<map-to xml="company" />
		<field name="type">
			<bind-xml name="type" node="attribute" />
		</field>
		<field name="name">
			<bind-xml name="name" />
		</field>
		<field name="address">
			<bind-xml name="address" />
		</field>
		<field name="employeeBeanCollection" collection="collection"
			type="shuai.study.castor.bean.EmployeeBean">
			<bind-xml name="employee" />
		</field>
	</class>
	<class name="shuai.study.castor.bean.EmployeeBean" auto-complete="true">
		<field name="id">
			<bind-xml name="id" node="attribute" />
		</field>
		<field name="name">
			<bind-xml name="name" />
		</field>
		<field name="sex">
			<bind-xml name="sex" />
		</field>
		<field name="age">
			<bind-xml name="age" />
		</field>
		<field name="address">
			<bind-xml name="address" />
		</field>
	</class>
</mapping>

    3. 写一个测试类,处理JAVA对象与XML文件之间的编组与反编组。

package shuai.study.castor;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;

import shuai.study.castor.bean.CompanyBean;
import shuai.study.castor.bean.EmployeeBean;

public class CastorDemo {

	public static void main(String[] args) {
		EmployeeBean employeeBean = new EmployeeBean();
		employeeBean.setId("37");
		employeeBean.setName("shuai");
		employeeBean.setSex("male");
		employeeBean.setAge(30);
		employeeBean.setAddress("Ronghua South Road, Hi-Tech Zone, Chengdu");

		CompanyBean companyBean = new CompanyBean();
		companyBean.setType("foreign-owned");
		companyBean.setName("Tieto");
		companyBean.setAddress("Tianfu Software Park, Tianfu Avenue, Hi-Tech Zone, Chengdu");
		companyBean.addEmployeeBean(employeeBean);

		try {
			// Mapping file path
			String companyEmployeeMapPath = CastorDemo.class.getResource("/file/map/company_employee_map.xml").getPath();
			Mapping companyEmployeeMapping = new Mapping();
			// Loading Mapping file
			companyEmployeeMapping.loadMapping(companyEmployeeMapPath);

			// Output file path, make sure this path exist
			String companyEmployeeOutputPath = CastorDemo.class.getResource("/file/output/company_employee_output.xml").getPath();
			File companyEmployeeOutputFile = new File(companyEmployeeOutputPath);

			Writer companyEmployeeWriter = new FileWriter(companyEmployeeOutputFile);

			// Marshal Object to XML
			Marshaller marshaller = new Marshaller(companyEmployeeWriter);
			marshaller.setMapping(companyEmployeeMapping);
			marshaller.marshal(companyBean);

			// Un-Marshal XML to Object
			Reader companyEmployeeReader = new FileReader(companyEmployeeOutputFile);
			Unmarshaller unmarshaller = new Unmarshaller(companyEmployeeMapping);
			CompanyBean companyEmployeeBean = (CompanyBean) unmarshaller.unmarshal(companyEmployeeReader);

			System.out.println("Company is " + companyEmployeeBean.getName() + " at " + companyEmployeeBean.getAddress());
		} catch (IOException ioe) {
			ioe.printStackTrace(System.err);
		} catch (MarshalException me) {
			me.printStackTrace(System.err);
		} catch (ValidationException ve) {
			ve.printStackTrace(System.err);
		} catch (MappingException me) {
			me.printStackTrace(System.err);
		}
	}
}


相关文章
|
6天前
|
XML Java 数据库连接
mybatis中在xml文件中通用查询结果列如何使用
mybatis中在xml文件中通用查询结果列如何使用
8 0
|
8天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
18天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
36 0
|
4天前
|
存储 Java 编译器
对象的交响曲:深入理解Java面向对象的绝妙之处
对象的交响曲:深入理解Java面向对象的绝妙之处
28 0
对象的交响曲:深入理解Java面向对象的绝妙之处
|
8天前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
21 0
|
9天前
|
Java
在Java中,多态性允许不同类的对象对同一消息做出响应
【4月更文挑战第7天】在Java中,多态性允许不同类的对象对同一消息做出响应
15 2
|
13天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
18天前
|
Java
Java常用封装Base对象
Java常用封装Base对象
8 0
|
Java 大数据 Apache