XML-RPC→リフレクション
当初、Jythonでやろうと思っていたことが、Javaだけでもリフレクションを使えばできると気がついたのでJavaだけでやる方針に変更しました。
あー、追加した頂点にいろんなパラメータをセットするために、その頂点のメソッドを呼び出すところでつまずきました。そうか、Javaは名前だけでメソッドをゲットできないんですな。シグネチャが違えば同じ名前で複数のメソッドを作れるから。Pythonとはそこがちょっと違う。XML-RPCの引数にシグネチャまで指定するのは変なので、ここの頂点が持つメソッドの引数はObject1個に固定してしまいましょう。たくさん渡したければ配列なりハッシュなりを渡せばいいだけですから。
ははーん。InvocationTargetExceptionが起きると思ったら、XML-RPCで配列を投げるとJava側で受け取るのはVectorなのか。int[]にキャストしようとして怒られた。まぁ、そりゃそうか、要素にObjectじゃないものが混ざっているとやっかいだろうしな。ということはintもIntegerオブジェクトになっているんだろうな。
結局ColorHolderにVectorを引数に取るgetメソッドを追加。括弧だらけ。Jythonを使っていればもっと楽ちんだったのですが…まぁ、そんなに大変でもないからいいや。でもとりあえずXML-RPCで好きな色の丸い頂点を追加することはできるようになりました。setBackgroundってメソッド名にしてあるけども、引数がObjectとかいろいろ制約があるので一般的なsetterみたいな名前じゃなくてrpc_bgcolorとかにしましょうかね。
public static Color get(Vector rgb){
return get(
((Integer)rgb.get(0)).intValue(),
((Integer)rgb.get(1)).intValue(),
((Integer)rgb.get(2)).intValue());
}