`
threeman
  • 浏览: 10628 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

JAVA对象和XML文件绑定

 
阅读更多

目的

在日常工作中,我们经常处理这些编组关系: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);
		}
	}
}


分享到:
评论

相关推荐

    xml报文和java对象互相转换 相关jar包和测试代码

    xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2

    根据xml报文,一键自动生成castor插件maping文件和java对象,方便接口对接以及测试工具包测试说明文档

    castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具

    根据xml报文,一键自动生成castor插件maping文件和java对象

    JAXB完成XML和Java对象的互转

    该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...

    XStream <--> Java 对象序列化为 XML 互换

    XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。 和其他序列化工具相比,XStream 有三个突出的特点: XStream 不关心序列化/逆序列化的类的字段的...

    JAXB技术实现xml与java对象互相转化代码教程

    使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...

    castor R/M映射神器

    castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定。Castor几乎是JAXB的替代品。Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    JAVA_API1.6文档(中文)

    java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的...

    NotJaxbBundle:Symfony 2 捆绑包,用于使用注释将 XML 绑定到 PHP 对象或将 PHP 对象绑定到 XML

    NotJaxbBundle 这个包可以使用注解从 XML 文件中提取 PHP 对象,或者以同样的方式从对象生成 XML 提要。 有点像 Java 中的 SAX;) 最初它是一个工具集成在一个包中,并具有一些附加功能(命名空间,对象的递归性)...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    3种xml解析方法

    共3篇第一篇:用JAXB实现JAVA对象与XML文件的绑定 第二篇:程序设计用JAXB生成一个XML文档 第三篇:dom4jxml文件解析

    基于Java的XML解析与反射设计模式.doc

    xstream可以完美转换xml,与以往的解析xml工具dom相比,xstream是一个易用的、开源 的库,使用起来简单、小巧,容易理解,可以轻易的将java对象和xml文档相互转换,而 且可以修改某个特定的属性和节点名称。...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    Java 1.6 API 中文 New

    java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口...

    java api最新7.0

    java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第2章 Java对象持久化技术概述  2.1 直接通过JDBC API来持久化实体域对象  2.2 ORM简介  2.2.1 对象-关系映射的概念  2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式...

    java开源包11

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

Global site tag (gtag.js) - Google Analytics