最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是

通过socket发送xml格式的报文到指定服务器来进行信息的统一认证。。

因此组装xml格式的报文字符串以及解析服务器返回的xml格式的字符获得所需数据成了

解决问题的关键。。在这之前,以为会有点难。。。做完之后,然并卵,也就那么一回事。。。

  LZ主要用的xStream类。。这个类的完美地解决了XML文档和JAVA对象之间的转换。。

由于刚刚接触这个类。。。对于里面提供的很多功能还没细细挖掘。。只是简单地实现了

我想要实现的功能。。待后续有时间再细嚼慢咽、细细品味。。。

Entrance类:主要提供程序运行的入口。。。

      该类中包含了一个静态的generateHtml()方法、用于生成XML格式的字符串

  1. package com.linjm.xml;
  2.  
  3. public class Entrance {
  4.  
  5. public static void main(String[] args) {
  6.  
  7. String html = generateHtml();
  8.  
  9. System.out.println("############################");
  10.  
  11. TagEntity tagEntity = XMLUtil.fromXml(html, TagEntity.class);
  12.  
  13. System.out.println("解析HTML:");
  14. System.out.println("title:" + tagEntity.getHead().getTitle());
  15.  
  16. System.out.println("输出类信息:");
  17. System.out.println(tagEntity.toString());
  18. }
  19.  
  20. public static String generateHtml() {
  21. TagEntity tagEntity = new TagEntity();
  22.  
  23. Head head = Init.initHead();
  24. Body body = Init.initBody();
  25.  
  26. tagEntity.setHead(head);
  27. tagEntity.setBody(body);
  28.  
  29. String html = XMLUtil.toXml(tagEntity);
  30.  
  31. String top = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
  32.  
  33. System.out.println("生成HTML:\n" + top + html);
  34.  
  35. return html;
  36. }
  37.  
  38. }

先看下程序的运行结果吧。。。看完我们再看后面具体的代码结构。。。

  1. 生成HTML
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <head>
  5. <title>Title</title>
  6. <meta>Meta</meta>
  7. <js>JavaScript</js>
  8. <css>CSS</css>
  9. </head>
  10. <body>
  11. <div>Div</div>
  12. <span>Span</span>
  13. <font>Front</font>
  14. <input>Input</input>
  15. </body>
  16. </html>
  17. ############################
  18. 解析HTML
  19. title:Title
  20. 输出类信息:
  21. head:[title:Title,meta:Meta,js:JavaScript,css:CSS],body:[div:Div,input:Input,font:Front,span:Span]

Init类:主要用于初始化XML中的Head和Body标签内的子标签内容。。。    

  1. package com.linjm.xml;
  2.  
  3. public class Init {
  4.  
  5. public static Head initHead() {
  6. Head head = new Head();
  7.  
  8. head.setTitle("Title");
  9. head.setMeta("Meta");
  10. head.setJs("JavaScript");
  11. head.setCss("CSS");
  12.  
  13. return head;
  14. }
  15.  
  16. public static Body initBody() {
  17. Body body = new Body();
  18.  
  19. body.setDiv("Div");
  20. body.setFont("Front");
  21. body.setInput("Input");
  22. body.setSpan("Span");
  23.  
  24. return body;
  25. }
  26.  
  27. }

TagEntity类:主要是包含了两个字段:head和body。

       也是最终xml中呈现的head标签和body标签。。。

        通过@XStreamAlias注解的方式定义标签中的xml显示内容。。。

       大家可以根据自己的需求定义不同的标签。。。

         head和body标签可根据需求不同而不同。。。

  1. package com.linjm.xml;
  2.  
  3. import com.thoughtworks.xstream.annotations.XStreamAlias;
  4.  
  5. @XStreamAlias("html")
  6. public class TagEntity {
  7. @XStreamAlias("head")
  8. private Head head;
  9.  
  10. @XStreamAlias("body")
  11. private Body body;
  12.  
  13. public Head getHead() {
  14. return head;
  15. }
  16.  
  17. public void setHead(Head head) {
  18. this.head = head;
  19. }
  20.  
  21. public Body getBody() {
  22. return body;
  23. }
  24.  
  25. public void setBody(Body body) {
  26. this.body = body;
  27. }
  28.  
  29. public String toString() {
  30. String str = "head:[" +
  31. "title:"+ head.getTitle() +
  32. ",meta:"+ head.getMeta() +
  33. ",js:"+ head.getJs() +
  34. ",css:"+ head.getCss() +
  35. "]," +
  36. "body:[" +
  37. "div:"+ body.getDiv() +
  38. ",input:"+ body.getInput() +
  39. ",font:"+ body.getFont() +
  40. ",span:"+ body.getSpan() +
  41. "]";
  42. return str;
  43. }
  44.  
  45. }

Head类:该实体类中定义了head标签中的子标签属性字段。。 。

      head标签中的子标签可依据具体实际情况而定

  1. package com.linjm.xml;
  2.  
  3. import com.thoughtworks.xstream.annotations.XStreamAlias;
  4.  
  5. public class Head {
  6.  
  7. @XStreamAlias("title")
  8. private String title;
  9.  
  10. @XStreamAlias("meta")
  11. private String meta;
  12.  
  13. @XStreamAlias("js")
  14. private String js;
  15.  
  16. @XStreamAlias("css")
  17. private String css;
  18.  
  19. public String getTitle() {
  20. return title;
  21. }
  22.  
  23. public void setTitle(String title) {
  24. this.title = title;
  25. }
  26.  
  27. public String getMeta() {
  28. return meta;
  29. }
  30.  
  31. public void setMeta(String meta) {
  32. this.meta = meta;
  33. }
  34.  
  35. public String getJs() {
  36. return js;
  37. }
  38.  
  39. public void setJs(String js) {
  40. this.js = js;
  41. }
  42.  
  43. public String getCss() {
  44. return css;
  45. }
  46.  
  47. public void setCss(String css) {
  48. this.css = css;
  49. }
  50.  
  51. }

Body类:该实体类中 定义了body标签中的子标签属性字段。。。

      body标签中的子标签可依据具体实际情况而定。。。

  1. package com.linjm.xml;
  2.  
  3. import com.thoughtworks.xstream.annotations.XStreamAlias;
  4.  
  5. public class Body {
  6. @XStreamAlias("div")
  7. private String div;
  8.  
  9. @XStreamAlias("span")
  10. private String span;
  11.  
  12. @XStreamAlias("font")
  13. private String font;
  14.  
  15. @XStreamAlias("input")
  16. private String input;
  17.  
  18. public String getDiv() {
  19. return div;
  20. }
  21.  
  22. public void setDiv(String div) {
  23. this.div = div;
  24. }
  25.  
  26. public String getSpan() {
  27. return span;
  28. }
  29.  
  30. public void setSpan(String span) {
  31. this.span = span;
  32. }
  33.  
  34. public String getFont() {
  35. return font;
  36. }
  37.  
  38. public void setFont(String font) {
  39. this.font = font;
  40. }
  41.  
  42. public String getInput() {
  43. return input;
  44. }
  45.  
  46. public void setInput(String input) {
  47. this.input = input;
  48. }
  49.  
  50. }

XMLUtil类:该类定义了xStream中组装XML字符串和解析XML字符串封装方法。。。

      toXml()方法用于将Java对象转为XML字符串;

      fromXml()方法用于解析XML字符串转换为Java对象。

  1. package com.linjm.xml;
  2.  
  3. import com.thoughtworks.xstream.XStream;
  4. import com.thoughtworks.xstream.io.xml.DomDriver;
  5.  
  6. public class XMLUtil {
  7.  
  8. /**
  9. * @desc 将JAVA对象转XML字符串
  10. * @author JimLy
  11. * @date 20160423
  12. * */
  13. public static String toXml(Object obj) {
  14. XStream xs = new XStream(new DomDriver());
  15. xs.processAnnotations(obj.getClass());
  16.  
  17. return xs.toXML(obj);
  18. }
  19.  
  20. /**
  21. * @desc 将XML字符串转JAVA对象
  22. * @author JimLy
  23. * @date 20160423
  24. * */
  25. @SuppressWarnings("unchecked")
  26. public static <T> T fromXml(String xmlStr, Class<T> cls) {
  27. XStream xs = new XStream(new DomDriver());
  28. xs.processAnnotations(cls);
  29. T obj = (T) xs.fromXML(xmlStr);
  30.  
  31. return obj;
  32. }
  33.  
  34. }

  代码实现很简单,也并不是很复杂。。。基本上都是可以看得懂的。。。

为了不使代码篇幅太长,我还是分多个类文件写、就不都写在一个类文件中。。

程序结构设计上存在点瑕疵,,有点啰嗦。。目前只体现出程序的功能。。。

对于xStream也是初次涉及,,也许、大概可能吧、会存在更好的实现方法以及

程序设计上需要优化的地方另当别论。。。

  看完博文觉得对这个有点兴趣的话,可以自己动手code一番。。。

也不枉花了这么多时间来看,,既然看了就得有点收获不是吗。。。

需要用到的jar包:xstream-1.4.7.jar

JAVA对象和XML文档、原来他们之间还有这一出的更多相关文章

  1. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  2. org.w3c.dom(java dom)解析XML文档

    位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...

  3. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  4. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  5. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...

  6. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

    一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...

  7. dom4j解析xml文档全面介绍

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

  8. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  9. 使用GDataXML生成、修改XML文档-陈棚

    使用GDXML生成XML文档的步骤如下. 1.调用GDataXMLNode的elementWithName:方法创建GDataXMLElement对象,对象作为XML文档的根元素. 2.调用GData ...

随机推荐

  1. 文件件监听器,android系统拍照功能调用后删除系统生成的照片

    先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...

  2. web会话管理

    http协议是无状态的协议,也就是说服务器不知道这个http连接是那个浏览器发过来的. 要标识会话的唯一,有两种方法:1 Cookie  2 会话级cookie(开关浏览器算一次会话) 和 持久化的c ...

  3. 《Java JDK7 学习笔记》课后练习题2

    1.如果在hello.java中撰写以下的程序代码: public class Hello {     public static dmain(String[]args) {          Sys ...

  4. Oracle索引梳理系列(二)- Oracle索引种类及B树索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  5. English -有感过四六级后的托福单词表-附下载

    好像自从上学期不高不低过了六级之后就没怎么持续接触英语的东西了,欧,除了要debug的时候遇到问题了,去Google到了再用那些仅有的英语知识去看别人的文章.可能是因为看到的都是自己平时接触过的方面的 ...

  6. centos6.5编译安装lamp开发环境

    一.系统以及软件的准备 系统及编译安装包的下载地址:http://pan.baidu.com/s/1jIjqinc   密码:ghc2 说明:由于centos6.5是分卷压缩的,且压缩为三个压缩包,所 ...

  7. js中json对象和字符串的转换

    JSON.parse() : 字符串-->json对象 var str = '{"name":"huangxiaojian","age" ...

  8. 作为程序员之 Vim(一)

    开始使用 Vim(一) vim被称为是编辑器之神,如果可以学好vim的话,就可以在键盘上 “健指如飞” 了,可以完全摆脱鼠标来进行文本的定位编辑. 当然,vim还可以进行各种配置,装上各种插件,做成 ...

  9. nodejs——网络编程模块

    net模块提供了一个异步网络包装器,用于TCP网络编程,它包含了创建服务器和客户端的方法.dgram模块用于UDP网络编程. 参考链接:https://nodejs.org/api/net.html, ...

  10. webstorm10 注册码

    亲测注册码适合WebStorm 10的所有版本.WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编 ...