XML-RPC 経由で Ruby フレームワークをエクスポートしようとしています。ただし、XML-RPC サーバーにハンドラーとして直接追加されていないクラスからメソッドを呼び出そうとすると、いくつかの問題が発生します。以下の私の例を見てください:
次のようなRuby XML-RPCサーバーのテストがあります。
require "xmlrpc/server"
class ExampleBar
def bar()
return "hello world!"
end
end
class ExampleFoo
def foo()
return ExampleBar.new
end
def test()
return "test!"
end
end
s = XMLRPC::Server.new( 9090 )
s.add_introspection
s.add_handler( "example", ExampleFoo.new )
s.serve
そして、次のようなテスト Python XML-RPC クライアントがあります。
import xmlrpclib
s = xmlrpclib.Server( "http://127.0.0.1:9090/" )
print s.example.foo().bar()
Python クライアントが「hello world!」と出力することを期待します。これは、次の Ruby コードと同等です。
example = ExampleFoo.new
puts example.foo().bar()
ただし、「xmlrpclib.ProtocolError: <ProtocolError for 127.0.0.1:9090/: 500 Internal Server Error>」というエラーが生成されます。
print s.example.test() は正常に動作します。
新しい ExampleBar オブジェクトが送信されるとは思いませんが、サーバー側で「キャッシュ」され、その後の bar() の呼び出しが尊重されると予想します。
XML-RPC はこの種の使用法をサポートできますか?それとも基本的すぎますか?
だから私の質問は本当にそうだと思います。XML-RPC を使用していない場合、どうすればこれを機能させることができますか?