基于mvn调用由java开发的第三方服务调用代码

1.pom.xml添加依赖

 <!--HttpClient組建配置-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>fluent-hc</artifactId>
            <version>4.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.9</version>
        </dependency>

  

2.新增java类文件

package com.smart.util;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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;
import java.nio.charset.Charset;


/**
 * HttpClient調用WebServicr
 */
public class HttpUtil {
    static int socketTimeout = 30000;// 请求超时时间
    static int connectTimeout = 30000;// 传输超时时间
    /**
     * 日志
     */
    private static final Log logger = LogFactory.getLog(HttpUtil.class);
    /**
     * 使用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");
                logger.info("response:" + retStr);
            }
            // 释放资源
            closeableHttpClient.close();
        } catch (Exception e) {
            logger.error("exception in doPostSoap1_1", 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");
                logger.info("response:" + retStr);
            }
            // 释放资源
            closeableHttpClient.close();
        } catch (Exception e) {
            logger.error("exception in doPostSoap1_2", e);
        }
        return retStr;
    }
}

3.调用示例

3.1请求报文

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.b.com">  
   <soapenv:Header/>  
   <soapenv:Body>  
      <web:order soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
         <in0 xsi:type="web:OrderRequest">  
            <mobile xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</mobile>  
            <orderStatus xsi:type="xsd:int">?</orderStatus>  
            <productCode xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">?</productCode>  
         </in0>  
      </web:order>  
   </soapenv:Body>  
</soapenv:Envelope> 

3.2调用示例

String orderSoapXml = "<?xml version = \"1.0\" ?>"  
                + "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservices.b.com\">"  
                + "   <soapenv:Header/>"  
                + "   <soapenv:Body>"  
                + "      <web:order soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"  
                + "         <in0 xsi:type=\"web:OrderRequest\">"  
                + "            <mobile xsi:type=\"soapenc:string\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">?</mobile>"  
                + "            <orderStatus xsi:type=\"xsd:int\">?</orderStatus>"  
                + "            <productCode xsi:type=\"soapenc:string\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">?</productCode>"  
                + "         </in0>" + "      </web:order>"  
                + "   </soapenv:Body>" + "</soapenv:Envelope>";  
        String querySoapXml = "<?xml version = \"1.0\" ?>"  
                + "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservices.b.com\">"  
                + "   <soapenv:Header/>"  
                + "   <soapenv:Body>"  
                + "      <web:query soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"  
                + "         <in0 xsi:type=\"web:QueryRequest\">"  
                + "            <endTime xsi:type=\"xsd:dateTime\">?</endTime>"  
                + "            <mobile xsi:type=\"soapenc:string\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\">?</mobile>"  
                + "            <startTime xsi:type=\"xsd:dateTime\">?</startTime>"  
                + "         </in0>" + "      </web:query>"  
                + "   </soapenv:Body>" + "</soapenv:Envelope>";  
        String postUrl = "http://localhost:8080/services/WebServiceFromB";  
        //采用SOAP1.1调用服务端,这种方式能调用服务端为soap1.1和soap1.2的服务 

      HttpUtil.doPostSoap1_1(postUrl, orderSoapXml, "");
      HttpUtil.doPostSoap1_1(postUrl, querySoapXml, "");

     //有的webservice地址需要提供?wsdl才能调用
     //调用方式比如:
HttpUtil.doPostSoap1_1(postUrl+"?wsdl", orderSoapXml, "接口名");
 

 

posted @ 2018-05-18 11:42  李文学  阅读(304)  评论(0)    收藏  举报