目的
在日常工作中,我们经常处理这些编组关系: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包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用
根据xml报文,一键自动生成castor插件maping文件和java对象,方便接口对接以及测试工具包测试说明文档
根据xml报文,一键自动生成castor插件maping文件和java对象
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...
使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...
XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。 和其他序列化工具相比,XStream 有三个突出的特点: XStream 不关心序列化/逆序列化的类的字段的...
castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定。Castor几乎是JAXB的替代品。Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射...
JAXB 是 Java 语言中的一种 XML 数据绑定技术,用于将 Java 对象转换为 XML 文件。XmlSerializer 是 .NET 中的一种 XML 序列化技术,用于将 .NET 对象转换为 XML 文件。 XML 文件的样式 XML 文件可以使用 CSS ...
第2章 Java对象持久化技术概述 2.1 直接通过JDBC API来持久化实体域对象 2.2 ORM简介 2.2.1 对象-关系映射的概念 2.2.2 ORM中间件的基本使用方法 2.2.3 常用的ORM中间件 2.3 实体域对象的其他持久化模式...
java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的...
NotJaxbBundle 这个包可以使用注解从 XML 文件中提取 PHP 对象,或者以同样的方式从对象生成 XML 提要。 有点像 Java 中的 SAX;) 最初它是一个工具集成在一个包中,并具有一些附加功能(命名空间,对象的递归性)...
共3篇第一篇:用JAXB实现JAVA对象与XML文件的绑定 第二篇:程序设计用JAXB生成一个XML文档 第三篇:dom4jxml文件解析
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
xstream可以完美转换xml,与以往的解析xml工具dom相比,xstream是一个易用的、开源 的库,使用起来简单、小巧,容易理解,可以轻易的将java对象和xml文档相互转换,而 且可以修改某个特定的属性和节点名称。...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口...
java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口...
与从XSD模式文件自动生成的绑定不同, jibx-bindings Java类和JiBX绑定文件都是手工制作的,并且对开发人员友好,基于Java对象是主要对象的原理,而XML文档只是其表达。 模块和依赖项 每个模块都捆绑到其自己的JAR...