【背景】
前不久接到一个任务需要将我们平台的内容推送到第三方的一个webService服务中,我们平台接口使用java来做的,所以需要通过java调用webService服务实现推送效果,不多说直接上干货。
【过程】
第一步:查看要推送过去的webservice服务的接口:
第二步:可以先通过SoapUI 5.2.1或者其它工具进行测试验证(切记需要输入对应的参数),如下图:
第三步:通过java代码拼接参数(拼接为类似于SoapUI参数的方式,的一个String字符串,切记将对应参数放入其中哦),如下图:
第四步:通过http请求调用,但是必须用下面的方法进行调用(其中下面的StringRequestEntity对应的第二个参数contentType类型需要和图一中的数据第三行,content-Type类型对应才可以调用通),如下图:
第五步:进行测试验证工作
【代码】
只提供一下http请求方法对应的代码,至于调用的时候传入的拼接参数的方法读者可以自己写一下。
public static String sendPostForWebService(String requestUrl, String paramStr) {
if (requestUrl == null || "".equals(requestUrl)) {
logger.error("请求地址为null");
return null;
}
if (null == paramStr) {
logger.error("请求参数为null");
return null;
}
StringRequestEntity requestEntity = null;
try {
// requestEntity = new StringRequestEntity(paramStr, "application/soap+xml",CODE);
requestEntity = new StringRequestEntity(paramStr, "text/xml",CODE);
} catch (UnsupportedEncodingException e) {
logger.error(e.getMessage());
}
PostMethod postMethod = new PostMethod(requestUrl);
postMethod.setRequestEntity(requestEntity);
HttpClient httpClient = new HttpClient();
/* 发送请求,并获取响应对象 */
int statusCode = -1;
try {
statusCode = httpClient.executeMethod(postMethod);
} catch (HttpException e) {
logger.error(e.getMessage());
} catch (IOException e) {
logger.error(e.getMessage());
}
if (statusCode != HttpStatus.SC_OK) {
logger.error("post请求失败: " + postMethod.getStatusLine());
return null;
}
String resultJson = "";
try {
InputStream io = postMethod.getResponseBodyAsStream();
resultJson = inputStream2String(io);
logger.info("请求结果 : " + resultJson);
} catch (IOException e) {
logger.error("获取ResponseBody时出错:" + e.getMessage());
}
return resultJson;
}
【遇到的困难】
1.开始不知道如何进行推送,也不知道如何验证,所以查询过后找到了SoapUI 5.2.1这个工具,工具读者朋友直接百度吧!
2.通过java调用StringRequestEntity中的第二个参数也就是请求的contentType不对应一直调用不通
【总结】
开始做的时候一头雾水,各种查询,各种尝试,最终解决完成之后发现是如此简单,欢迎读者朋友交流沟通。