RubyでSOAP-RPCサーバを作る2
WSDLができたら、後は楽ちんでした。soap4rに付属のwsdl2rubyをつかってrubyスクリプトを生成して実際のメソッドを実装すればそれでオシマイ。
ruby wsdl2ruby --wsdl ./lovmac.wsdl --type server --force
で、3つのrubyスクリプトが生成されます。
- LovemacServer.rb
- LovemacService.rb
- LovemacServiceServant.rb
1.はSOAPサーバの本体。基本的にこれを修正することはなさそうです。2.はWSDLで定義したメッセージに関するクラスが生成されていました。作成したWSDLで言えば、types要素の部分がrubyのクラスとして生成されていました。ItemInfoResultはvalueオブジェクトとして、ItemInfoResultArrayは::Arrayの派生クラスとしてそれぞれ定義されています。
require 'xsd/qname'
# {urn:LovemacServices}ItemInfoResult
class ItemInfoResult
@@schema_type = "ItemInfoResult"
@@schema_ns = "urn:LovemacServices"
@@schema_element = [["name", ["SOAP::SOAPString", XSD::QName.new(nil, "name")]],
["age", ["SOAP::SOAPUnsignedInt", XSD::QName.new(nil, "age")]]]
attr_accessor :name
attr_accessor :age
def initialize(name = nil, age = nil)
@name = name
@age = age
end
end
# {urn:LovemacServices}ItemInfoResultArray
class ItemInfoResultArray < ::Array
@@schema_type = "ItemInfoResult"
@@schema_ns = "urn:LovemacServices"
@@schema_element = [["item", ["ItemInfoResult", XSD::QName.new(nil, "item")]]]
end
最後、3.に実際の処理を実装して完了です。処理の実装は、wsdlのoperationで定義したメソッドのスケルトンが生成されていますのでここに2.で定義したクラスを使用して普通にRubyスクリプトを書きます。今回の場合、情報取得の部分はこんな感じ。(serviceStart()とserviceEnd()はそれぞれデータベースへの接続・切断処理を入れています)これでサーバ側の処理は完了。
def getItemInfo(find_age)
p [find_age]
result = ItemInfoResultArray.new
@mysql.query("select name,age from sample_t where age >= #{find_age}").each do | c |
result << ItemInfoResult.new(c[0],c[1])
end
result
end
後はクライアントのスクリプトを用意してテストします。
require 'soap/wsdlDriver'
lovm = SOAP::WSDLDriverFactory.new('./lovemac.wsdl').create_rpc_driver
lovm.generate_explicit_type = true
if lovm.serviceStart
result = lovm.getItemInfo(18)
result.each do | r |
puts "#{r.name} [年齢]#{r.age}"
end
lovm.serviceEnd
else
puts "connect error!"
end
wsdlさえ書けてしまえば後は比較的簡単にできました。これでようやく、SOAP-RPCサーバが完成。そもそもの目的だったマック用GUIアプリの作成に取りかかれます。ところで、ApplescriptってSOAPだけじゃなくてXMLRPCにも対応していることに今更気が付きました。なにも、時間をかけてSOAP化することなかったなぁー。まあ、勉強できてヨカッタけど。
この記事のトラックバックURL:
当ブログのユニーク・アクセス数は、付属のユニーク・アクセスカウンター(U)の2.5〜3倍と見ていただくとちょうど良いみたいです。
ライブドア・本当にやっつける。一部のジャバ表...









Comments