java对接webservice服务实现推送

时间:2024-03-23 17:43:49

【背景】

    前不久接到一个任务需要将我们平台的内容推送到第三方的一个webService服务中,我们平台接口使用java来做的,所以需要通过java调用webService服务实现推送效果,不多说直接上干货。

【过程】

第一步:查看要推送过去的webservice服务的接口:

java对接webservice服务实现推送

第二步:可以先通过SoapUI 5.2.1或者其它工具进行测试验证(切记需要输入对应的参数),如下图:

java对接webservice服务实现推送

第三步:通过java代码拼接参数(拼接为类似于SoapUI参数的方式,的一个String字符串,切记将对应参数放入其中哦),如下图:

java对接webservice服务实现推送

第四步:通过http请求调用,但是必须用下面的方法进行调用(其中下面的StringRequestEntity对应的第二个参数contentType类型需要和图一中的数据第三行,content-Type类型对应才可以调用通),如下图:

java对接webservice服务实现推送

第五步:进行测试验证工作

【代码】

   只提供一下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不对应一直调用不通

【总结】

    开始做的时候一头雾水,各种查询,各种尝试,最终解决完成之后发现是如此简单,欢迎读者朋友交流沟通。