<button id="mgqzr"></button>
<noscript id="mgqzr"></noscript>
<button id="mgqzr"></button>
<pre id="mgqzr"><sup id="mgqzr"><sub id="mgqzr"></sub></sup></pre>
<noscript id="mgqzr"><b id="mgqzr"></b></noscript><button id="mgqzr"></button>

<noscript id="mgqzr"></noscript><button id="mgqzr"><b id="mgqzr"><th id="mgqzr"></th></b></button>
<pre id="mgqzr"><b id="mgqzr"></b></pre><button id="mgqzr"><menuitem id="mgqzr"><table id="mgqzr"></table></menuitem></button>
<pre id="mgqzr"><input id="mgqzr"></input></pre>

XML-RPC - 示例

為了演示XML-RPC,我們將創建一個使用Java處理XML-RPC消息的服務器,我們將創建一個Java客戶端來調用該服務器上的過程.

<對話的Java端使用Apache XML Project的Apache XML-RPC,可從 http://xml.apache獲得. org/xmlrpc/

將所有.jar文件放在適當的路徑中,讓我們使用JAVA創建一個客戶端和一個小型XML-RPC服務器.

XML-RPC客戶端

讓我們編寫一個XML-RPC客戶端來調用一個名為 sum 函數的函數.這個函數接受兩個參數并返回它們的總和.

import java.util.*;
import org.apache.xmlrpc.*;

public class JavaClient {
   public static void main (String [] args) {
   
      try {
         XmlRpcClient client = new XmlRpcClient("http://localhost/RPC2"); 
         Vector params = new Vector();
         
         params.addElement(new Integer(17));
         params.addElement(new Integer(13));

         Object result = server.execute("sample.sum", params);

         int sum = ((Integer) result).intValue();
         System.out.println("The sum is: "+ sum);

      } catch (Exception exception) {
         System.err.println("JavaClient: " + exception);
      }
   }
}

讓我們看看上面的示例客戶端發生了什么.

  • Java包org.apache.xmlrpc包含XML-RPC Java客戶端和XML-RPC服務器的類,例如XmlRpcClient.

  • 包類java.util是Vector類所必需的.

  • 函數 server.execute(...)將請求發送到服務器.在服務器上調用過程sum(17,13),就好像它是本地過程一樣.過程調用的返回值始終是Object.

  • 這里"sample"表示在服務器中定義的處理程序.

  • 請注意,過程調用的所有參數總是在Vector中收集.

  • XmlRpcClient類是通過指定服務器計算機的"Web地址",然后指定/RPC2來構造.

    • localhost  - 表示本地計算機

    • 您可以指定IP號而不是localhost,例如194.80.215.219

    • 您可以指定域名,例如xyz.dyndns.org

    • 您可以將端口號與域名一起指定為xyz.dyndns.org:8080.默認端口為80

  • 請注意,遠程過程調用的結果始終為一個對象,它必須被轉換為適當的類型.

  • 當出現問題(沒有連接等)時,拋出異常并且它必須使用 catch 語句捕獲.

由于上述調用,客戶端將以下消息發送給服務器.請注意,這是由 server.execute(...)在內部處理的,你與它無關.

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
   <methodName>sample.sum</methodName>
   <params>
      <param>
         <value><int>17</int></value>
      </param>
		 
      <param>
         <value><int>13</int></value>
      </param>
   </params>
</methodCall>

XML-RPC服務器

以下是用Java編寫的XML-RPC服務器的源代碼.它使用了 org.apache.xmlrpc中提供的內置類.*

import org.apache.xmlrpc.*;

public class JavaServer { 

   public Integer sum(int x, int y){
      return new Integer(x+y);
   }

   public static void main (String [] args){
   
      try {

         System.out.println("Attempting to start XML-RPC Server...");
         
         WebServer server = new WebServer(80);
         server.addHandler("sample", new JavaServer());
         server.start();
         
         System.out.println("Started successfully.");
         System.out.println("Accepting requests. (Halt program to stop.)");
         
      } catch (Exception exception){
         System.err.println("JavaServer: " + exception);
      }
   }
}

讓我們看看我們在上面的示例服務器中所做的工作.

  • 包org.apache.xmlrpc包含用于XML-RPC服務器實現的WebServer類.

  • 遠程調用的過程 sum 是作為類中的公共方法實現的.

  • 然后,同一服務器類的實例與客戶端可訪問的處理程序相關聯.

  • 服務器由端口號初始化(此處: 80).

  • 當出現問題時,拋出異常并且必須使用 catch 語句捕獲.

對于給定示例客戶端中提到的調用,服務器將以下響應發送回客戶端:

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodResponse>
   <params>
      <param>
         <value><int>30</int></value>
      </param>
   </params>
</methodResponse>

現在您的服務器已準備就緒,因此請按照以下步驟編譯并運行它:

C:\ora\xmlrpc\java>java JavaServer
Attempting to start XML-RPC Server...
Started successfully.
Accepting requests. (Halt program to stop.)

現在測試功能,按如下方式調用此服務器:

C:\ora\xmlrpc\java>java JavaClient
30
亚洲AV无码国产精品
<button id="mgqzr"></button>
<noscript id="mgqzr"></noscript>
<button id="mgqzr"></button>
<pre id="mgqzr"><sup id="mgqzr"><sub id="mgqzr"></sub></sup></pre>
<noscript id="mgqzr"><b id="mgqzr"></b></noscript><button id="mgqzr"></button>

<noscript id="mgqzr"></noscript><button id="mgqzr"><b id="mgqzr"><th id="mgqzr"></th></b></button>
<pre id="mgqzr"><b id="mgqzr"></b></pre><button id="mgqzr"><menuitem id="mgqzr"><table id="mgqzr"></table></menuitem></button>
<pre id="mgqzr"><input id="mgqzr"></input></pre>