导入jar包:
commons-logging.jar
httpclient-4.3.2.jar
httpcore-4.3.2.jar
代码:
import java.nio.charset.Charset;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class SoapUtil {
private static int socketTimeout = 30000;// 请求超时时间
private static int connectTimeout = 30000;// 传输超时时间
public static void main(String[] args) {
String postUrl="http://127.0.0.1:8080//services/TestService";//webservicve接口地址
String soapAction="";//"http://tempuri.org/execute";
String namespace="com.test.webservices";//命名空间
int paramsNum=2;//参数个数
String[] params={"zzz","4"};//参数组
String result=execute(namespace, postUrl, soapAction, "execute", paramsNum, params);//访问接口
System.out.println(result);
}
/**
* 访问webservice接口
* @param namespace 命名空间
* @param postUrl webservice接口地址
* @param soapAction soapAction地址
* @param method 方法名
* @param paramsNum 参数个数
* @param params 参数组
* @return 返回值
*/
public static String execute(String namespace,String postUrl,String soapAction,String method,int paramsNum,String[] params){
StringBuffer sb=new StringBuffer("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"");
sb.append(namespace);
sb.append("\"><soapenv:Header/><soapenv:Body><com:");
sb.append(method);
sb.append(">");
for (int i = 0; i < paramsNum; i++) {
sb.append("<com:in"+i+">"+params[i]+"</com:in"+i+">");
}
sb.append("</com:");
sb.append(method);
sb.append("></soapenv:Body></soapenv:Envelope>");
String result=doPostSoap1_1(postUrl, sb.toString(), soapAction);
int start = result.indexOf("<ns1:out>")+9;
int end = result.indexOf("</ns1:out>");
return result.substring(start,end);
}
/**
* 使用SOAP1.1发送消息
*
* @param postUrl
* @param soapXml
* @param soapAction
* @return
*/
public static String doPostSoap1_1(String postUrl, String soapXml,
String soapAction) {
String retStr = "";
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// HttpClient
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
HttpPost httpPost = new HttpPost(postUrl);
// 设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(socketTimeout)
.setConnectTimeout(connectTimeout).build();
httpPost.setConfig(requestConfig);
try {
httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
httpPost.setHeader("SOAPAction", soapAction);
StringEntity data = new StringEntity(soapXml,
Charset.forName("UTF-8"));
httpPost.setEntity(data);
CloseableHttpResponse response = closeableHttpClient
.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
// 打印响应内容
retStr = EntityUtils.toString(httpEntity, "UTF-8");
}
// 释放资源
closeableHttpClient.close();
} catch (Exception e) {
}
return retStr;
}
/**
* 使用SOAP1.2发送消息
*
* @param postUrl
* @param soapXml
* @param soapAction
* @return
*/
public static String doPostSoap1_2(String postUrl, String soapXml,
String soapAction) {
String retStr = "";
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// HttpClient
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
HttpPost httpPost = new HttpPost(postUrl);
// 设置请求和传输超时时间
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(socketTimeout)
.setConnectTimeout(connectTimeout).build();
httpPost.setConfig(requestConfig);
try {
httpPost.setHeader("Content-Type",
"application/soap+xml;charset=UTF-8");
httpPost.setHeader("SOAPAction", soapAction);
StringEntity data = new StringEntity(soapXml,
Charset.forName("UTF-8"));
httpPost.setEntity(data);
CloseableHttpResponse response = closeableHttpClient
.execute(httpPost);
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
// 打印响应内容
retStr = EntityUtils.toString(httpEntity, "UTF-8");
}
// 释放资源
closeableHttpClient.close();
} catch (Exception e) {
}
return retStr;
}
}