隨筆 - 9, 文章 - 1, 評論 - 2, 引用 - 0
          數據加載中……

          [轉]用JAVA調用.net的webservice實例

           最近做的項目都是同webService有關的,自然就要關心一下webservice方面的資源。
          ::URL::http://www.wopos.com/webservice/Weather.asmx?op=getWeather

          是一個天氣預報的webservice,從它的輸出結果來看天氣數據應該來自中央氣象局的問天網
          ::URL::http://www.tq121.com.cn/

          不過這方面就不用再多關心了,我們關心的是怎樣調用這個webservice。
                 首先登錄www.wopos.com/webservice/Weather.asmx?op=getWeather??梢钥吹饺缦碌腟OAP信息 
          請求:
          以下內容為程序代碼:

          POST /webservice/Weather.asmx http/1.1
          Host: www.wopos.com
          Content-Type: text/xml; charset=utf-8
          Content-Length: length
          SOAPAction: "http://tempuri.org/getWeather"

          <?xml version="1.0" encoding="utf-8"?>
          <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            
          <soap:Body>
              
          <getWeather xmlns="http://tempuri.org/">
                
          <mCity>string</mCity>
              
          </getWeather>
            
          </soap:Body>
          </soap:Envelope>

          把XML部分全部復制下來創建一個XML文件(普通的文本文件也可以),為了以后編程方便,把
          以下內容為程序代碼:

                                 ...
                <mCity>string</mCity> 
                                 ...

          改成
          以下內容為程序代碼:

                                ...
                <mCity>${city}$</mCity> 
                                 ...

          weathersoap.xml保存在以后生成的類的同一目錄。

          響應:
          以下內容為程序代碼:

          http/1.1 200 OK
          Content-Type: text/xml; charset=utf-8
          Content-Length: length

          <?xml version="1.0" encoding="utf-8"?>
          <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            
          <soap:Body>
              
          <getWeatherResponse xmlns="http://tempuri.org/">
                
          <getWeatherResult>string</getWeatherResult>
              
          </getWeatherResponse>
            
          </soap:Body>
          </soap:Envelope>

          在后面對XML的解釋要用到響應部分的XML描述


                  接下就開始寫代碼了。
          以下內容為程序代碼:

          package jaqcy.weatherreport.client;

          import java.io.*;
          import java.net.*;
          import javax.xml.parsers.*;
          import org.w3c.dom.*;
          /**
           *
           * 
          @author jaqcy
           
          */

          public class WeatherReport 
          {    
              
          private static String getSoapRequest(String city)//city為要查詢天氣的城市名
              {
                  
          try 
                  
          {
                      Class cls
          =Object.class;
                      InputStreamReader isr
          =new InputStreamReader(cls.getResourceAsStream("/jaqcy/weatherreport/client/weathersoap.xml"));//讀取存在weathersoap的SOAP信息
                      BufferedReader reader=new BufferedReader(isr);
                      String soap
          ="";
                      String tmp;
                      
          while((tmp=reader.readLine())!=null)
                      
          {
                          soap
          +=tmp;
                      }
                      
                      reader.close();
                      isr.close();
                      
          return soap.replace("${city}$",city);//用傳入的參數city替換原來的${city}$
                  }
           
                  
          catch (Exception ex) 
                  
          {
                      ex.printStackTrace();
                      
          return null;
                  }

              }

            
          /*
              *返回InputStream是因為w3c DOM中Document的parse方法可
              *以接受InputStream類型的參數,方面在下一步對XML的解釋
              
          */

              
          private static InputStream getSoapInputStream(String city)throws Exception
              
          {
                  
          try
                  
          {
                      String soap
          =getSoapRequest(city);
                      
          if(soap==null)
                      
          {
                          
          return null;
                      }

                      URL url
          =new URL("http://www.wopos.com/webservice/Weather.asmx");
                      URLConnection conn
          =url.openConnection();
                      conn.setUseCaches(
          false);
                      conn.setDoInput(
          true);
                      conn.setDoOutput(
          true);

                      conn.setRequestProperty(
          "Content-Length", Integer.toString(soap.length()));
                      conn.setRequestProperty(
          "Content-Type""text/xml; charset=utf-8");
                      conn.setRequestProperty(
          "SOAPAction","\"http://tempuri.org/getWeather\"");

                      OutputStream os
          =conn.getOutputStream();
                      OutputStreamWriter osw
          =new OutputStreamWriter(os,"utf-8");
                      osw.write(soap);
                      osw.flush();
                      osw.close();

                      InputStream is
          =conn.getInputStream();            
                      
          return is;   
                  }

                  
          catch(Exception e)
                  
          {
                      e.printStackTrace();
                      
          return null;
                  }

              }

          /*
            *用W3C DOM對返回的XML進行解釋
            *
            
          */

              
          public static String getWeather(String city)
              
          {
                  
          try
                  
          {
                      Document doc;
                      DocumentBuilderFactory dbf
          =DocumentBuilderFactory.newInstance();
                      dbf.setNamespaceAware(
          true);
                      DocumentBuilder db
          =dbf.newDocumentBuilder();
                      InputStream is
          =getSoapInputStream(city);
                      doc
          =db.parse(is);
                      NodeList nl
          =doc.getElementsByTagName("getWeatherResult");
                      Node n
          =nl.item(0);
                      String weather
          =n.getFirstChild().getNodeValue();
                      is.close();
                      
          return weather;
                  }

                  
          catch(Exception e)
                  
          {
                      e.printStackTrace();
                      
          return null;
                  }

              }

          }


          寫個main方法檢驗一下結果
          以下內容為程序代碼:


             
           public static void main(String[] args)throws Exception
              
          {
                  System.out.println(WeatherReport.getWeather(
          "珠海"));
              }


          結果如下
          以下內容為程序代碼:

          城市==珠海,日期==4.02-4.03,圖1==http://weather.tq121.com.cn/images/a1.gif,圖2==http://weather.tq121.com.cn/images/00.gif,天氣==多云,溫度==28℃~22℃,風==微風,紫外線==弱

          結果是有點亂,不過只要把它分割開來也是很容易的事。
                  在自己的應用程序中加上天氣預報的功能,對程序的競爭力也是有好處的,而且實現也相當的簡單,何樂而不為呢?

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=669923

          posted on 2007-04-06 09:08 趙貴陽 閱讀(6897) 評論(1)  編輯  收藏 所屬分類: WEBSERVICE

          評論

          # re: [轉]用JAVA調用.net的webservice實例   回復  更多評論   

          第三方撒范德薩發送到發送到
          2013-09-16 19:52 | 奧德賽
          主站蜘蛛池模板: 新巴尔虎左旗| 岫岩| 松桃| 辽阳县| 潞城市| 台南市| 收藏| 邵武市| 个旧市| 海安县| 商河县| 铜鼓县| 延川县| 贵定县| 武胜县| 栾川县| 泰和县| 铁岭县| 边坝县| 百色市| 浦县| 承德市| 民勤县| 清丰县| 屯留县| 南澳县| 通山县| 沈阳市| 宣武区| 巴中市| 盘锦市| 光山县| 镶黄旗| 师宗县| 三门县| 汉川市| 宜宾县| 洪湖市| 新兴县| 郓城县| 大姚县|