Xml-rpc-xml-rpc-examples

提供:Dev Guides
移動先:案内検索

XML-RPC-例

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

会話のJava側は、http://xml.apache.org/xmlrpc/で入手可能なApache XMLプロジェクトのApache XML-RPCを使用します。

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

XML-RPCクライアント

sum functionという関数を呼び出す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など)のクラスが含まれています。
  • パッケージjava.utilは、Vectorクラスに必要です。
  • 関数_server.execute(…​)_は、リクエストをサーバーに送信します。 プロシージャsum(17,13)は、ローカルプロシージャであるかのようにサーバー上で呼び出されます。 プロシージャコールの戻り値は常にオブジェクトです。
  • ここで、「サンプル」はサーバーで定義されているハンドラーを示します。
  • プロシージャコールのすべてのパラメーターは常にベクターに収集されることに注意してください。
  • XmlRpcClientクラスは、サーバーマシンの「Webアドレス」に続いて/RPC2を指定することにより構築されます。
  • localhost-ローカルマシンを意味します
  • 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