packagecom.soap.util; importjava.io.ByteArrayInputStream; importjava.util.ArrayList; importjava.util.HashMap; importjava.util.Iterator; importjava.util.List; importjava.util.Map; importjavax.xml.soap.MessageFactory; importjavax.xml.soap.MimeHeaders; importjavax.xml.soap.SOAPBody; importjavax.xml.soap.SOAPElement; importjavax.xml.soap.SOAPException; importjavax.xml.soap.SOAPMessage; /** *soapXML解析 *@authorRoger */ @SuppressWarnings({"unchecked","unused"}) publicclassSoapXmlUtil{ publicstaticvoidmain(String[]args){ StringBufferxml=newStringBuffer(); xml.append("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>"); xml.append("<soap:Envelopexmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); xml.append("<soap:Body>"); xml.append("<GetExchangeGiftRecordResponsexmlns=\"http://www.tech-trans.com.cn/\">"); xml.append("<GetExchangeGiftRecordResult>"); xml.append("<Header>"); xml.append("<ERRCODE>string</ERRCODE>"); xml.append("<ERRMSG>string</ERRMSG>"); xml.append("<REQDATE>string</REQDATE>"); xml.append("<REQTIME>string</REQTIME>"); xml.append("</Header>"); xml.append("<DATA>"); xml.append("<ExchangeGiftRecord>"); xml.append("<TXDATE>string</TXDATE>"); xml.append("<GIFTNAME>string</GIFTNAME>"); xml.append("<GIFTIMG>string</GIFTIMG>"); xml.append("<BONUS>decimal</BONUS>"); xml.append("<QTY>decimal</QTY>"); xml.append("</ExchangeGiftRecord>"); xml.append("<ExchangeGiftRecord>"); xml.append("<TXDATE>string</TXDATE>"); xml.append("<GIFTNAME>string</GIFTNAME>"); xml.append("<GIFTIMG>string</GIFTIMG>"); xml.append("<BONUS>decimal</BONUS>"); xml.append("<QTY>decimal</QTY>"); xml.append("</ExchangeGiftRecord>"); xml.append("</DATA>"); xml.append("</GetExchangeGiftRecordResult>"); xml.append("</GetExchangeGiftRecordResponse>"); xml.append("</soap:Body>"); xml.append("</soap:Envelope>"); try{ System.out.println("开始解析xml....."); SOAPMessagemsg=formatSoapString(xml.toString()); SOAPBodybody=msg.getSOAPBody(); Iterator<SOAPElement>iterator=body.getChildElements(); List<Map<String,String>>list=newArrayList<Map<String,String>>(); List<Map<String,String>>orgList=printBody(iterator,null,list); }catch(SOAPExceptione){ e.printStackTrace(); } } publicstaticList<Map<String,String>>printBody( Iterator<SOAPElement>iterator,Stringside,List<Map<String,String>>list){ while(iterator.hasNext()){ SOAPElementelement=iterator.next(); System.out.println(element.getNodeName()); if("DATA".equals(element.getNodeName())){ Iterator<SOAPElement>it=element.getChildElements(); Map<String,String>infoMap=newHashMap<String,String>(); SOAPElementel=null; Stringpk_corp="";//公司主键 Stringunitcode="";//公司编码 Stringunitname="";//公司名称 Stringfathercorp="";//上级公司ID Stringts="";//最新更新时间 Stringcorplevel="";//公司层级 Stringisseal="";//是否封存 while(it.hasNext()){ el=it.next(); if(el.getNodeName().equals("pk_corp")){ pk_corp=el.getValue(); infoMap.put("pk_corp",pk_corp); } if(el.getNodeName().equals("unitcode")){ unitcode=el.getValue(); infoMap.put("unitcode",unitcode); } if(el.getNodeName().equals("unitname")){ unitname=el.getValue(); infoMap.put("unitname",unitname); } if(el.getNodeName().equals("fathercorp")){ fathercorp=el.getValue(); infoMap.put("fathercorp",fathercorp); } if(el.getNodeName().equals("ts")){ ts=el.getValue(); infoMap.put("ts",ts); } if(el.getNodeName().equals("corplevel")){ corplevel=el.getValue(); infoMap.put("corplevel",corplevel); } if(el.getNodeName().equals("isseal")){ isseal=el.getValue(); infoMap.put("isseal",isseal); } } list.add(infoMap); } if(null==element.getValue() &&element.getChildElements().hasNext()){ printBody(element.getChildElements(),side+"-----",list); } } returnlist; } /** *把soap字符串格式化为SOAPMessage * *@paramsoapString *@return *@see[类、类#方法、类#成员] */ publicstaticSOAPMessageformatSoapString(StringsoapString){ MessageFactorymsgFactory; try{ msgFactory=MessageFactory.newInstance(); SOAPMessagereqMsg=msgFactory.createMessage(newMimeHeaders(),newByteArrayInputStream(soapString.getBytes("UTF-8"))); reqMsg.saveChanges(); returnreqMsg; }catch(Exceptione){ e.printStackTrace(); returnnull; } } }
备注: 解析的xml标签与标签之间不能有空格,否则回去先如下异常
开始解析xml..... Exceptioninthread"main"java.lang.ClassCastException:com.sun.xml.internal.messaging.saaj.soap.impl.TextImplcannotbecasttojavax.xml.soap.SOAPElement atcom.soap.util.SoapXmlUtil.printBody(SoapXmlUtil.java:79) atcom.soap.util.SoapXmlUtil.main(SoapXmlUtil.java:67)