XML-RPC-例

XML-RPCを示すために、Javaを使用してXML-RPCメッセージを処理するサーバーを作成し、そのサーバー上のプロシージャを呼び出すJavaクライアントを作成します。

会話のJava側では、ApacheXMLプロジェクトのApacheXML-RPCを使用します。 http://xml.apache.org/xmlrpc/

すべての.jarファイルを適切なパスに配置し、JAVAを使用して1つのクライアントと1つの小さなXML-RPCサーバーを作成しましょう。

XML-RPCクライアント

sum関数と呼ばれる関数を呼び出すXML-RPCクライアントを作成してみましょう。この関数は2つのパラメーターを受け取り、それらの合計を返します。

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など)のクラスが含まれています。

  • Vectorクラスにはパッケージjava.utilが必要です。

  • 関数server.execute(...)は、サーバーに要求を送信します。プロシージャsum(17,13)は、ローカルプロシージャであるかのようにサーバー上で呼び出されます。プロシージャコールの戻り値は常にオブジェクトです。

  • ここで、「サンプル」はサーバーで定義されているハンドラーを示します。

  • プロシージャコールのすべてのパラメータは常にVectorに収集されることに注意してください。

  • XmlRpcClientクラスは、サーバーマシンの「Webアドレス」に続いて/ RPC2を指定することによって構築されます。

    • localhost-ローカルマシンを意味します

    • ローカルホストの代わりにIP番号を指定できます(例: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