加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService复杂类型数据传输(二dom4j方式)

发布时间:2020-12-17 00:42:01 所属栏目:安全 来源:网络整理
导读:???? WebService在传递数据的时候只能传递字符串,当我们返回一些简单的字符串时我们可以直接返回,但是当我们想返回比如List,Map等复杂类型的数据时拼接字符串就是个很麻烦的工作,这时我们就用到了dom4j这个工具。 ??????? 当我们从数据库中查询出很多个
???? WebService在传递数据的时候只能传递字符串,当我们返回一些简单的字符串时我们可以直接返回,但是当我们想返回比如List,Map等复杂类型的数据时拼接字符串就是个很麻烦的工作,这时我们就用到了dom4j这个工具。

??????? 当我们从数据库中查询出很多个对象类型时,我们一般都存放在List中。像这种数据就很难用拼接字符串的形式进行传递。我的解决办法就是利用dom4j把它写成一个xml格式的字符串,然后在客户端再利用dom4j解释。

???? ?? 假如我们从数据库中查询的是一个Student对象,该对象有name和agel两个属性,我们将大量的Student对象储存在List中。下面我们想利用dom4j把List数据变成如下格式的xml文件类型的字符串:

[xhtml:showcolumns:firstline[1]] view plain copy print ?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. ??????<root>??
  3. ??????????<student>??
  4. ??????????????<name>张三</name>??
  5. ??????????????<age>26</age>??
  6. ??????????</student>??
  7. ??????????<student>??
  8. ??????????????<name>赵四</name>??
  9. ??????????????<age>34</age>??
  10. ??????????</student>??
  11. ??????</root>??

webservice端java代码如下:

[java:showcolumns:firstline[1]] view plain copy print ?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. import?java.util.List;??
  2. import?org.dom4j.Document;??
  3. import?org.dom4j.DocumentHelper;??
  4. import?org.dom4j.Element;??
  5. import?org.dom4j.io.OutputFormat;??
  6. import?vo.UnitPO;??
  7. import?DAO.unitDao;??
  8. public?class?Service02?{?????
  9. ????public?String?method(){??
  10. ?????????
  11. ????????Document?document?=?DocumentHelper.createDocument();??
  12. ????????Element?root?=?document.addElement("root");??
  13. ?????????
  14. ????????Element?stuElement?=?null;??
  15. ????????Element?nameElement?=?null;??
  16. ????????Element?ageElement?=?null;??
  17. ?????????
  18. ????????//第一个student节点 ??
  19. ????????stuElement?=?root.addElement("student");??
  20. ????????//添加两个子节点 ??
  21. ????????nameElement?=?stuElement.addElement("name");??
  22. ????????ageElement?=?stuElement.addElement("age");?????
  23. ????????//向两个子节点中添加文本内容 ??
  24. ????????nameElement.addText("张三");??
  25. ????????ageElement.addText("26");??
  26. ?????????
  27. ????????//同理第二个student节点 ??
  28. ????????stuElement?=?root.addElement("student");?????????
  29. ????????nameElement?=?stuElement.addElement("name");??
  30. ????????ageElement?=?stuElement.addElement("age");?????
  31. ????????nameElement.addText("赵四");??
  32. ????????ageElement.addText("34");??
  33. ????????try?{??
  34. ????????????OutputFormat?format?=?OutputFormat.createPrettyPrint();??
  35. ????????????//?设置XML文件的编码格式 ??
  36. ????????????format.setEncoding("UTF-8");??
  37. ????????????return?document.asXML();??
  38. ????????}?catch?(Exception?e)?{??
  39. ????????????System.out.println(e.getMessage());??
  40. ????????????return?"error";??
  41. ????????}??
  42. ????}??
  43. }??

?

??? ? ? 这样就将我们想传送的复杂数据变成了xml格式是字符串,下面在客户端就可以解释出我们想要的数据了。

client端java代码如下:

[java:showcolumns:firstline[1]] view plain copy print ?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. import?java.io.StringReader;??
  2. import?java.util.List;??
  3. import?org.dom4j.Document;??
  4. import?org.dom4j.Element;??
  5. import?org.dom4j.io.SAXReader;??
  6. import?webservice.Service02Proxy;??
  7. public?class?Test?{??
  8. ????public?static?void?main(String[]?args)?{?????????
  9. ????????try{??
  10. ????????????//创建代理类 ??
  11. ????????????Service02Proxy?proxy?=?new?Service02Proxy();??
  12. ????????????//接受传过来的XML字符串 ??
  13. ????????????String?str?=?proxy.method();??
  14. ????????????//解释该字符串 ??
  15. ????????????StringReader?read?=?new?StringReader(str);??
  16. ????????????SAXReader?reader?=?new?SAXReader();??
  17. ????????????Document?doc?=?reader.read(read);???
  18. ????????????Element?root?=?doc.getRootElement();??
  19. ????????????//该节点由多个student构成,所以返回值是List类型??
  20. ????????????List?list?=?root.elements("student");???
  21. ?????????????
  22. ????????????for(int?i?=?0;i?<?list.size();i++){??
  23. ?????????????????
  24. ????????????????Element?student?=?(Element)list.get(i);??
  25. ????????????????Element?name?=?student.element("name");??
  26. ????????????????Element?age?=?student.element("age");??
  27. ?????????????????
  28. ????????????????//打印得到的数据 ??
  29. ????????????????System.out.println(name.getTextTrim()+":"+age.getTextTrim());??
  30. ?????????????????
  31. ????????????}??
  32. ?????
  33. ????????}catch(Exception?e){??
  34. ?????????????
  35. ????????????e.printStackTrace();??
  36. ?????????????
  37. ????????}??
  38. ????}??
  39. }??

控制台输出为:

?????????????????? 张三:26
?????????????????? 赵四:34

?????? 每种编程语言可能接受时用的类型不同,但方法大同小异。代码如有问题,欢迎给予评价。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读