httpClient访问webservice
之所以通过httpClient访问是因为有的webservice需要设置http header,比如利用soapUI工具时会设置http header,那么利用axis就没有办法设置http头(我没有找到),所以就需要利用httpClient进行webserivce访问,代码如下:
1, getData方法
private static String getData(String OperationCode, String param){
String returnVal = "" ;
StringBuilder xmlpara = new StringBuilder() ;
xmlpara.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:user=\"http://127.0.0.1:8080/UserAction\">") ;
xmlpara.append("<soapenv:Header/>") ;
xmlpara.append("<soapenv:Body>") ;
xmlpara.append("<user:getUserDetailByName>") ;
xmlpara.append("<user:param>" + param + "</user:param>") ;
xmlpara.append("</user:getUserDetailByName>") ;
xmlpara.append("</soapenv:Body>") ;
xmlpara.append("</soapenv:Envelope>") ;
String inputPara = xmlpara.toString() ;
HashMap<String,String> res = new HashMap<>();
// String endpoint = "http://124.205.248.2:8080/eSales/esales.asmx?WSDL";
String endpoint = "http://192.168.0.123:9090/esb.user";
PostMethod postMethod = new PostMethod(endpoint);
byte[] b;
try {
b = inputPara.getBytes("utf-8");
InputStream is = new ByteArrayInputStream(b,0,b.length);
RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
//把Soap请求数据添加到PostMethod中
postMethod.setRequestEntity(re);
postMethod.setRequestHeader("ClientId", "com.primeton.esb.hljsjzx.manage") ;
// postMethod.setRequestHeader("OperationCode", "com.primeton.esb.hljsjzx.Infrastructure.user.getUserDetailByName") ;
postMethod.setRequestHeader("OperationCode", OperationCode) ;
//生成一个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");
//res.put("msg", getServerData);
SAXReader sax = new SAXReader() ;
Document doc = sax.read(new ByteArrayInputStream(getServerData.getBytes("utf-8"))) ;
DefaultXPath xpath = new DefaultXPath("//ns1:out");
xpath.setNamespaceURIs(Collections.singletonMap("ns1","http://127.0.0.1:8080/UserAction"));
Element ele = (Element)xpath.selectSingleNode(doc) ;
returnVal = ele.getText();
}
} catch (Exception e) {
res.put("status", "1");
res.put("msg", e.toString());
e.printStackTrace();
}
return returnVal;
}
- 方法调用
public static void main(String[] args) {
String operationCode = "com.primeton.esb.hljsjzx.Infrastructure.user.getUserDetailByName" ;
Map map = getData(operationCode,xmlpara.toString()) ;
String val = "" ;
String status = (String)map.get("status");
if(status.equals("0")){
val = (String)map.get("msg") ;
}
SAXReader sax = new SAXReader() ;
try {
Document doc = sax.read(new ByteArrayInputStream(val.getBytes("utf-8"))) ;
DefaultXPath xpath = new DefaultXPath("//ns1:out");
xpath.setNamespaceURIs(Collections.singletonMap("ns1","http://127.0.0.1:8080/UserAction"));
Element ele = (Element)xpath.selectSingleNode(doc) ;
System.out.println(ele.getText());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}