使用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.pswp.cn/news/270344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270344.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

某游戲在華為鴻蒙,華為鴻蒙系統運行安卓游戲出現新狀況!安卓換皮論被徹底打臉?...

雖然華為鴻蒙系統已經經過幾輪的測試&#xff0c;準備在6月份大規模推送正式版本了&#xff0c;但現在依然還有一些雜音不絕于耳。最主要的爭議點還是老生常談的”鴻蒙系統到底是不是安卓系統的換皮“。支持鴻蒙系統安卓換皮的一方拿出過不少證據&#xff0c;比如安裝包還是APK…

java為什么還需要分布式鎖?

什么是鎖&#xff1f; 在單進程的系統中&#xff0c;當存在多個線程可以同時改變某個變量&#xff08;可變共享變量&#xff09;時&#xff0c;就需要對變量或代碼塊做同步&#xff0c;使其在修改這種變量時能夠線性執行消除并發修改變量。 而同步的本質是通過鎖來實現的。為了…

電腦技巧:電腦插上U盤就死機或重啟原因和解決辦法

大家平時將u盤或其他可移動設備連接電腦插口的時候&#xff0c;不少電腦小白都碰到過操作系統自動重啟甚至出現電腦死機的尷尬情況。針對u盤等外部設備連接引起的電腦死機問題&#xff0c;我們應該根據具體問題具體分析&#xff0c;找到原因就可以解決掉。接下來小編帶大家看看…

使用UGUI繪制自定義幾何圖形

本文展示了如何使用UGUI繪制矩形&#xff0c;同理可繪制其他幾何圖形。 UGUI的渲染體系&#xff0c;簡單來說所有的控件和可顯示的元素都是Graphic。Graphic持有一個CanvasRenderer&#xff0c;通過SetVertices設置頂點&#xff0c;最終完成繪制。 舉例來說&#xff0c;Image控…

android t類型參數,android – Kotlin屬性:“屬性的類型參數必須在其接收器類型中使用”...

我有以下簡單的Kotlin擴展功能&#xff1a;// Get the views of ViewGroupinline val ViewGroup.views: Listget() (0..childCount - 1).map { getChildAt(it) }// Get the views of ViewGroup of given typeinline fun ViewGroup.getViewsOfType() : List {return this.views…

電腦技巧:分享七個解決煩人的彈窗廣告的小技巧

目錄 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;可以…

HTML一級菜單和二級菜單區別,JavaScript點擊一級菜單打開和關閉二級菜單

【JavaScript點擊一級菜單打開和關閉二級菜單】Document#sub_menu_1,#sub_menu_2{display: none;}ul li:hover{cursor: pointer;}一級菜單1二級餐單1二級餐單1二級餐單1二級餐單1一級菜單2二級菜單2二級菜單2二級菜單2二級菜單2一級餐單3function f(str){var sub_menu documen…

微信11個超級實用的小技巧,值得一試

目錄 1.1 微信收藏當備忘錄用 1.2 保存長圖 1.3 分類存放微信文件 2.1 快速備注好友姓名 2.2 取消單條朋友圈的消息提醒 2.3 查看群聊中錯過的紅包 3.1 去除紅點 4.1 換行 4.2 批量保存視頻 4.3 清除微信緩存 微信對于現在的朋友們來說&#xff0c;可以說是日常使用頻率最高的軟…