logo       

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

lang.ruby.japanese

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

はじめまして、本日登録しました中田と申します。
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

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




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise