LovemacServer.rb

soapサーバ本体を定義するファイル。通常、soap4rが自動生成したスクリプトがそのまま利用できますので変更する必要はありません。スクリプトの最後の部分が実際のサーバの可動部分になります。ip-adressとportの部分にはwsdlのlocationで指定した値が設定されているハズです。

server = LovemacPortTypeApp.new('app', nil, 'ip-adress',port)
trap(:INT) do
  server.shutdown
end
server.start

LovemacService.rb

スクリプトで使用するクラス定義がされています。今回のサンプルの場合、インタフェースとして使用するクラスがそれぞれ定義されています。今回のサンプルでは、

  1. RequestId
  2. ItemInfoResult
  3. ItemInfoResultArray

の4つのクラス定義がされています。wsdlで指定した項目がそれぞれアクセサとして定義されてます。また、戻り値として複数の情報を返すItemInfoResultArrayクラスは名前通りArrayクラスを継承したクラスとなっています。ここで定義されたクラスは通常valueオブジェクトとして機能しますのでやはり編集の必要はないかと思いますが、データの編集など必要があればこのクラスにメソッドを定義することになります。

LovemacServiceServant.rb

このファイルがサービスのメインスクリプトになります。このファイルにwsdlで指定したoperation(=メソッド)を実装します。従ってこのファイルにはサービスとして提供するメソッド

の各メソッドを定義します。サンプルでは単純にserviceStart()メソッドでデータベースへの接続。GetItemInfoByPrice()で指定した価格以上の商品を検索。そして、serviceEnd()でデータベースの切断。という単純な実装です。この実装の中身は単純なRubyスクリプトになります。

def ServiceStart
  @mysql = Mysql::new('localhost','user','passwd','sample_db')
  @mysql.query('set character set utf8')
  @mysql.nil? ? false : true
end
def GetItemIfoByPrice(price)
  results = ItemInfoResultArray.new
  query = "select name,price from t_sample where price < #{price};"
  @mysql.query(query).each { | r | 
    results << ItemInfoResult.new(r[0],r[1])
  }
  return results
end
def ServiceEnd
  @mysql.close()
end