对接第三方提供的WebService
接口,早期的调用方式过于复杂繁琐,所以使用RestTemplate
进行调用
package com.xxx.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestTemplate;
/**
* WebService请求工具类
*
* @author hcs
*
* @date 2024/1/19 11:18
*/
public class WebServiceRequestUtil {
private static Logger logger = LoggerFactory.getLogger(WebServiceRequestUtil.class);
private static RestTemplate restTemplate = SpringUtil.getBean(RestTemplate.class);
/**
* 发起webservice请求
*
* @param url
* @return
*/
public static String webServiceRequest(String url) {
// 创建一个请求头对象
HttpHeaders headers = new HttpHeaders();
// 设置请求头对象contentTyp的为text/xml;charset=UTF-8
MediaType type = MediaType.parseMediaType("text/xml;charset=UTF-8");
headers.setContentType(type);
// 将请求参数进行封装并进行远程接口服务调用
// 构造webservice请求参数
// 请求参数,根据实际情况进行配置,以下仅作为示例
StringBuilder requestData = new StringBuilder();
requestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
requestData.append("<soapenv:Envelope xmlns:soapenv=\"http://根据实际情况配置\" xmlns:esb=\"http://根据实际情况配置\">");
requestData.append("<soapenv:Header/>");
requestData.append("<soapenv:Body>");
// 请求参数,根据实际情况进行配置,以下仅作为示例
requestData.append("<ESB_USER>").append("zhangsan").append("</ESB_USER>");
requestData.append("<ESB_PWD>").append("123456").append("</ESB_PWD>");
requestData.append("</soapenv:Body>");
requestData.append("</soapenv:Envelope>");
logger.info("请求报文为:" + requestData.toString());
logger.info("url:" + url);
try {
// 创建请求
HttpEntity<String> request = new HttpEntity<>(requestData.toString(), headers);
// 发送post请求并获取到响应结果
String str = restTemplate.postForObject(url, request, String.class);
logger.info("-----------Response content-----------: " + str);
return str;
} catch (Exception e) {
logger.error("baseWebServiceRequest出现异常:" + e.getMessage(), e);
}
return null;
}
}
注:除了RestTemplate
之外,HttpURLConnection
等也可以用来调用webservice接口
如果需要将xml转为Json,可参考:http://t.csdnimg.cn/thZzN