httpclient 调用webservice

来源:互联网 发布:阿里云服务器闪退 编辑:程序博客网 时间:2024/05/22 16:01

 

使用HttpClient对Web Service调用

用到的jar包有:
    commons-codec-1.3.jar
    commons-httpclient-3.0.jar
    commons-logging-1.0.4.jar


具体流程大致这样:

 

 

String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +         "<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\">" +           "<soap12:Body>" +            " <qqCheckOnline xmlns=\"http://WebXml.com.cn/\">" +           "    <qqCode>349104641</qqCode>" +          "   </qqCheckOnline>" +         "  </soap12:Body>" +         "</soap12:Envelope>";                 System.out.println(soapRequestData);     //PostMethod postMethod = new PostMethod("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");         PostMethod postMethod = new PostMethod("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");    // 然后把Soap请求数据添加到PostMethod中     byte[] b = soapRequestData.getBytes("utf-8");     InputStream is = new ByteArrayInputStream(b,0,b.length);     RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");     postMethod.setRequestEntity(re);         //最后生成一个HttpClient对象,并发出postMethod请求     HttpClient httpClient = new HttpClient();     int statusCode = httpClient.executeMethod(postMethod);     String soapResponseData =  postMethod.getResponseBodyAsString();                     System.out.print(soapResponseData); 


动态构造调用串的话如下实现:

 

private String tns;     private String methodName;     private String wsdlLocation;     private String soapResponseData; private int invoke(Map<String, String> patameterMap) throws Exception {         PostMethod postMethod = new PostMethod(wsdlLocation);         String soapRequestData = buildRequestData(patameterMap);         byte[] bytes = soapRequestData.getBytes("utf-8");         InputStream inputStream = new ByteArrayInputStream(bytes, 0,                 bytes.length);         RequestEntity requestEntity = new InputStreamRequestEntity(inputStream,                 bytes.length, "application/soap+xml; charset=utf-8");         postMethod.setRequestEntity(requestEntity);         HttpClient httpClient = new HttpClient();         int statusCode = httpClient.executeMethod(postMethod);         soapResponseData = postMethod.getResponseBodyAsString();         return statusCode;     }     private String buildRequestData(Map<String, String> patameterMap) {         StringBuffer soapRequestData = new StringBuffer();         soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");         soapRequestData                 .append("<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\">");         soapRequestData.append("<soap12:Body>");         soapRequestData.append("<" + methodName + " xmlns=\"" + tns + "\">");         Set<String> nameSet = patameterMap.keySet();         for (String name : nameSet) {             soapRequestData.append("<" + name + ">" + patameterMap.get(name)                     + "</" + name + ">");         }         soapRequestData.append("</" + methodName + ">");         soapRequestData.append("</soap12:Body>");         soapRequestData.append("</soap12:Envelope>");         return soapRequestData.toString();     } 


 

原创粉丝点击