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);
		}
	}
}


相关文章
|
5天前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
49 23
|
13天前
|
Java 数据安全/隐私保护
Java 类和对象
本文介绍了Java编程中类和对象的基础知识,作为面向对象编程(OOP)的核心概念。类是对象的蓝图,定义实体类型;对象是具体实例,包含状态和行为。通过示例展示了如何创建表示汽车的类及其实例,并说明了构造函数、字段和方法的作用。同时,文章还探讨了访问修饰符的使用,强调封装的重要性,如通过getter和setter控制字段访问。最后总结了类与对象的关系及其在Java中的应用,并建议进一步学习继承等概念。
|
19天前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
54 0
|
19天前
|
Java
java中一个接口A,以及一个实现它的类B,一个A类型的引用对象作为一个方法的参数,这个参数的类型可以是B的类型吗?
本文探讨了面向对象编程中接口与实现类的关系,以及里氏替换原则(LSP)的应用。通过示例代码展示了如何利用多态性将实现类的对象传递给接口类型的参数,满足LSP的要求。LSP确保子类能无缝替换父类或接口,不改变程序行为。接口定义了行为规范,实现类遵循此规范,从而保证了多态性和代码的可维护性。总结来说,接口与实现类的关系天然符合LSP,体现了多态性的核心思想。
28 0
|
Java 大数据 Apache
|
Java Windows 移动开发
|
Java
JAVA读取文件的几种方法
喜欢的朋友可以关注下,粉丝也缺。 InputStreamReader+BufferedReader读取字符串 InputStreamReader 将字节流转换为字符流。
1315 0
|
Java Windows 移动开发
[Java]读取文件方法大全
1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容 4、随机读取文件内容  public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
712 0
[Java]读取文件方法大全
1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容 4、随机读取文件内容 public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
738 0
下一篇
oss创建bucket