一路拾遺
          Collect By Finding All The Way ......
          posts - 81,comments - 41,trackbacks - 0

          用到的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();
              }
          posted on 2010-05-27 16:30 胖胖泡泡 閱讀(1225) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 额尔古纳市| 鹤庆县| 若尔盖县| 宁陵县| 阳江市| 舒兰市| 榆中县| 临颍县| 若尔盖县| 瑞金市| 娄烦县| 应用必备| 杭锦后旗| 都昌县| 咸丰县| 北海市| 绵阳市| 宁明县| 菏泽市| 牡丹江市| 襄汾县| 玉门市| 定安县| 晋江市| 南通市| 鹤庆县| 南澳县| 大丰市| 彭州市| 福鼎市| 策勒县| 衢州市| 裕民县| 朝阳县| 华容县| 呈贡县| 壶关县| 宜昌市| 宣汉县| 泾源县| 东台市|