<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    耐心無止境 成功一瞬間

    BlogJava 聯系 聚合 管理
      31 Posts :: 5 Stories :: 25 Comments :: 0 Trackbacks
    本文描述了一個用Java編寫的不使用專門SOAP庫的簡單通用SOAP客戶機。該客戶機可以讓您用任何 XML 編輯器(或文本編輯器)創建自己的請求, 而不是在暗中為您創建 SOAP 請求 XML 文檔。 該客戶機向您顯示實際的 SOAP 響應 XML 文檔,而不是僅僅提供遠程方法的返回值。 這個簡短的 Java 程序精確顯示了什么是 SOAP:打開 HTTP 連接、發送適當 XML 以調用遠程方法、接著讀取服務器返回的 XML 響應。


    通用 Java SOAP 客戶機


    SOAP(簡單對象訪問協議)是 IBM、Microsoft、DevelopMentor 和 UserLand Software 為在網絡上交換信息而開發的一種已在發展的 W3C 標準。 隨著Web上可以公開使用的SOAP服務器的不斷增加,SOAP幾乎對用任何語言編寫的程序——即使是用流行的簡單語言(如 Visual Basic、JavaScript 和 perl)編寫的非常短小的程序——執行著HTML對Web瀏覽器所做的事:它為這些程序提供一個簡單的方法來利用萬維網上不斷增加的可用信息源。

    與 HTML 類似,SOAP 提供一套標記來表示在Web上使用HTTP傳輸協議(從 SOAP 1.1 以來,SMTP 也可以)發送的不同信息塊的作用。但是,SOAP向您提供的能力遠遠強于HTML。使用SOAP,您的程序向 SOAP服務器發送“SOAP請求”(一個簡短的XML文檔,描述在遠程機器上要調用的方法和所有要傳遞給它的參數)。SOAP服務器將嘗試用那些參數執行該方法,并將SOAP響應發回程序。響應可以是執行的結果,也可以是相應的錯誤消息。可以使用公共SOAP服務器為提出請求的客戶機提供股票價格、最新的貨幣兌換率、FedEx 包裹跟蹤信息、代數表達式的解決方案以及其它各類信息。

    在SOAP存在之前,嘗試使用這種信息的程序必須先捕獲Web頁面,然后“刮下”HTML,以查找適當的文本。 對這些Web頁面進行可視的重新設計(例如,將當前股票價格放到表中第三列而不是第二列中)就可以使這些程序無用。SOAP規范以及它所攜帶的簡要的SOAP請求和響應模式為客戶機和服務器之間的聯絡提供了一個框架,該框架是那些強健得多的信息收集工具的基礎。

    有許多SOAP客戶機可用于大多數的流行編程語言;有關詳盡列表,請參閱 SOAP::Lite for Perl 主頁上的 SOAP Toolkits 部分(請參閱參考資料)。大多數 SOAP 客戶機都提供類庫、COM 對象或從您自己程序調用的等同對象。通常,使用這些客戶機庫遵循以下模式:

    · 程序傳遞要調用的遠程方法的名稱和所有必需參數。

    · 庫組裝 SOAP 請求的適當 XML 文檔以將這一信息打包。

    · 庫將這一 XML 文檔傳遞給 SOAP 端點 URL 標識的 SOAP 服務器,這與通過指定服務器的 URL 將瀏覽器指向 Web 服務器地址很類似。

    · SOAP 服務器嘗試執行方法后,它組裝包含執行結果的 SOAP 響應 XML 文檔,并將它發回 SOAP 客戶機。

    · 接收SOAP響應時,客戶機庫對XML進行語法分析以獲得方法調用的結果,并將結果傳遞給使用庫的程序。


    SOAPClient4XG


    SOAP 的介紹(請參閱 developerWorks 上 Graham Glass 編寫得極佳的“ Web 服務革命”專欄)總是討論用于 SOAP 請求和響應的 XML 的結構,但是我接觸到的 SOAP 客戶機總是會暗中進行 XML 組裝和語法分析,所以我從來不用知道。 作為使用 XML 的人員,我曾想自己執行 XML 部分;我認為如果 SOAP 這樣簡單,那么我應該能夠編寫一個簡單的 SOAP 客戶機來讀取 SOAP 請求的 XML 文檔、將它發送到命令行上指定的 SOAP 端點 URL、讀回響應文檔并輸出該響應。這將使它成為一個真正的通用 SOAP 客戶機,因為它調用任何 SOAP 服務器上的任何方法。

    清單1中顯示的 SoapClient4XG(“SOAP Client for XML Geeks”)Java類執行該任務,而不使用早先提到的 SOAP Toolkits 頁面上列出的任何專用 Java SOAP 類(請參閱參考資料)。 檢查了必需的 SOAP 端點 URL 和 SOAP XML 文檔文件名參數及可選的 SOAP 操作參數后,讀入文件,將它發送到 SOAP 服務器,讀回響應,然后將其輸出到標準出口。

    清單1

    Listing 1. The complete SOAP client
    /**
    * SOAPClient4XG. Read the SOAP envelope file passed as the second
    * parameter, pass it to the SOAP endpoint passed as the first parameter, and
    * print out the SOAP envelope passed as a response.  with help from Michael
    * Brennan 03/09/01
    *
    *
    * @author  Bob DuCharme
    * @version 1.1
    * @param   SOAPUrl      URL of SOAP Endpoint to send request.
    * @param   xmlFile2Send A file with an XML document of the request.  
    *
    * 5/23/01 revision: SOAPAction added
    */
    import java.io.*;
    import java.net.*;
    public class SOAPClient4XG {
        public static void main(String[] args) throws Exception {
            if (args.length  < 2) {
                System.err.println("Usage:  java SOAPClient4XG " +
                                   "http://soapURL soapEnvelopefile.xml" +
                                   " [SOAPAction]");
                                    System.err.println("SOAPAction is optional.");
                System.exit(1);
            }
            String SOAPUrl      = args[0];
            String xmlFile2Send = args[1];
                      String SOAPAction = "";
            if (args.length  > 2)
                                    SOAPAction = args[2];
            // Create the connection where we&#39;re going to send the file.
            URL url = new URL(SOAPUrl);
            URLConnection connection = url.openConnection();
            HttpURLConnection httpConn = (HttpURLConnection) connection;
            // Open the input file. After we copy it to a byte array, we can see
            // how big it is so that we can set the HTTP Cotent-Length
            // property. (See complete e-mail below for more on this.)
            FileInputStream fin = new FileInputStream(xmlFile2Send);
            ByteArrayOutputStream bout = new ByteArrayOutputStream();    
            // Copy the SOAP file to the open connection.
            copy(fin,bout);
            fin.close();
            byte[] b = bout.toByteArray();
            // Set the appropriate HTTP parameters.
            httpConn.setRequestProperty( "Content-Length",
                                         String.valueOf( b.length ) );
            httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
                      httpConn.setRequestProperty("SOAPAction",SOAPAction);
            httpConn.setRequestMethod( "POST" );
            httpConn.setDoOutput(true);
            httpConn.setDoInput(true);
            // Everything&#39;s set up; send the XML that was read in to b.
            OutputStream out = httpConn.getOutputStream();
            out.write( b );    
            out.close();
            // Read the response and write it to standard out.
            InputStreamReader isr =
                new InputStreamReader(httpConn.getInputStream());
            BufferedReader in = new BufferedReader(isr);
            String inputLine;
            while ((inputLine = in.readLine()) != null)
                System.out.println(inputLine);
            in.close();
        }
      // copy method from From E.R. Harold&#39;s book "Java I/O"
      public static void copy(InputStream in, OutputStream out)
       throws IOException {
        // do not allow other threads to read from the
        // input or write to the output while copying is
        // taking place
        synchronized (in) {
          synchronized (out) {
            byte[] buffer = new byte[256];
            while (true) {
              int bytesRead = in.read(buffer);
              if (bytesRead == -1) break;
              out.write(buffer, 0, bytesRead);
            }
          }
        }
      }
    }


    posted on 2005-10-28 13:26 Joshua Yan 閱讀(585) 評論(0)  編輯  收藏 所屬分類: JavaWeb
    主站蜘蛛池模板: 亚洲一区二区三区在线播放 | 特a级免费高清黄色片| 91免费资源网站入口| 亚洲欧洲日产v特级毛片| 18级成人毛片免费观看| 亚洲精品日韩专区silk| 16女性下面扒开无遮挡免费| 久久亚洲日韩精品一区二区三区| 久久久久久毛片免费播放| 青青草原精品国产亚洲av| 国产人成免费视频网站| 国产精品亚洲午夜一区二区三区| 在线观看免费大黄网站| 在线观看免费亚洲| 久久夜色精品国产亚洲av | 久久精品国产亚洲av麻豆色欲| 无码日韩精品一区二区免费暖暖| 中文字幕亚洲综合精品一区| 国产精品色拉拉免费看| 亚洲午夜福利在线视频| 亚洲午夜精品久久久久久浪潮| 久久久WWW免费人成精品| 亚洲AV无码久久| 免费a级毛片无码a∨蜜芽试看| 亚洲爆乳AAA无码专区| 亚洲JIZZJIZZ中国少妇中文| 成人电影在线免费观看| 亚洲精品国产免费| 国产美女无遮挡免费视频| xxxx日本在线播放免费不卡| 亚洲AV电影院在线观看| 免费黄网在线观看| 男女拍拍拍免费视频网站| 亚洲资源在线视频| 国产免费怕怕免费视频观看| 任你躁在线精品免费| 国产91在线|亚洲| 亚洲最大AV网站在线观看| 可以免费看黄的网站| 国产精品免费久久| 激情综合亚洲色婷婷五月|