Webservice 之通过UrlConnection访问Soap服务

1.通过SoapUI测试接口是否正常**(SoapUI下载地址:)

2.以下是通过SoapUI测试接口的数据截图:

通过SoapUI测试接口的数据截图

3.代码实例:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
public class WebService{

    public static void main(String[] args) {
        WebService webService = new WebService();
        String result =webService.addCoin();
        System.out.println("result:"+result);
    }

    public String addCoin() {
        //服务访问地址
        String urlStr = "XXXXX";
        String paraXml = getAccInfoXml();
        //方法
        String soapAction = "XXXX";//soapAction
        OutputStream out = null;
        try {
            URL url = new URL(urlStr);
            HttpURLConnection con;
            con = (HttpURLConnection) url.openConnection();
            //是否具有输出参数
            con.setDoOutput(true);
            //是否具有输入参数
            con.setDoInput(true);
            //请求方式
            con.setRequestMethod("POST");
            //是否缓存
            con.setUseCaches(false);
            //设置请求头
            con.setRequestProperty("Content-type", "text/xml; Encoding=GBK");
            con.setRequestProperty("SOAPAction", soapAction);
            //获得输出流
            out = con.getOutputStream();
            con.getOutputStream().write(paraXml.getBytes());
            out.flush();
            out.close();
            //获得服务端响应状态码
            int code = con.getResponseCode();
            String tempString = null;
            StringBuffer sb1 = new StringBuffer();
            if (code == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
                while ((tempString = reader.readLine()) != null) {
                    sb1.append(tempString);
                }
                if (null != reader) {
                    reader.close();
                }
            } else {
                BufferedReader reader = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));
                // 一次读入一行,直到读入null为文件结束
                while ((tempString = reader.readLine()) != null) {
                    sb1.append(tempString);
                }
                if (null != reader) {
                    reader.close();
                }
            }
            //响应报文
            String respData = sb1.toString();
            Document doc = null;
            doc = DocumentHelper.parseText(respData); // 将字符串转为XML
            Element rootElt = doc.getRootElement(); // 获取根节点
            Iterator iter = rootElt.elementIterator("Body"); // 获取根节点下的子节点Body
            // 遍历Body节点
            while (iter.hasNext()) {
                Element recordEle = (Element) iter.next();
                Iterator itr = recordEle.elementIterator("AddPointsResponse"); // 拿到Body节点下的子节点AddPointsResponse
                // 遍历Body节点下的AddPointsResponse节点
                while (itr.hasNext()) {
                    Element element = (Element) itr.next();
                    Iterator itrs = element.elementIterator("procCode"); // 拿到AddPointsResponse节点下的子节点procCode
                    while (itrs.hasNext()) {
                        Element elemen = (Element) itrs.next();
                        if(elemen.getName().equals("procCode")) {
                            return  elemen.getText();
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "添加失败";
    }

    public String getSoapHeader() {
        //上面代码为从缓存中取到我们需求传递到认证头的数据 下面开始添加认证头
        StringBuffer soapHeader = new StringBuffer();
        soapHeader.append("<soapenv:Header>");
        soapHeader.append("<web:SessionToken></web:SessionToken>");
        soapHeader.append("<web:SessionType>None</web:SessionType>");
        soapHeader.append("<web:PasswordText>INFICRM</web:PasswordText>");
        soapHeader.append("<web:UsernameToken>INFI</web:UsernameToken>");
        soapHeader.append("</soapenv:Header>");
        return soapHeader.toString();
    }

    //请求参数正文拼接
    public String getAccInfoXml() {
        StringBuffer template = new StringBuffer();
        String remark = "测试积分上限";
        String s= null;
        try {
            //中文乱码转换
            s = new String(remark.getBytes("GBK"),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        String header = getSoapHeader();
        template.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://siebel.com/webservices\" xmlns:inf=\"http://siebel.com/xml/INFIPointContral\">");
        template.append(header);
        template.append("<soapenv:Body>");
        template.append("<inf:AddPoints>");
        template.append("<pointValue>XXX</pointValue>");
        template.append("<remark>"+s+"</remark>");
        template.append("<activte_type>WX02</activte_type>");
        template.append("<interactivate_date>XXX</interactivate_date>");
        template.append("<source_system>XXX</source_system>");
        template.append("<cardNo>XXXXX</cardNo>");
        template.append("<integral_type>5</integral_type>");
        template.append("</inf:AddPoints>");
        template.append("</soapenv:Body>");
        template.append("</soapenv:Envelope>");
        return template.toString();
    }
}

转载于:https://my.oschina.net/u/3288406/blog/1621797

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值