最近领导让写个接口,但对方给的wsdl文件用cxf调用老师失败,生成客户端也不行。无奈网上找了个httpclient调用的例子按照需求改写了一下,特此备个份!
public static String call(String wsdl, String requestData) {
try {
// requestData可以直接用soapui中请求的数据,注意<![CDATA[]]>的使用
PostMethod postMethod = new PostMethod(wsdl);
byte[] b = requestData.getBytes("UTF-8");
InputStream in = new ByteArrayInputStream(b, 0, b.length);
RequestEntity re = new InputStreamRequestEntity(in,
"application/soap+xml; charset=utf-8");
postMethod.setRequestEntity(re);
// 设置header SOAPAction,不设置的话,会报异常:no SOAPAction
// header, SOAPAction 为wsdl文件中对应属性,应加上双引号否则报soapaction格式错误
postMethod.setRequestHeader("SOAPAction", SIEBLE_SOAP_ACTION);
HttpClient client = new HttpClient();
// 设置超时(不知道默认是多久,没有设置的时候,也没有报错,设置下保险些)
int timeout = 10 * 60 * 1000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(timeout);
client.getHttpConnectionManager().getParams().setSoTimeout(timeout);
int status = client.executeMethod(postMethod);
if (status == 200) {// 成功
String is = postMethod.getResponseBodyAsString();
System.out.println("通信成功:"+is);
return is;
/**
* 获取的结果可以参考用soapui调用时的返回值,
* 如果约定的返回值是XML,并不会像soapui一样把xml用<![CDATA[]]>包含起来,要注意解析的方法,
* 不知道soapui如何处理的,暂时没时间研究。
*/
//return getResponseXML(is);
} else {
System.out.println("错误代码:"+status+":"+postMethod.getResponseBodyAsString());
}
} catch (Exception e) {
//log.error(e.getMessage());
System.out.println(e.getMessage());
}
return null;
}