在接口通信的实际开发中经常会碰到使用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; } }
相关推荐
以下是一个简单的示例,演示如何使用XStream进行XML与Java对象的转换: ```java import com.thoughtworks.xstream.XStream; class User { private String name; private int age; // getters and setters ...
在“xstream使用3”这个压缩包文件中,可能包含了使用XStream注解实现XML与Java对象转换的示例代码、测试用例以及相关的说明文档。通过对这些文件的深入学习,开发者可以更好地理解如何在实际项目中运用XStream的...
总结来说,"xml和java对象互转"涉及使用如XStream这样的库来方便地在XML和Java对象之间进行数据转换,这对于在Java应用程序中处理和交换XML数据是至关重要的。通过理解这个过程,开发者可以更高效地管理数据,并实现...
然而,将XML与Java对象直接对应起来操作可以大大简化编程工作,这就是XStream库的作用所在。XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的...
XStream是一个强大的库,专门用于XML与Java对象之间的互相转换。这篇博文将深入探讨如何利用XStream的转换器功能来优化这一过程。 XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而...
总结起来,Xstream通过注解提供了一种简洁、直观的方式来处理XML和Java对象之间的转换。这种灵活性使得在Java项目中处理XML数据变得更加简单,尤其在需要频繁进行序列化和反序列化的场景下。通过熟练掌握Xstream的...
总结来说,Java与XML的互转可以通过多种方式进行,选择哪种方法取决于你的具体需求,如性能、内存占用、易用性等因素。JAXB是Java的标准解决方案,适用于大多数情况;而DOM4J、XStream等第三方库则提供了更灵活的...
XStream 是一个强大的 Java 库,它允许程序员轻松地将 Java 对象序列化为 XML,同时也能从 XML 数据中反序列化回原来的 Java 对象。这个功能在数据持久化、网络传输或者配置文件存储等方面非常有用。XStream 的设计...
而XStream是一个Java库,它能够将Java对象序列化为XML,反之也能将XML反序列化回Java对象,极大地简化了Java与XML之间的交互。本篇文章将深入探讨如何使用XStream进行XML到对象的转换,并提供一个实际的案例。 首先...
JAXB是Java的标准API,它提供了基于注解的方式来进行Java Bean与XML之间的转换。JAXB允许开发者在Java类上使用特定的注解来指定XML元素和属性的映射。 2. **使用步骤**: - 在Java Bean类上添加JAXB注解,如`@...
**XStream解析XML实例** ...总结,XStream是一个强大且易于使用的工具,它简化了Java与XML之间的转换。通过理解上述概念和示例,开发者可以有效地利用XStream来处理XML数据,无论是在常规Java项目还是Android应用中。
XStream是一款强大的Java库,主要用于将Java对象序列化为XML,并能从XML反序列化回Java对象。这个功能对于数据存储、网络传输或者XML配置文件的解析非常有用。标题和描述提到的三个JAR文件——xstream-1.3.jar、kxml...
XStream是一个开源库,它为Java对象提供了简单且直观的XML序列化和反序列化的解决方案。它不仅能够将Java对象转换成XML,反之亦然,还能支持JSON格式的转换。这个强大的工具在处理数据交换、持久化或配置文件时非常...
XStream库则是Java世界中一个强大的工具,它能够方便地实现XML和JSON与Java对象之间的互相转换。这篇博客文章,标题为“xStream学习xml,JASON,JAVA对象转换”,显然会探讨如何利用XStream来处理这两种数据格式。 ...
通过在Java类上使用特定的注解,JAXB可以将Java对象转换为XML文档,反之亦然。 - **DOM(Document Object Model)**:DOM是一种将XML文档解析成树形结构的API,每个节点代表XML文档的一部分。Java程序员可以通过...
### Xstream:Java与XML之间的桥梁 Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化...
在Java开发中,数据转换是常见...总之,xStream是一个强大的工具,可以简化Java与XML之间的转换。通过创建这样一个工具类,开发者可以更方便地在XML数据和Java Bean对象之间进行转换,从而提高代码的可读性和可维护性。
XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 Java 对象。在标题和描述中提到的 "xstream-1.3.1.jar" 是 XStream 的一个版本,这个 ...
XStream是一个强大的库,它使得Java对象与XML之间的转换变得极其简单。本篇文章将深入探讨如何在Android环境中利用XStream将对象转换成XML。 首先,我们需要理解XStream的基本工作原理。XStream的核心功能是它可以...
XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。XStream通过消除XML...