webservice 调用

本文介绍如何使用Apache HttpClient 4.5.8版本进行POST请求,包括设置请求头、处理Cookie、发送JSON数据及解析响应。通过具体代码展示了如何与数据枢纽服务交互,实现数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖
  <!--httpclient-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.8</version>
        </dependency>
        代码:
package com.jkys.crm.utils;

import com.alibaba.fastjson.JSON;
import org.apache.http.HttpEntity;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

public class DataHubServiceUtil {
    /***
     * datahubService.
     *
     */
    private final static Logger logger = LoggerFactory.getLogger(DataHubServiceUtil.class);

    public static String queryAllDataMap(Map<String,Object> jsonMap, Long dataHubId, HttpServletRequest request) throws IOException {
        //获取web路劲下的配置(访问url)
        ResourceBundle bundle=ResourceBundle.getBundle("application", Locale.CHINA);
        String url = bundle.getString("drugStoreUrl")+dataHubId;
        //httpclient
        CloseableHttpClient httpClient = HttpClientBuilder.create().build();
        // 创建Post请求
        HttpPost httpPost = new HttpPost(url);
        //请求Content-Type:内容体
        httpPost.setHeader("Content-Type", "application/json;charset=utf8");
        httpPost.setHeader("Referer", request.getHeader("Referer"));
        //添加cookie 形如Cookie: crm_new_cheat_user=858; _JKYS_DAILY_E_SESSION_ID=b7e0f2a876b4ff060a5c737ab2ace157cc815c37; _JKYS_E_SESSION_ID=28d07d3a07432a604c795a727b5f11de4a45851e; JSESSIONID=0FFB53AB2E7009D898FEB398E3788D2F
        Cookie[] cookies = request.getCookies();
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<cookies.length;i++){
            sb.append(cookies[i].getName()+"="+cookies[i].getValue());
            if(i !=cookies.length-1){
                sb.append(";");
            }
        }
        httpPost.addHeader("Cookie",sb.toString());
        logger.info("获取到cookie:"+sb.toString() );
        //将map转化成json字符串
        String jsonString = JSON.toJSONString(jsonMap);
        //添加页面参数
        StringEntity entity = new StringEntity(jsonString, "UTF-8");
        // post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中
        httpPost.setEntity(entity);
        // 响应模型(由客户端执行(发送)Post请求)
        CloseableHttpResponse response = httpClient.execute(httpPost);
        // 从响应模型中获取响应实体
        HttpEntity responseEntity = response.getEntity();
        logger.info("响应状态为:" + response.getStatusLine());
        if (responseEntity != null) {
            logger.info("响应内容长度为:" + responseEntity.getContentLength());
            String responseStr = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
            logger.info("响应内容为:" + responseStr);
            return responseStr;
        }
        return null;
    }
}
在这里插入代码片
WebService是一种面向Web服务的通信协议,可以使不同的应用程序通过Web进行通信。在Java中,可以使用JAX-WS API和Apache CXF框架来调用WebService。下面是一个简单的WebService调用示例: ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; public class WebServiceClient { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/MyWebService?wsdl"); QName qname = new QName("http://example.com/", "MyWebServiceImplService"); Service service = Service.create(url, qname); MyWebService myWebService = service.getPort(MyWebService.class); String result = myWebService.sayHello("World"); System.out.println(result); } } ``` 在上面的代码中,我们首先创建了一个URL对象,用于引用WebService的WSDL文件。然后我们创建了一个QName对象,用于指定WebService的服务名称和命名空间。接下来,我们使用Service.create()方法创建了一个Service对象,该对象用于与WebService进行通信。最后,我们使用Service.getPort()方法获取与WebService通信的实例,并调用方法。 需要注意的是,MyWebService是一个接口,它定义了与WebService通信的方法。在调用WebService时,我们需要使用服务端实现该接口的类的实例来调用方法。在上面的代码中,我们使用了服务端的MyWebServiceImpl类来实现MyWebService接口。 以上就是一个简单的WebService调用示例。需要注意的是,具体的WebService调用方式和实现可能因WebService的类型和实现方式而异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值