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 閱讀(1966) 評論(0)  編輯  收藏 所屬分類: web
          主站蜘蛛池模板: 兰坪| 莱阳市| 柯坪县| 宁城县| 通化县| 澄城县| 东安县| 新和县| 河南省| 西藏| 宜黄县| 伊宁县| 大名县| 保德县| 安化县| 兖州市| 中山市| 鄄城县| 江西省| 安徽省| 南平市| 喀喇| 秭归县| 虹口区| 杭锦后旗| 怀柔区| 那坡县| 吉林省| 黄龙县| 沈阳市| 白水县| 呼和浩特市| 库尔勒市| 如东县| 华宁县| 育儿| 阳曲县| 平和县| 连州市| 柯坪县| 和平区|