由于项目中使用webService接口,因此学习了下如何调用webService接口。
一、使用httpClient调用webService接口:
public static String executeWebService(String urls,String soapXml) throws IOException {
//设置url,不是WSDL地址
//URL url = new URL("http://127.0.0.1:8080/Service/ServiceHello");
URL url = new URL(urls);
//通过url获取连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求类型:POST请求
connection.setRequestMethod("POST");
//设置数据格式,我这里是xml类型
connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
connection.setDoInput(true);
connection.setDoOutput(true);
//设置连接超时
connection.setConnectTimeout(3000);
//第四步:组织SOAP数据,发送请求
OutputStream os = connection.getOutputStream();
os.write(soapXml.getBytes());
//获取响应信息
int responseCode = connection.getResponseCode();
//检查是否请求成功,判断是否响应成功
if(HttpURLConnection.HTTP_OK == responseCode){//
InputStream is = connection.getInputStream();
InputStreamReader inputStream= new InputStreamReader(is);
BufferedReader buffered= new BufferedReader(isr);
StringBuilder stringBuilder= new StringBuilder();
String result= null;
while(null != (result= buffered.readLine())){
stringBuilder.append(result);
}
is.close();
inputStream.close();
buffered.close();
//返回结果xml字符串
return sb.toString();
}
os.close();
return null;
}
二、使用另一种httpClient:
public static String execute(String uri,String requestXml) throws Exception {
long startTime = System.currentTimeMillis();
PoolingHttpClientConnectionManager cm = null;
CloseableHttpClient httpClient = null;
HttpEntity httpEntity = null;
HttpRequestBase request = null;
String responseBody = "";
cm = new PoolingHttpClientConnectionManager();
//路由最大连接数
cm.setDefaultMaxPerRoute(2);
//总最大连接
cm.setMaxTotal(2);
//得到连接池
httpClient = HttpClients.custom().build();
// HashMap<String, String> headers = new HashMap<String, String>();
request=new HttpPost(uri);
//request.addHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.6) Gecko/20100625Firefox/3.6.6 Greatwqs");
//request.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
//请求头:接受语言环境
// request.addHeader("Accept-Language","zh-cn,zh;q=0.5");
//请求头:保持连接
// request.addHeader("connection", "close");
//request.addHeader("connection", "Keep-Alive");
//request.addHeader("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
CloseableHttpResponse httpResponse;
//TODO强制转换成POST设置请求 参数
// String st=new String(requestXml.getBytes("iso8859-1"),"utf-8");
HttpPost post=(HttpPost)request;
//构建消息实体
StringEntity entity=new StringEntity(requestXml,"utf-8");
//entity.setContentEncoding("utf-8");
//entity.setContentType("application/xml");
//设置请求头
post.addHeader("Content-type", "text/xml");
//ByteArrayEntity entity = new ByteArrayEntity(requestXml.getBytes("utf-8"));
//设置请求实体
post.setEntity(entity);
try {
httpResponse = httpClient.execute(post);
httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
responseBody = EntityUtils.toString(httpEntity);
}
} catch (Exception e) {
e.printStackTrace();
if(request != null){
request.abort();
}
throw new Exception("请求异常:"+e.getMessage());
} finally {
if (httpEntity != null) {
try {
EntityUtils.consumeQuietly(httpEntity);
} catch (Exception e) {
throw new Exception("请求异常:"+e.getMessage());
}
}
}
return null;
}