`
tom_seed
  • 浏览: 321746 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于xstream注解方式的xml与java对象互转

 
阅读更多

       在接口通信的实际开发中经常会碰到使用XML格式进行两个系统间的交互。通信的客户端使用的方法有很多。

一、使用JAXB或XStream将Java对象与XML进行互转,例子使用XStream:

    Maven依赖:

<dependency>
  <groupId>com.thoughtworks.xstream</groupId>
  <artifactId>xstream</artifactId>
  <version>1.4.7</version>
</dependency>

 

    POJO对象1:

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("request")
public class TradeFlow {
	@XStreamAlias("seriId")
	private String seriId = "1";
	
	@XStreamAlias("parterId")
	private String parterId = "2";
	
	@XStreamAlias("pointSize")
	private String pointSize = "3";
	
	@XStreamAlias("unitId")
	private String unitId = "4";
	
	@XStreamAlias("validateStr")
	private String validateStr = "5";
	
	@XStreamAlias("phones")
        private List<Phone> phones;
	
	@XStreamAlias("telPhones")
	private List<String> telPhones;
	
	@XStreamImplicit(itemFieldName = "telphone2")
	private List<String> telPhones2;
	//省略所有属性的get/set方法
}

   

   POJO对象2:

import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("phone")
public class Phone {
	@XStreamAlias("msisdn")
	private String msisdn;
	//省略所有属性的get/set方法
}

 

    测试方法:

public static void main(String[] args) {
	TradeFlow tradeFlow = new TradeFlow();
        XStream xstream = new XStream();  
        xstream.processAnnotations(TradeFlow.class);
        
        List<Phone> array = new ArrayList<Phone>();
        Phone phone = new Phone();
        phone.setMsisdn("13000000000");
        array.add(phone);
        tradeFlow.setPhones(array);
        
        List<String> telArray = new ArrayList<String>();
        telArray.add("0571-88000000");
        telArray.add("0571-88111111");
        tradeFlow.setTelPhones(telArray);
        
        tradeFlow.setTelPhones2(telArray);
        
        System.out.println(xstream.toXML(tradeFlow)); 
        
        String xml = xstream.toXML(tradeFlow);//对象转换XML字符串
        TradeFlow test = (TradeFlow)xstream.fromXML(xml);//XML字符串转换对象
        System.out.println(test.getParterId());
}

 

    结果如下:

<request>
  <seriId>1</seriId>
  <parterId>2</parterId>
  <pointSize>3</pointSize>
  <unitId>4</unitId>
  <validateStr>5</validateStr>
  <phones>
    <phone>
      <msisdn>13000000000</msisdn>
    </phone>
  </phones>
  <telPhones>
    <string>0571-88000000</string>
    <string>0571-88111111</string>
  </telPhones>
  <telphone2>0571-88000000</telphone2>
  <telphone2>0571-88111111</telphone2>
</request>

   注意:

   1.下划线"_"在xstream中比较特殊,是作为转义字符,所以建议在实际应用中建议不要使用下划线作为xml中的节点名称。

   

   解决方案网上搜索了具体如下:http://www.iteye.com/problems/94338

   2.POJO对象中若参数值为NULL,则xstream渲染时会自动过滤掉该节点。所以如果需要显示该节点,必须赋予相应的空值(例如:初始化一个空数组、空字符串)。

 

   JAXB与XStream之间的比较http://www.blogjava.net/ldd600/archive/2009/03/04/257832.html

   其他注解使用参看资料:

   http://liuzidong.iteye.com/blog/1059861

   http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

 

二、使用jdom读取xml文件或字符串,然后对节点进行操作:

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class Xml2StrReader {
	private static Map<String, String> xmlStr = new HashMap<String, String>(10);
	private Xml2StrReader(){}
	/**
	 * 默认路径为:classpath:webservice/
	 */
	private static String xmlStr(String fileName) throws Exception{
		SAXReader reader = new SAXReader();//取得dom4j的解析器
		Resource res = new ClassPathResource("webservice/"+fileName);
		Document document = reader.read(res.getInputStream());
		String text = document.asXML();
		return text;
	}
	
	/**
	 * 利用HashMap.put若存在则调用get方法的特性
	 * 保证存储到内存时不抛错,大不了获取的时候出现并发就多解析一次,不考虑并发情况
	 */
	public static String getXmlStrFactory(String fileName) throws Exception{
		if(xmlStr.containsKey(fileName))
			return xmlStr.get(fileName);
		String str = xmlStr(fileName);
		xmlStr.put(fileName, str);
		return str;
	}
}
  • 大小: 11.9 KB
分享到:
评论

相关推荐

    xstream轻松解析xml到java对象

    以下是一个简单的示例,演示如何使用XStream进行XML与Java对象的转换: ```java import com.thoughtworks.xstream.XStream; class User { private String name; private int age; // getters and setters ...

    使用XStream是实现XML与Java对象的转换(3)--注解

    在“xstream使用3”这个压缩包文件中,可能包含了使用XStream注解实现XML与Java对象转换的示例代码、测试用例以及相关的说明文档。通过对这些文件的深入学习,开发者可以更好地理解如何在实际项目中运用XStream的...

    xml和java对象互转

    总结来说,"xml和java对象互转"涉及使用如XStream这样的库来方便地在XML和Java对象之间进行数据转换,这对于在Java应用程序中处理和交换XML数据是至关重要的。通过理解这个过程,开发者可以更高效地管理数据,并实现...

    好用的xStream XML和JAVA对象互相转换的简单示例

    然而,将XML与Java对象直接对应起来操作可以大大简化编程工作,这就是XStream库的作用所在。XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...

    java 利用Xstream注解生成和解析xml

    总结起来,Xstream通过注解提供了一种简洁、直观的方式来处理XML和Java对象之间的转换。这种灵活性使得在Java项目中处理XML数据变得更加简单,尤其在需要频繁进行序列化和反序列化的场景下。通过熟练掌握Xstream的...

    JAVA对象与XML互转

    总结来说,Java与XML的互转可以通过多种方式进行,选择哪种方法取决于你的具体需求,如性能、内存占用、易用性等因素。JAXB是Java的标准解决方案,适用于大多数情况;而DOM4J、XStream等第三方库则提供了更灵活的...

    Xstream_java对象和xml的互相转换

    XStream 是一个强大的 Java 库,它允许程序员轻松地将 Java 对象序列化为 XML,同时也能从 XML 数据中反序列化回原来的 Java 对象。这个功能在数据持久化、网络传输或者配置文件存储等方面非常有用。XStream 的设计...

    XStream解析xml 转换成对象案例

    而XStream是一个Java库,它能够将Java对象序列化为XML,反之也能将XML反序列化回Java对象,极大地简化了Java与XML之间的交互。本篇文章将深入探讨如何使用XStream进行XML到对象的转换,并提供一个实际的案例。 首先...

    JavaXml及Bean互转

    JAXB是Java的标准API,它提供了基于注解的方式来进行Java Bean与XML之间的转换。JAXB允许开发者在Java类上使用特定的注解来指定XML元素和属性的映射。 2. **使用步骤**: - 在Java Bean类上添加JAXB注解,如`@...

    XStream解析XML实例

    **XStream解析XML实例** ...总结,XStream是一个强大且易于使用的工具,它简化了Java与XML之间的转换。通过理解上述概念和示例,开发者可以有效地利用XStream来处理XML数据,无论是在常规Java项目还是Android应用中。

    XStream在Java对象和XML之间相互转换

    XStream是一款强大的Java库,主要用于将Java对象序列化为XML,并能从XML反序列化回Java对象。这个功能对于数据存储、网络传输或者XML配置文件的解析非常有用。标题和描述提到的三个JAR文件——xstream-1.3.jar、kxml...

    XStream在JavaBean与XML/JSON 之间相互转换

    XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...

    xStream学习xml,JASON,JAVA对象转换

    XStream库则是Java世界中一个强大的工具,它能够方便地实现XML和JSON与Java对象之间的互相转换。这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 ...

    xml与java对象映射

    通过在Java类上使用特定的注解,JAXB可以将Java对象转换为XML文档,反之亦然。 - **DOM(Document Object Model)**:DOM是一种将XML文档解析成树形结构的API,每个节点代表XML文档的一部分。Java程序员可以通过...

    Xstream生产xml和解析xml

    ### Xstream:Java与XML之间的桥梁 Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化...

    xStream xml to bean

    在Java开发中,数据转换是常见...总之,xStream是一个强大的工具,可以简化Java与XML之间的转换。通过创建这样一个工具类,开发者可以更方便地在XML数据和Java Bean对象之间进行转换,从而提高代码的可读性和可维护性。

    xstream-1.3.1.jar javabean与xml之间的转化

    XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 Java 对象。在标题和描述中提到的 "xstream-1.3.1.jar" 是 XStream 的一个版本,这个 ...

    android XMl 解析神奇xstream 二: 把对象转换成xml

    XStream是一个强大的库,它使得Java对象与XML之间的转换变得极其简单。本篇文章将深入探讨如何在Android环境中利用XStream将对象转换成XML。 首先,我们需要理解XStream的基本工作原理。XStream的核心功能是它可以...

    XStream XML解析

    XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。XStream通过消除XML...

Global site tag (gtag.js) - Google Analytics