将Hand Soap :: Soap Response转换为ruby中的特定类

时间:2013-02-04 12:43:04

标签: ruby handsoap

我正在使用HandSoap为JAX-WS SOAP API创建客户端代码。我能够使用Nokigiri gem从SoapResponse中提取XML,但我无法将该响应转换为任何特定的类。在ruby中有没有办法将Handsoap :: SoapResponse转换为特定的类?

1 个答案:

答案 0 :(得分:0)

我做了一些研究,似乎没有其他方法可以直接进行,因此我使用XML来获取哈希并递归遍历此哈希以初始化类实例。

从SOAP响应中获取XML和哈希

  response = client.someSoapCall({:someParameter => "someValue"})
  doc = Nokogiri::XML.parse(response.document.to_raw)
  hash = Hash.from_xml(doc.to_s)

此函数会将哈希值转换为类

def recast(className, hash)
  hash.each_pair do |k, v|
    if (v.class==Hash)
      find(className, v)
    else
      membersArray = className.public_methods
      membersArray.each {
          |x|

        if (x.to_s==k.to_s)
          member =x.to_s
          className.send "#{member}=", v.to_s
        end

      }
    end
  end

end