[ruby-list:43064] soap4rでの送信フォーマット変更

From: "中田雅美" <mimiger2007@...>
Date: 2006-12-18 10:11:37 UTC
List: ruby-list #43064
はじめまして、本日登録しました中田と申します。
SOAPについて、お知恵をお貸しください。

soap4r(1.5.5)を使用して、他言語CGIとのSOAP通信を行おうとしています。
RubyがClientになる場合と、
Server(RonR/AWSを使用)になる場合の2パターンがあります。
やりたいのは、Clientの時は

<Envelope>
  <body>
    <メソッド名>
      Request文字列(任意)
    </メソッド名>
  </body>
</Envelope>

を送信。Serverの時は

<Envelope>
  <body>
    <メソッド名 + "Responce">
      Responce文字列(任意)
    </メソッド名 + "Responce">
  </body>
</Envelope>

を返すという処理です。
メソッド名のタグを含めたBody内側を自分でセットし、
変更されること無く送信したいです。

soap4rの中では、
<return>や<変数名>のタグが付けられたり、
中の文字列がエスケープされるようになっているようです。
これを回避する良い方法を探しております。

今のところ、
soap/generator.rb の generate メソッドを以下のように変更して
Envelopeの文字列を作っています。

  def generate(obj, io = nil)
    @buf = io || ''
    @indent = ''

    prologue
    @handlers.each do |uri, handler|
      handler.encode_prologue
    end

    ns = XSD::NS.new
    @buf << xmldecl
#    元のコード
#    encode_data(ns, obj, nil)

#   ここから追加
    # Bodyタグまで固定でセット
    @buf << "<env:Envelope>\n" + "  <env:Body>\n"

    # 送信文字列(Bodyの内側の内容)をそのままセット
    obj.body.request.each {|key, val|
      @buf << val.to_s
    }

    # 終了タグまで固定でセット
    @buf << "\n  </env:Body>\n</env:Envelope>"
#   ここまで追加

    @handlers.each do |uri, handler|
      handler.encode_epilogue
    end
    epilogue

    @buf
  end

無理矢理で見苦しくてすみません。
このようなライブラリ変更なしで済む方法や
手がかりがありましたらご教示ください。
よろしくお願いします。

In This Thread

Prev Next