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がそれを受け取って処理をし、結果をまた呼び出し元のソフトウェアに投げ返す、という基本的なところは動きました。