Believe it,do it!

          Ideal is the beacon. Without ideal, there is no secure direction; without direction ,there is no life.
          理想是指路明燈。沒有理想,就沒有堅定的方向;沒有方向,就沒有生活。
          CTRL+T eclipse
          posts - 35, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          用JAVA調用.net的webservice實例

          Posted on 2009-05-18 13:57 三羽 閱讀(2114) 評論(0)  編輯  收藏 所屬分類: JAVA資料
           首先登錄www.wopos.com/webservice/Weather.asmx?op=getWeather。可以看到如下的SOAP信息 
          請求:
          以下內容為程序代碼:

          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="h ttp://www.w3.org/2001/XMLSchema" xmlns:soap="h ttp://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body>
              <getWeatherResponse xmlns="h ttp://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℃,風==微風,紫外線==弱
          主站蜘蛛池模板: 和静县| 绵阳市| 仁寿县| 怀来县| 陵水| 沧源| 武城县| 探索| 吉林市| 吉安县| 河源市| 麻江县| 五家渠市| 搜索| 永济市| 江源县| 通辽市| 大余县| 木兰县| 石林| 元江| 南雄市| 灵璧县| 赤城县| 阆中市| 桐庐县| 澜沧| 基隆市| 年辖:市辖区| 明光市| 西吉县| 赣州市| 元阳县| 呼伦贝尔市| 体育| 延吉市| 青州市| 昌都县| 搜索| 福安市| 林州市|