最近遇到个webservice的对接,上百个接口,但是统一都是入参出参都是统一一个json
所以写了一个工具类,下面上代码
需要用到的jar
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
代码
public static HashMap<String,String> getData(String url,String op, String xmlPara){
//统一接口,可以统一接入封装xml
xmlPara = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n" +
" <soap12:Body>\n" +
//这里我加入op是因为接口统一都是已接口名字作为入参的xml节点
" <"+op+" xmlns=\"http://tempurl.org\">\n" +
" <as_inputjson>"+xmlPara+"</as_inputjson>\n" +
" </"+op+">\n" +
" </soap12:Body>\n" +
"</soap12:Envelope>" ;
HashMap<String,String> res = new HashMap<>();
//这里写你的地址url
String endpoint = url+"?op"+op;
PostMethod postMethod = new PostMethod(endpoint);
byte[] b;
try {
b = xmlPara.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b,0,b.length);
InputStreamRequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
//把Soap请求数据添加到PostMethod中
postMethod.setRequestEntity(re);
//生成一个HttpClient对象,并发出postMethod请求
HttpClient httpClient = new HttpClient();
int statusCode = httpClient.executeMethod(postMethod);
if(200==statusCode){
String getServerData = postMethod.getResponseBodyAsString();
//System.out.println("----->"+getServerData);
//获取返回值状态标识,标识为0:成功;非0:失败
res.put("status", "0");
//这里的op也是一样的作用,返回都是接口名字+Result作为返回节点,我这里都是json返回,如果需要xml返回自行解析就好
res.put("msg", getServerData.substring(getServerData.indexOf("<"+op+"Result>")+18,getServerData.indexOf("</"+op+"Result>")));
}
} catch (Exception e) {
res.put("status", "1");
res.put("msg", e.toString());
e.printStackTrace();
}
return res;
}
评论区