nDiki : XML-RPC

XML-RPC

HTTP を利用した RPC の一つ。 リクエストとレスポンスは XML 形式にエンコードされる。

Perl 実装

.NET Framework 実装

スポンサード リンク

2004年8月29日 (日)

XML-RPC - Java クライアントと Perl サーバ

Java プログラムと Perl プログラムとの連携に XML-RPCが使えないか検討。 まずは実験。

Perl

RPC::XMLモジュールを使う。

 #!/usr/bin/perl -w

 use strict;
 use RPC::XML::Server;

 my $server = RPC::XML::Server->new(port => 9876);
 $server->add_method( {name => 'Perl.eval',
                       signature => [ 'struct string' ],
                       code => sub { warn $_[1]; return {value => eval $_[1]}}});
 $server->server_loop;

引数の文字列を eval した結果を文字列で返す危険な手続き。

Java

いろいろライブラリがあり迷う。 Apache XML-RPCが簡単そうなのでまずはこれで。1.2-b1 を使用。

 import java.util.Vector;
 import java.util.Hashtable;
 import java.io.IOException;

 import org.apache.xmlrpc.XmlRpcClient;
 import org.apache.xmlrpc.XmlRpcException;

 public class XMLRPCClient {
   public static void main(String[] args) {
     String url = args[0];
     String methodName ="Perl.eval";
     Vector params = new Vector();
     params.add(args[1]);
     try {
       XmlRpcClient client = new XmlRpcClient(url);
       try {
         //String result = (String)client.execute(methodName, params);
         //System.out.println(result);
         Hashtable result = (Hashtable)client.execute(methodName, params);
         System.out.println(result.get("value"));
       } catch (XmlRpcException ex) {
         System.out.println(ex.getMessage());
       }
     } catch (IOException ex) {
       ex.printStackTrace();
     }
   }
 }

Perl 側でプログラムを起動しておいて実行。

 java -classpath .:xmlrpc-1.2-b1.jar \
   XMLRPCClient http://localhost:9876/ "3 + 5"

8 が出力される。成功。簡単。

スポンサード リンク
[ 8月29日全て ]

2004年9月14日 (火)

XMLRPC::Lite + 自前の HTTP::Daemon サーバ

既に HTTP::Daemon で作成されているHTTPサーバで、XML-RPC インタフェースを提供したい。 前回のチェックで XMLRPC::Lite を使う事にした(RPC::XMLActivePerl 5.6.1 build638 でテストが通らない)。 このパッケージで用意されているサーバ向けモジュールは、主に単独CGI プログラムで使うモジュールと、自前で HTTP::Daemon をまわすサーバタイプ。

そのままでは使えないので、以下のように。

  1. XMLRPC::Transport::HTTP::CGI のサブクラスを作成し、handle をオーバライドする。中身は SOAP::Transport::HTTP::Server::handle を呼ぶだけ (SUPER::handle では駄目)。
  2. XML-RPC リクエストがきたら、上記インスタンスの request メソッドで HTTP::Request オブジェクトを渡す。
  3. handle を実行。
  4. response メソッドで HTTP::Response を受け取り、クライアントに送信。

handle メソッドで入出力をさせないようにするのがポイント。

[ 9月14日全て ]

2007年10月19日 (金)

今日のさえずり - え? ラミヤータ閉店なの?

  • 11:36 え? ラミヤータ閉店なの?
  • 12:12 セブン-イレブンの豚焼肉弁当、肉がパスタで底上げされているのに気がつかないで買ってきた。 *Tw*
  • 13:49 Firefox 2.0.0.8 にしたので keyconfig 入れなおした。 *Tw*
  • 16:04 XML-RPC で struct->member->name 値を可変値とする(連想配列的に使う)仕様だと、言語によっては面倒だということに今頃気がつく。 *Tw*
  • 18:11 「るるぶ品川区」まずは立ち読みしてみたい。 *Tw*
[ 10月19日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.048006s / load averages: 0.48, 0.33, 0.33
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker