1、简介

XStream是一个序列化JavaBean为XML文件以及反序列化的工具。

2、准备

2.1、XML回顾

在学习这部分内容前,假设你对XML以及有一定的了解,至少能够分辨出XML的元素、属性、字段、包、系统属性、类型等等。例如有下边的一段XML:

<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>

它的元素、属性、元素等对应关系如下:

看懂了上边的对应关系,就可以进行往下阅读了。

2.2、能需要了解的概念

  • 别名

JavaBean的属性和XML里的表签名可能名称不一样,那么在相互转换过程中通过来设置别名来解决该问题。给Java类或某字段设置别名,在转换对应的XML里,该别名就是XML里的标签名称。可以设置别名的有:类、同一名字的全部属性,某一类中的某名字的属性、某类中的某字段、包、系统属性、类型。

通过调用XStream的api来设置别名:

void    alias(String name, Class type)
void alias(String name, Class type, Class defaultImplementation)
void aliasAttribute(Class definedIn, String attributeName, String alias)
void aliasAttribute(String alias, String attributeName)
void aliasField(String alias, Class definedIn, String fieldName)
void aliasPackage(String name, String pkgName)
void aliasSystemAttribute(String alias, String systemAttributeName)
void aliasType(String name, Class type)

还可以通过注解来给类和字段配置别名:

@XStreamAlias("student")
public claa Student{
  @XStreamAlias("personName")
  private String name;
}

用注解时,需要在xStream对象上设置使用注解来取别名:

xStream.processAnnotations(Student.class); 
  • 选择哪些属性座位XML的标签属性
void    useAttributeFor(Class type);//转换后该类对应的标签作为xml的属性
void useAttributeFor(Class definedIn, String fieldName);//该类下名为fieldName的字段在转换后,做为definedIn对应标签的属性
void useAttributeFor(String fieldName, Class type);//该类下名为fieldName的字段在转换后,做为definedIn对应标签的属性
  • 输入与输出

JavaBean转到XML时,转出的XML字符可以直接返回给调用处,也可以用字符流或字节流输出:

String    toXML(Object obj);//返回字符串
void toXML(Object obj, OutputStream out);//字节流
void toXML(Object obj, Writer out);//字符流

XML转到JavaBean时,加载的XML文件可以是一段XML字符串、一个XML文件对象、XML文件字符输入流、XML文件字节输入流,甚至一个URL资源。可以指定传入一个JavaBean,将会用XML各个元素值来填充传入的JavaBean并返回,这里不会重新创建出一个JavaBean:

Object    fromXML(File file);
Object fromXML(File file, Object root);
Object fromXML(InputStream input);
Object fromXML(InputStream input, Object root);
Object fromXML(Reader reader);
Object fromXML(Reader xml, Object root);
Object fromXML(String xml);
Object fromXML(String xml, Object root);
Object fromXML(URL url);
Object fromXML(URL url, Object root);

3、实例演练

objectAlias为将要设置的别名和字段对应集合。
  • JavaBean转为XML
  /**
* JavaBean转为XML
* @param objectT 将要转的JavaBean
* @param objectAlias 别名集合
* @return 返回的String字符串
* @throws Exception
*/
public static <T> String objectToContext(T objectT,
Map<String, Class> objectAlias) throws Exception {
XStream xStream = null;
String context = null; try {
xStream = new XStream(new Dom4JDriver()); for(Map.Entry<String, Class> entry : objectAlias.entrySet()){
xStream.alias(entry.getKey(), entry.getValue());
}
context = xStream.toXML(objectT);
} catch (Exception e) {
LOGGER.error(e.getMessage());
throw e;
}
return context;
}
  • XML转为JavaBean
    /**
* 把XML字符串转为对象,并返回
* @param xmlContent XML字符串
* @param objectAlias 别名集合
* @param clazz 将要转换成的对象类型
* @throws Exception
*/
public static <T> T contextToObject(String xmlContent,Map<String, Class> objectAlias, Class<T> clazz) throws Exception {
XStream xStream = null;
T objectT = null; try {
xStream = new XStream(new Dom4JDriver()); for(Map.Entry<String, Class> entry : objectAlias.entrySet()){
xStream.alias(entry.getKey(), entry.getValue());
} objectT = (T) xStream.fromXML(xmlContent);
} catch (Exception e) {
LOGGER.error(e.getMessage());
throw e;
} return objectT;
}

Java实现XML和JavaBean互转 - XStream的更多相关文章

  1. JAVA中 XML与数据库互转 学习笔记三

    要求 必备知识 JAVA基础知识,XML基础知识,数据库的基本操作. 开发环境 MyEclipse10/MySql5.5 资料下载 源码下载   数据库在数据查询,修改,保存,安全等方面与其他数据处理 ...

  2. Json、JavaBean、Map、XML之间的互转

    思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...

  3. Java的xml与map,与Bean互转

    xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j. ...

  4. java实现xml格式与javabean之间的转换XmlUtil类

    XmlUtil类:不多说,直接撸代码: /** * java 转换成xml * @Title: toXml * @Description: TODO * @param obj 对象实例 * @retu ...

  5. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  6. XStream进行xml和bean互转

    加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>x ...

  7. xml-mapping xml 与 java 对象转换映射框架,像 XStream 一样优雅地读写xml

    xml xml 是 java 实现的 xml 框架. 希望以最优雅的方式进行 xml 和 java 之间的转换处理,一行代码搞定一切. 特点 对象的和 xml 的互相映射 支持注解 @Alias 指定 ...

  8. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

  9. java解析XML(转载)

    使用Dom4j解析XML dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的 ...

随机推荐

  1. MVC应用程序的jQuery代码重构

    先看看这篇<在jQuery定义自己函数>http://www.cnblogs.com/insus/p/3415444.html 程序越看越是有重构的地方. 先看1部分,由于在#16代码有宣 ...

  2. Linux中用HttpWebRequest或WebClient访问远程https路径

    要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo ...

  3. servlet 中处理 json 请求,并访问 service 类,返回处理结果

    前言:jar 包中的 servlet 必须可以处理前端发出的 ajax 请求,接收参数,并返回结果. github地址:yuleGH github 这里有个约定,url 地址是 .json 结尾的,如 ...

  4. grunt搭建自动化的web前端开发环境(转)

    1. 前言 各位web前端开发人员,如果你现在还不知道grunt或者听说过.但是不会熟练使用grunt,那你就真的真的真的out了(三个“真的”重复,表示重点).至于grunt的作用,这里不详细说了, ...

  5. PHP实现大转盘抽奖算法

    流程: 1.拼装奖项数组,2.计算概率,3.返回中奖情况 代码如下:中奖概率 ' v ' 可以在后台设置,传到此方法中,注意传整数 function get_gift(){ //拼装奖项数组 // 奖 ...

  6. 设计模式(13)--Chain of Responsibility(责任链模式)--行为型

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.模式定义: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一 ...

  7. var和const和let的区别

    简述: 1.前端的变量申明,可以用到var,ES6的const(衡量)/let(变量) 2.在ES5用的都是var,到ES6之后,也就是2015年开始出现const/let. var 不会报错,有声明 ...

  8. Canvas:飞机大战 -- 游戏制作

    Canvas:飞机大战 最开始我们要初始化信息,我们有五个状态:游戏封面,加载状态,运行状态,游戏暂停,游戏结束. 我们还需要  得分--score,生命--life. var START = 1;/ ...

  9. IDEA项目搭建四——使用Mybatis实现Dao层

    一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...

  10. 比较完整的PeopleSoft工具表名

    因为找不到其他地方有相对完整的PeopleSoft表名,因为我自己总结了一份. 在这里尝试提供一个庞大的PeopleSoft表列表,以便当你想快速访问PeopleSoft工具表时候,可以快速的查看这篇 ...