使用axis发送xml报文,返回并解析报文实例

前段时间刚好学了一点webservice,因此想和大家分享一下我的成果,因为能力原因,只能做个小实例,望大家见谅!

此实例的思路是:(1)用String类型构造好需要发送的报文;(2)使用axis调用服务发送报文; (3)将返回的报文进行解析。

如下是axis所使用的包:

接下来是实例代码:

  1 //测试实例
  2 public class test {
  3 
  4     public static void main(String[] args) {
  5         // TODO Auto-generated method stub
  6         test t=new test();
  7         //发送的报文
  8         String requestXml="<?xml version=\"1.0\" encoding=\"UTF-8\"?><service xmlns=\"http://www.chinatax.gov.cn/spec/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><head><tran_id>SWNDPJ</tran_id><channel_id>SWZJ</channel_id><tran_seq>sdfas123</tran_seq><tran_date>20151102</tran_date><tran_time>14494777</tran_time><rtn_code>0</rtn_code><rtn_msg><Code>0000</Code><Message>交易成功</Message><Reason>获取纳税人年度评价结果成功。</Reason></rtn_msg><expand><name>identityType</name><value></value></expand><expand><name>sjry</name><value></value></expand><expand><name>sjjg</name><value></value></expand></head><body><![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?><taxML xsi:type=\"nsxyPjxxYwbw\"  bbh=\"v1.0\" xmlbh=\"String\" xmlmc=\"String\" xsi:schemaLocation=\"http://www.chinatax.gov.cn/dataspec/TaxMLBw_NSXY_PJXX_00001_Response_V1.0.xsd\" xmlns=\"http://www.chinatax.gov.cn/dataspec/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><nsxypjxx><nsxypjxxHead><type>NSXY</type><pjlx>NSXY</pjlx></nsxypjxxHead><nsxypjxxBody><nsrsbh>4406817919</nsrsbh><nsrmc></nsrmc><pjnd>2015</pjnd><pjjb></pjjb><pjfs></pjfs><sflhpj>1</sflhpj></nsxypjxxBody></nsxypjxx></taxML>]]></body></service>";;
  9         String responseXml=t.getResponseXml(requestXml);
 10         Map xmlMap=t.parseXml2Map(responseXml);
 11         System.out.println(xmlMap);
 12     }
 13     /**
 14      * 使用axis调用接口发送报文
 15      * @param requestXml 发送的报文
 16      * @return responseXml 返回的报文
 17      * @throws Exception
 18      */
 19     public static String getResponseXml(String requestXml) throws Exception{
 20         String url = "";//输入TargetEndpointAddress的地址
 21         String TargetEndpointAddress = url;
 22         String TargetNamespace = "";//输入TargetNamespace
 23         Service service = new Service();
 24         String responseXML = "";
 25         Call call = null;
 26         call = (Call) service.createCall();
 27         QName qn = new QName(TargetNamespace, "doService");//doService为调用的服务里的方法
 28         call.setTargetEndpointAddress(TargetEndpointAddress);
 29         call.addParameter("parameters", qn, ParameterMode.IN);
 30         call.setReturnType(XMLType.XSD_STRING);
 31         call.setOperationName(qn);
 32         String[] parameters = { requestXml };
 33         responseXML = (String) call.invoke(parameters);
 34         System.out.println(responseXML);
 35     return responseXML;
 36 }
 37     
 38     /**
 39      * 解析返回的报文数据 responseXml
 40      * @author Administrator
 41      *
 42      */
 43     @SuppressWarnings({ "static-access", "rawtypes", "unused", "unchecked" })
 44     public Map parseXml2Map(String xml){
 45             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //得到DOM解析器的工厂实例
 46             DocumentBuilder builder;
 47         }
 48             Map pjMap = new HashMap();
 49 
 50             Document document = ParseXml2Doc(xml);
 51             Element root = document.getDocumentElement();
 52             //解析body体报文
 53             Node    body =root.getElementsByTagName("body").item(0);
 54             String bodyxml = body.getTextContent();
 55             Document bodyDoc = ParseXml2Doc(bodyxml);
 56             Element taxMLElement = bodyDoc.getDocumentElement();
 57             NodeList taxMLList = taxMLElement.getChildNodes();
 58             for (int i = 0; i < taxMLList.getLength(); i++) {
 59                 // 是节点,进入节点下,否则不进
 60                 if (taxMLList.item(i) instanceof Element) {
 61                     String cc = taxMLList.item(i).getNodeName();
 62                     NodeList swsxList = taxMLList.item(i).getChildNodes();
 63                     // if ("nsxypjxxBody".equals(cc)) {
 64                     for (int j = 0; j < swsxList.getLength(); j++) {
 65                         if (swsxList.item(j) instanceof Element) {
 66                             String bdmc = swsxList.item(j).getNodeName();
 67                             if ("nsxypjxxBody".equals(bdmc)) {
 68                                 NodeList pjxxList = swsxList.item(j)
 69                                         .getChildNodes();
 70                                 for (int z = 0; z < pjxxList.getLength(); z++) {
 71                                     String pjxx = pjxxList.item(z).getNodeName();
 72                                     if ("djxh".equals(pjxx)) {
 73                                         pjMap.put("djxh", pjxxList.item(z)
 74                                                 .getTextContent());
 75                                     }
 76                                     else if ("nsrsbh".equals(pjxx)) {
 77                                         pjMap.put("nsrsbh", pjxxList.item(z)
 78                                                 .getTextContent());
 79                                     }
 80                                     else if ("nsrmc".equals(pjxx)) {
 81                                         pjMap.put("nsrmc", pjxxList.item(z)
 82                                                 .getTextContent());
 83                                     }
 84                                     else if ("pjnd".equals(pjxx)) {
 85                                         pjMap.put("pjnd", pjxxList.item(z)
 86                                                 .getTextContent());
 87                                     }
 88                                     else if ("pjjb".equals(pjxx)) {
 89                                         pjMap.put("pjjb", pjxxList.item(z)
 90                                                 .getTextContent());
 91                                     }else if ("pjfs".equals(pjxx)) {
 92                                         pjMap.put("pjfs", pjxxList.item(z)
 93                                                 .getTextContent());
 94                                     }else if ("pjdf".equals(pjxx)) {
 95                                         pjMap.put("pjdf", pjxxList.item(z)
 96                                                 .getTextContent());
 97                                     }else if ("qpf".equals(pjxx)) {
 98                                         pjMap.put("qpf", pjxxList.item(z)
 99                                                 .getTextContent());
100                                     }else if ("sflhpj".equals(pjxx)) {
101                                         pjMap.put("sflhpj", pjxxList.item(z)
102                                                 .getTextContent());
103                                     }
104                                 }
105                             }
106                         }
107                     }
108                 }
109             }
110             //解析head体报文
111             Node headNode=root.getElementsByTagName("head").item(0);
112             NodeList headList=headNode.getChildNodes();
113             Node rtn_msgNode=null;
114             for(int j=0;j<headList.getLength();j++){
115                 rtn_msgNode=headList.item(j);
116                 if(rtn_msgNode.getNodeName().equals("rtn_msg")){
117                     NodeList rtn_msgList=rtn_msgNode.getChildNodes();
118                     Node rtn_msgNode2=null;
119                     if(rtn_msgList instanceof Element){
120                         for(int i=0;i<rtn_msgList.getLength();i++){
121                             rtn_msgNode2=rtn_msgList.item(i);
122                             if("Code".equals(rtn_msgNode2.getNodeName())){
123                                 pjMap.put("Code", rtn_msgNode2.getTextContent());
124                             }else if("Message".equals(rtn_msgNode2.getNodeName())){
125                                 pjMap.put("Message", rtn_msgNode2.getTextContent());
126                             }else if("Reason".equals(rtn_msgNode2.getNodeName())){
127                                 pjMap.put("Reason", rtn_msgNode2.getTextContent());
128                             }
129                         }
130                     }
131                 }
132                 return pjMap;
133             }
134             
135         
136         
137         /**
138          * 将xml加载为document对象
139          * @param xmlStr
140          * @return
141          */
142         public Document ParseXml2Doc(String xmlStr){
143             ByteArrayInputStream in;
144             if("".equals(xmlStr))
145                 return null;
146             Document doc = null;
147             try{
148                 builder=factory.newDocumentBuilder(); 
149                 in=new ByteArrayInputStream(xmlStr.getBytes("utf-8"));
150                 doc=builder.parse(in);
151                 
152             }catch(Exception e){
153                 //System.out.println(e);
154             }
155             return doc;
156         }
157 }

当然,发送的报文格式因他人提供的文档类型定义而不同,故解析报文的方法也不同,但大体思路如此,故此代码只供参考。

 

转载于:https://www.cnblogs.com/yaozeng/p/6168792.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某游戏在华为鸿蒙,华为鸿蒙系统运行安卓游戏出现新状况!安卓换皮论被彻底打脸?...

虽然华为鸿蒙系统已经经过几轮的测试&#xff0c;准备在6月份大规模推送正式版本了&#xff0c;但现在依然还有一些杂音不绝于耳。最主要的争议点还是老生常谈的”鸿蒙系统到底是不是安卓系统的换皮“。支持鸿蒙系统安卓换皮的一方拿出过不少证据&#xff0c;比如安装包还是APK…

电脑技巧:电脑插上U盘就死机或重启原因和解决办法

大家平时将u盘或其他可移动设备连接电脑插口的时候&#xff0c;不少电脑小白都碰到过操作系统自动重启甚至出现电脑死机的尴尬情况。针对u盘等外部设备连接引起的电脑死机问题&#xff0c;我们应该根据具体问题具体分析&#xff0c;找到原因就可以解决掉。接下来小编带大家看看…

使用UGUI绘制自定义几何图形

本文展示了如何使用UGUI绘制矩形&#xff0c;同理可绘制其他几何图形。 UGUI的渲染体系&#xff0c;简单来说所有的控件和可显示的元素都是Graphic。Graphic持有一个CanvasRenderer&#xff0c;通过SetVertices设置顶点&#xff0c;最终完成绘制。 举例来说&#xff0c;Image控…

电脑技巧:分享七个解决烦人的弹窗广告的小技巧

目录 1、及时卸载用不到的垃圾软件 2、修改软件设置&#xff08;关闭不需要的资讯、广告&#xff09; 3、开机启动项中禁用不需要的应用 4、删除弹窗广告程序 5、提高操作系统阻止级别 6、禁止弹窗广告的任务计划 7、安装火绒杀毒软件设置弹窗广告拦截 最后总结 很多朋友经常会…

MySQL+Amoeba实现数据库主从复制和读写分离

MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作&#xff0c;在slave上执行读操作来实现的。通过主从复制&#xff0c;master上的数据改动能够同步到slave上&#xff0c;从而保持了数据的一致性。实现数据的读写分离能带来的好处有&#xff1a; 增加物理服务…

从操作系统层面描述线程的五种状态

[初始状态] 仅是在语言层面创建 了线程对象&#xff0c; 还未与操作系统线程关联 [可运行状态] (就绪状态) 指该线程已经被创建(与操作系统线程关联)&#xff0c; 可以由CPU调度执行 [运行状态] 指获取了CPU时间片运行中的状态 当CPU时间片用完&#xff0c;会从[运行状态]转…

html桌面图标样式,如何更改图标样式,换桌面图标的方法

打开桌面&#xff0c;桌面上摆放了放多程序的快捷方式&#xff0c;我们每天打开电脑最先接触的就是这些快捷方式图标。时间长了&#xff0c;是不是感觉乏味了。可以换一换。比如&#xff0c;在我的电脑桌面上有这样一个图标&#xff0c;那怎样更改桌面图标&#xff1f;下面&…

电脑知识:笔记本电脑边充电边用,对电池有损害吗?

使用笔记本的时候&#xff0c;你们有没有这样的习惯&#xff0c;就是插电使用&#xff0c;充满到100%也不会拔掉充电头。 有人说这种行为会对电脑的电池造成伤害&#xff0c;这是真的吗&#xff1f;到底正确的使用是怎么样的&#xff1f;今天就跟大家解答一下这个疑惑。 首先&a…

硬件知识:电源开关上的“1“和“0“分别是什么意思

几乎所有的电器、灯具和插座上 只要带有电源开关 必然会出现“|”和“O”两个符号 如果只看符号判断 “|”和“O”到底代表什么含义呢&#xff1f; 你又能分清哪个是电路联通 哪个是电路断开吗&#xff1f; 很多人认为“O”是通电&#xff0c;“|”是断电 因为英语里开是OPEN 很…

c# 正则表达式 html标签,C#匹配HTML标签,正则表达式谁会?

米脂JS:function StripHtml(html){var scriptregex ".]*>[sS]*?";var scripts new RegExp(scriptregex, "gim");html html.replace(scripts, " ");//Stripts the ";var styles new RegExp(styleregex , "gim");html htm…

Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目

默认&#xff0c;在用vs2013开发SharePoint项目时&#xff0c;vs没有提供一般应用程序(.ashx)的项目模板&#xff0c;本文解决此问题。 以管理员身份启动vs2013&#xff0c;创建一个"SharePoint 2013 - 空项目",名称我保持默认&#xff1a;SharePointProject2。 选择…

java中线程的6种状态

java中线程的状态分为6种。 1. 初始(NEW)&#xff1a;新创建了一个线程对象&#xff0c;但还没有调用start()方法。 2. 运行(RUNNABLE)&#xff1a;Java线程中将就绪&#xff08;ready&#xff09;和运行中&#xff08;running&#xff09;两种状态笼统的称为“运行”。 线程对…

软件推荐:微软桌面助手软件上手体验

今天给大家分享微软桌面助手这款软件的使用体验&#xff0c;感兴趣的朋友可以下载体验一下&#xff01;一、软件介绍微软桌面助手是微软官方发布的一款桌面分区应用&#xff0c;其特色是支持自动移动并根据分区来整理桌面文件&#xff0c;比如在默认设置情况下&#xff0c;可以…

微信11个超级实用的小技巧,值得一试

目录 1.1 微信收藏当备忘录用 1.2 保存长图 1.3 分类存放微信文件 2.1 快速备注好友姓名 2.2 取消单条朋友圈的消息提醒 2.3 查看群聊中错过的红包 3.1 去除红点 4.1 换行 4.2 批量保存视频 4.3 清除微信缓存 微信对于现在的朋友们来说&#xff0c;可以说是日常使用频率最高的软…

html获取qq头像代码,jQuery在线获取QQ名称和头像

正文昨天群里有人问到dux主题的评论处输入QQ号直接获取名称和头像是怎么实现的&#xff0c;我看了一下dux主题&#xff0c;发现并没有集成这个功能&#xff0c;倒是emlog的dux主题内置了这个功能&#xff0c;本来想移植过来wordpress的&#xff0c;但是发现emlog和wp的评论模块…

网络知识:详解各种路由器组网方法

很多朋友可能会问到&#xff0c;关不同网段的两个电脑如何实现互相访问&#xff1f;这个问题通常在企业办公中会遇到&#xff0c;我们经常会遇到企业随着员工或部门的增多&#xff0c;增加了一个路由器&#xff0c;分了两个网段&#xff0c;A子网和B子网处于不同网段&#xff0…

多线程之竞态条件

言&#xff1a;要想理解多线程之间的竞争&#xff0c;第一个问题就是你需要知道什么是竞态条件&#xff1f; 竞态条件是指同一个程序多线程访问同一个资源&#xff0c;如果对资源的访问顺序敏感&#xff0c;就称存在竞态条件&#xff0c;代码区成为临界区。最常见的竞态条件为…