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