使用axis發送xml報文,返回並解析報文執行個體,axisxml

來源:互聯網
上載者:User

使用axis發送xml報文,返回並解析報文執行個體,axisxml

前段時間剛好學了一點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 xmlStr140          * @return141          */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 }

當然,發送的報文格式因他人提供的文件類型定義而不同,故解析報文的方法也不同,但大體思路如此,故此代碼只供參考。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.