【背景】
前不久接到一个任务需要将我们平台的内容推送到第三方的一个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不对应一直调用不通
【总结】
开始做的时候一头雾水,各种查询,各种尝试,最终解决完成之后发现是如此简单,欢迎读者朋友交流沟通。