访问webservice接口(采用soap消息格式)

导入jar包:

commons-logging.jar
httpclient-4.3.2.jar
httpcore-4.3.2.jar

代码:


import java.nio.charset.Charset;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

public class SoapUtil {
    private static int socketTimeout = 30000;// 请求超时时间
    private static int connectTimeout = 30000;// 传输超时时间


    public static void main(String[] args) {
        String postUrl="http://127.0.0.1:8080//services/TestService";//webservicve接口地址
        String soapAction="";//"http://tempuri.org/execute";
        String namespace="com.test.webservices";//命名空间
        int paramsNum=2;//参数个数
        String[] params={"zzz","4"};//参数组
        String result=execute(namespace, postUrl, soapAction, "execute", paramsNum, params);//访问接口
        System.out.println(result);
    }

    /**
     * 访问webservice接口
     * @param namespace 命名空间
     * @param postUrl webservice接口地址
     * @param soapAction soapAction地址
     * @param method 方法名
     * @param paramsNum 参数个数
     * @param params 参数组
     * @return  返回值
     */
    public static String execute(String namespace,String postUrl,String soapAction,String method,int paramsNum,String[] params){
        StringBuffer sb=new StringBuffer("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"");
        sb.append(namespace);
        sb.append("\"><soapenv:Header/><soapenv:Body><com:");
        sb.append(method);
        sb.append(">");
        for (int i = 0; i < paramsNum; i++) {
            sb.append("<com:in"+i+">"+params[i]+"</com:in"+i+">");
        }
        sb.append("</com:");
        sb.append(method);
        sb.append("></soapenv:Body></soapenv:Envelope>");
        String result=doPostSoap1_1(postUrl, sb.toString(), soapAction);
        int start = result.indexOf("<ns1:out>")+9;
        int end = result.indexOf("</ns1:out>");
        return result.substring(start,end);
    }

    /**
     * 使用SOAP1.1发送消息
     * 
     * @param postUrl
     * @param soapXml
     * @param soapAction
     * @return
     */
    public static String doPostSoap1_1(String postUrl, String soapXml,
            String soapAction) {
        String retStr = "";
        // 创建HttpClientBuilder
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        HttpPost httpPost = new HttpPost(postUrl);
        // 设置请求和传输超时时间
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(socketTimeout)
                .setConnectTimeout(connectTimeout).build();
        httpPost.setConfig(requestConfig);
        try {
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", soapAction);
            StringEntity data = new StringEntity(soapXml,
                    Charset.forName("UTF-8"));
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient
                    .execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                // 打印响应内容
                retStr = EntityUtils.toString(httpEntity, "UTF-8");
            }
            // 释放资源
            closeableHttpClient.close();
        } catch (Exception e) {
        }
        return retStr;
    }

    /**
     * 使用SOAP1.2发送消息
     * 
     * @param postUrl
     * @param soapXml
     * @param soapAction
     * @return
     */
    public static String doPostSoap1_2(String postUrl, String soapXml,
            String soapAction) {
        String retStr = "";
        // 创建HttpClientBuilder
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        HttpPost httpPost = new HttpPost(postUrl);
        // 设置请求和传输超时时间
        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(socketTimeout)
                .setConnectTimeout(connectTimeout).build();
        httpPost.setConfig(requestConfig);
        try {
            httpPost.setHeader("Content-Type",
                    "application/soap+xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", soapAction);
            StringEntity data = new StringEntity(soapXml,
                    Charset.forName("UTF-8"));
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient
                    .execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                // 打印响应内容
                retStr = EntityUtils.toString(httpEntity, "UTF-8");
            }
            // 释放资源
            closeableHttpClient.close();
        } catch (Exception e) {
        }
        return retStr;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值