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