大家好,又见面了,我是你们的朋友全栈君。
这是我在做对外部系统推送数据时自己写的WebService推送接口工具类,有几点需要注意
1、我们调用对方的WebService接口,对方会给一个WebService接口的地址,供我们访问:http://localhost:8080/cgs-ui/services/NC_TFM_INF_FundService?wsdl
直接访问这个地址之后我们看到对方接口中可以供调用的方法名,如下:
2、具体的调用都在下方代码中,代码中的一些参数,都有注释
1 package com.ritoinfo.tf2m.arapPayment.util;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import org.apache.commons.httpclient.HttpClient;
10 import org.apache.commons.httpclient.HttpException;
11 import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
12 import org.apache.commons.httpclient.methods.PostMethod;
13 import org.apache.commons.httpclient.methods.RequestEntity;
14 import org.apache.commons.httpclient.params.HttpMethodParams;
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17
18 import com.longtop.tfm.bas.util.UtilString;
19
20 /**
21 * @Description <br/>
22 * @author
23 * @version
24 */
25 public class WebServiceUtil {
26
27 public static final Log log = LogFactory.getLog(WebServiceUtil.class);
28
29 /**
30 * @Title: send
31 * @Description: 发送请求
32 * @param @param map
33 * @param @return 参数
34 * @return Map 返回类型
35 * @throws
36 */
37 public static Map send(Map map){
38
39 //组装报文
40 String sendXml = getSoapMsg(map);
41 log.error("发送出去的报文:" + sendXml);
42
43 // 创建httpClient实例对象
44 HttpClient httpClient = new HttpClient();
45 // 设置httpClient连接主机服务器超时时间:15000毫秒
46 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000);
47 // 创建post请求方法实例对象
48 PostMethod postMethod = new PostMethod((String) map.get("path"));
49 // 设置post请求超时时间
50 postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);
51 // 在头文件中设置转码
52 postMethod.addRequestHeader("Content-Type","text/xml;charset=UTF-8");
53 Map returnMap = new HashMap<Object, Object>();
54 try {
55 //然后把Soap请求数据添加到PostMethod中
56 byte[] b = null;
57 b = sendXml.getBytes("utf-8");
58 InputStream is = new ByteArrayInputStream(b, 0, b.length);
59 RequestEntity re = new InputStreamRequestEntity(is, b.length);
60 postMethod.setRequestEntity(re);
61 // 发送请求
62 httpClient.executeMethod(postMethod);
63 // 返回的结果
64 String result = postMethod.getResponseBodyAsString();
65 map.put("result", result);
66 // 将返回报文中的转义字符进行转换
67 returnMap = analysisXml(map);
68 } catch (HttpException e) {
69 log.error("发送HTPP请求报错!!!");
70 e.printStackTrace();
71 } catch (IOException e) {
72 log.error("发送HTPP请求报错!!!");
73 e.printStackTrace();
74 }
75 postMethod.releaseConnection();
76
77 return returnMap;
78 }
79
80 /**
81 * @Title: getSoapMsg
82 * @Description: 组装发送的soapUI报文
83 * 具体的WebService的发送的报文需要接收放提供模板,然后将下面的报文进行改进
84 * methodName是我们调用对方WebService接口需要调用的方法名,在对方的wsdl文件中也会有体现的
85 * @param @param map
86 * @param @return 参数
87 * @return String 返回类型
88 * @throws
89 */
90 private static String getSoapMsg(Map map) {
91 StringBuffer sb = new StringBuffer();
92 sb.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"").append("http://service.webservice.core.data.ridol.ritoinfo.com/").append("\">");
93 sb.append("<soapenv:Header/>");
94 sb.append("<soapenv:Body>");
95 sb.append("<ser:").append(map.get("methodName")).append(">");
96 sb.append("<xml>");
97 sb.append("<![CDATA[");
98 // =========要发送的报文===============
99 sb.append(map.get("xml"));
100 // =================================
101 sb.append("]]>");
102 sb.append("</xml>");
103 sb.append("</ser:").append(map.get("methodName")).append(">");
104 sb.append("</soapenv:Body>");
105 sb.append("</soapenv:Envelope>");
106 return sb.toString();
107 }
108
109 /**
110 * @Title: analysisXml
111 * @Description: 转义特殊字符并将结果输出
112 * @param @param map
113 * @param @return 参数
114 * @return Map 返回类型
115 * @throws
116 */
117 private static Map analysisXml(Map map){
118 Map returnMap = new HashMap<Object, Object>();
119 String result = (String) map.get("result");
120 if(UtilString.isNotEmpty(result)){
121 result = result.replaceAll("<","<");
122 result = result.replaceAll(">",">");
123 result = result.replaceAll("'","'");
124 result = result.replaceAll(""","\"");
125 result = result.replaceAll("
","\r");
126 result = result.replaceAll("&"," ");
127 result = result.replaceAll("	"," ");
128
129 int statusBegin = result.indexOf("<status>");
130 int statusEnd = result.indexOf("</status>");
131 String status = result.substring((statusBegin + "<status>".length()),statusEnd);
132
133 int messageBegin = result.indexOf("<message>");
134 int messageEnd = result.indexOf("</message>");
135 String message = result.substring((messageBegin + "<message>".length()),messageEnd);
136 returnMap.put("status", status);
137 returnMap.put("message", message);
138 returnMap.put("result", result);
139 }
140 return returnMap;
141 }
142 }
package com.ritoinfo.tf2m.arapPayment.util;
import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;
import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.methods.InputStreamRequestEntity;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.methods.RequestEntity;import org.apache.commons.httpclient.params.HttpMethodParams;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;
import com.longtop.tfm.bas.util.UtilString;
/*** @Description <br/>* @author * @version */public class WebServiceUtil {public static final Log log = LogFactory.getLog(WebServiceUtil.class);/** * @Title: send * @Description: 发送请求 * @param @param map * @param @return 参数 * @return Map 返回类型 * @throws */public static Map send(Map map){//组装报文String sendXml = getSoapMsg(map);log.error(“发送出去的报文:” + sendXml);// 创建httpClient实例对象 HttpClient httpClient = new HttpClient(); // 设置httpClient连接主机服务器超时时间:15000毫秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(15000); // 创建post请求方法实例对象 PostMethod postMethod = new PostMethod((String) map.get(“path”)); // 设置post请求超时时间 postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 60000);// 在头文件中设置转码 postMethod.addRequestHeader(“Content-Type”,”text/xml;charset=UTF-8″); Map returnMap = new HashMap<Object, Object>(); try { //然后把Soap请求数据添加到PostMethod中 byte[] b = null; b = sendXml.getBytes(“utf-8”); InputStream is = new ByteArrayInputStream(b, 0, b.length); RequestEntity re = new InputStreamRequestEntity(is, b.length); postMethod.setRequestEntity(re); // 发送请求httpClient.executeMethod(postMethod);// 返回的结果String result = postMethod.getResponseBodyAsString();map.put(“result”, result);// 将返回报文中的转义字符进行转换returnMap = analysisXml(map);} catch (HttpException e) {log.error(“发送HTPP请求报错!!!”);e.printStackTrace();} catch (IOException e) {log.error(“发送HTPP请求报错!!!”);e.printStackTrace();} postMethod.releaseConnection();
return returnMap;}/** * @Title: getSoapMsg * @Description: 组装发送的soapUI报文 * 具体的WebService的发送的报文需要接收放提供模板,然后将下面的报文进行改进 * methodName是我们调用对方WebService接口需要调用的方法名,在对方的wsdl文件中也会有体现的 * @param @param map * @param @return 参数 * @return String 返回类型 * @throws */private static String getSoapMsg(Map map) {StringBuffer sb = new StringBuffer();sb.append(“<soapenv:Envelope xmlns:soapenv=\”http://schemas.xmlsoap.org/soap/envelope/\” xmlns:ser=\””).append(“http://service.webservice.core.data.ridol.ritoinfo.com/”).append(“\”>”);sb.append(“<soapenv:Header/>”);sb.append(“<soapenv:Body>”);sb.append(“<ser:”).append(map.get(“methodName”)).append(“>”);sb.append(“<xml>”);sb.append(“<![CDATA[“);// =========要发送的报文===============sb.append(map.get(“xml”));// =================================sb.append(“]]>”);sb.append(“</xml>”);sb.append(“</ser:”).append(map.get(“methodName”)).append(“>”);sb.append(“</soapenv:Body>”);sb.append(“</soapenv:Envelope>”);return sb.toString();}/** * @Title: analysisXml * @Description: 转义特殊字符并将结果输出 * @param @param map * @param @return 参数 * @return Map 返回类型 * @throws */private static Map analysisXml(Map map){Map returnMap = new HashMap<Object, Object>();String result = (String) map.get(“result”);if(UtilString.isNotEmpty(result)){result = result.replaceAll(“<”,”<“); result = result.replaceAll(“>”,”>”); result = result.replaceAll(“'”,”‘”); result = result.replaceAll(“"”,”\””); result = result.replaceAll(“
”,”\r”); result = result.replaceAll(“&”,” “); result = result.replaceAll(“	”,” “);int statusBegin = result.indexOf(“<status>”); int statusEnd = result.indexOf(“</status>”); String status = result.substring((statusBegin + “<status>”.length()),statusEnd); int messageBegin = result.indexOf(“<message>”); int messageEnd = result.indexOf(“</message>”); String message = result.substring((messageBegin + “<message>”.length()),messageEnd); returnMap.put(“status”, status); returnMap.put(“message”, message); returnMap.put(“result”, result);}return returnMap;}}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154740.html原文链接:https://javaforall.cn