解析Soap报文

package com.chen.bookdetail.util;

import com.chen.bookdetail.entity.BookQuery;

import java.io.ByteArrayInputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;


import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;


public class SoapUtil {

    private static ArrayList<BookQuery> bookQueries = new ArrayList<>();
    private static BookQuery bookQuery=null;


    /**
     * 解析soapXML
     * @param soapXML
     * @return
     */
    public static WebserviceResultBean parseSoapMessage(String soapXML) {
        WebserviceResultBean resultBean = new WebserviceResultBean();
        try {
            SOAPMessage msg = formatSoapString(soapXML);
            SOAPBody body = msg.getSOAPBody();
            Iterator<SOAPElement> iterator = body.getChildElements();
            parse(iterator, resultBean);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultBean;
    }


    public static void main(String[] args) {
        String deptXML = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        deptXML += "<SOAP-ENV:Body>";
        deptXML += "<ns0:GetServiceTest xmlns:ns0=\"http://www.xxx.com/wsdl/test/v003\">";
        deptXML += "<ns1:aa xmlns:ns1=\"http://www.xxx.com/wsdl/test/v003\">";
        deptXML += "<ns1:bb/>";
        deptXML += "<ns1:cc>123456</ns1:cc>";
        deptXML += "<ns1:dd>999</ns1:dd>";
        deptXML += " <ns1:ee>123</ns1:ee>";
        deptXML += "  <ns1:ff>888</ns1:ff>";
        deptXML += "   <ns1:gg>666</ns1:gg>";
        deptXML += "  <ns1:hh>0108A</ns1:hh>";
        deptXML += " </ns1:aa>";
        deptXML += "</ns0:GetServiceTest>";
        deptXML += "</SOAP-ENV:Body>";
        deptXML += "</SOAP-ENV:Envelope>";
//        String s = TokenUtil.queryback("").toString();
        WebserviceResultBean ret = parseSoapMessage(deptXML);
        try {
            SOAPMessage msg = formatSoapString(deptXML);
            SOAPBody body = msg.getSOAPBody();
            Iterator<SOAPElement> iterator = body.getChildElements();

            PrintBody(iterator, null);
            System.out.println("开始"+bookQueries+"结束");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 把soap字符串格式化为SOAPMessage
     *
     * @param soapString
     * @return
     * @see [类、类#方法、类#成员]
     */
    public static SOAPMessage formatSoapString(String soapString) {
        MessageFactory msgFactory;
        try {
            msgFactory = MessageFactory.newInstance();
            SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(),
                    new ByteArrayInputStream(soapString.getBytes("UTF-8")));
            reqMsg.saveChanges();
            return reqMsg;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     * 解析soap xml
     * @param iterator
     * @param resultBean
     */
    private static void parse(Iterator<SOAPElement> iterator, WebserviceResultBean resultBean) {
        while (iterator.hasNext()) {
            SOAPElement element = iterator.next();
            if ("ns:BASEINFO".equals(element.getNodeName())) {
                continue;
            } else if ("ns:MESSAGE".equals(element.getNodeName())) {
                Iterator<SOAPElement> it = element.getChildElements();
                SOAPElement el = null;
                while (it.hasNext()) {
                    el = it.next();
                    if ("RESULT".equals(el.getLocalName())) {
                        resultBean.setResult(el.getValue());
                        System.out.println("#### " + el.getLocalName() + "  ====  " + el.getValue());
                    } else if ("REMARK".equals(el.getLocalName())) {
                        resultBean.setRemark(null != el.getValue() ? el.getValue() : "");
                        System.out.println("#### " + el.getLocalName() + "  ====  " + el.getValue());
                    } else if ("XMLDATA".equals(el.getLocalName())) {
                        resultBean.setXmlData(el.getValue());
                        System.out.println("#### " + el.getLocalName() + "  ====  " + el.getValue());
                    }
                }
            } else if (null == element.getValue()
                    && element.getChildElements().hasNext()) {
                parse(element.getChildElements(), resultBean);
            }
        }
    }


    private static void PrintBody(Iterator<SOAPElement> iterator, String side) {


        while (iterator.hasNext()) {
            Object o=iterator.next();
            if(o!=null)  {
                SOAPElement element=null;
                try{
                    element = (SOAPElement) o;
//                    String nodeName = element.getNodeName();
//                    if (nodeName.equals("CatalogDetails")){
//                        bookQuery=null;
//                        bookQuery = new BookQuery();
//                    }
//                    if (nodeName.equals("HoldingSearchResponse")||nodeName.equals("HoldingSearchResult")){
//
//                    }else if (!nodeName.equals("CatalogDetails")){
//                        //反射拿到相应方法并执行
//                        if(nodeName.equals("Value")){
//                            Method method = bookQuery.getClass().getMethod("setPubDate",String.class);
//                            method.invoke(bookQuery,element.getValue());
//                        }else {
//                            Method method = bookQuery.getClass().getMethod("set" + nodeName,String.class);
//                            method.invoke(bookQuery,element.getValue());
//                        }
//                    }
//                    if (nodeName.equals("CallNumber")){
//                        bookQueries.add(bookQuery);
//                    }
                    System.out.println("Node Name:" + element.getNodeName());
                    System.out.println("Value:" + element.getValue());

                }catch(Exception e){}
                if ( element !=null ) {
                    PrintBody(element.getChildElements(), side + "-----");
                }
            }
        }


    }
}
package com.chen.bookdetail.util;

public class WebserviceResultBean{

    private String result;
    private String xmlData;
    private String remark;

    public String getResult() {
        return result;
    }

    public void setResult(String result) {
        this.result = result;
    }

    public String getXmlData() {
        return xmlData;
    }

    public void setXmlData(String xmlData) {
        this.xmlData = xmlData;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}

以上内容作者并非本人,原作者忘记了!在此记录,方便下次使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值