def parse_response resp, desc
if resp.at('faultcode')
detail = resp.at('detail')
fault = detail && @deserializer.deserialize(detail.children.first, 'MethodFault')
msg = resp.at('faultstring').text
if fault
raise RbVmomi::Fault.new(msg, fault)
else
fail "#{resp.at('faultcode').text}: #{msg}"
end
else
if desc
type = desc['is-task'] ? 'Task' : desc['wsdl_type']
returnvals = resp.children.select(&:element?).map { |c| @deserializer.deserialize c, type }
(desc['is-array'] && !desc['is-task']) ? returnvals : returnvals.first
else
nil
end
end
end