Sealyu

          --- 博客已遷移至: http://www.sealyu.com/blog

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

          用到的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請求數(shù)據(jù)添加到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對象,并發(fā)出postMethod請求

              HttpClient httpClient 
          = new HttpClient();
              
          int statusCode = httpClient.executeMethod(postMethod);
              String soapResponseData 
          =  postMethod.getResponseBodyAsString();
                  
                  
              System.out.print(soapResponseData);



          動態(tài)構(gòu)造調(diào)用串的話如下實現(xiàn):


              
          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();
              }
          posted on 2010-07-27 14:42 seal 閱讀(1972) 評論(0)  編輯  收藏 所屬分類: web
          主站蜘蛛池模板: 凌海市| 固原市| 黄冈市| 嘉荫县| 天门市| 冀州市| 阳西县| 旅游| 桂林市| 密云县| 邳州市| 象州县| 永州市| 昭通市| 鲁甸县| 桑日县| 琼海市| 鄂尔多斯市| 磴口县| 陈巴尔虎旗| 扶沟县| 桓台县| 交城县| 台湾省| 新蔡县| 林口县| 仲巴县| 望江县| 喀什市| 兴文县| 万年县| 萨迦县| 西丰县| 尼玛县| 新沂市| 鹤山市| 易门县| 平山县| 庆安县| 洛宁县| 招远市|