« 日記 |Main| JavaでXML-RPCを使うには »

« RenderableVertex | log | GRINEditのマウス制御部分… »

XML-RPCとりあえず動く

外付けHDDを忘れたのでNarVisualizerのソースが読めません。Google先生に聞いてXML-RPCサーバを立ち上げてみました。
import xmlrpclib

s = xmlrpclib.Server("http://localhost:8080/RPC2")
print s.grinedit.getSelectedVertex()

Fault: <Fault 0: 'org.apache.xmlrpc.XmlRpcException: Unsupported Java type: class java.util.ArrayList'>

XML-RPCで受け渡しできる型は限られているので当たり前。だけど、どのみちVertexを追加するときにいろいろなサブクラスのインスタンスを渡したくなるわけだから、ここでXML-RPCで受け取れるような型を返すようにMediatorを修正するのは無意味。XML-RPC用にもう1枚レイヤーを作るのが妥当なソリューションでしょうか。XML-RPCのハンドラをJythonで実装することにします。


現状、init.pyの中でJava(apache)のXML-RPCサーバを起動。

# run XML-RPC server
from org.apache.xmlrpc import WebServer

server = WebServer(8080)
server.addHandler("grinedit", med)
server.start()

Mediatorクラスがテスト用に整数を取って1足して返す関数incを持つ。

public class Mediator {
:
	public int inc(int x){
		return x + 1;
	}
}

別プロセスのPython(Jythonではない)から以下のコードを実行。

import xmlrpclib

s = xmlrpclib.Server("http://localhost:8080/RPC2")
print s.grinedit.inc(5)

これで「6」とプリントされます。別プロセスのソフトウェアからXMLでクエリを投げて、GRINEditがそれを受け取って処理をし、結果をまた呼び出し元のソフトウェアに投げ返す、という基本的なところは動きました。

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/66

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.