我可以在 Savon 日志中看到我的 SOAP 错误包含这样的 XML:
<errorCode>666</errorCode><errorDescription>some evil error</errorDescription>
有谁知道如何从响应中解析错误代码和描述?抱歉,如果这是一个愚蠢的问题,但我已经尝试了所有方法,但我找不到任何关于此的文档。
我相信你正在寻找这个:
def your_method(credentials)
# your client call here
rescue Savon::SOAPFault => error
fault_code = error.to_hash[:fault][:faultcode]
raise CustomError, fault_code
end
从Savon
文档中获得了这个解决方案。
谢谢!
作为记录,我能够做到这一点的唯一方法是禁用 Savon 异常:
Savon::Response.raise_errors = false
这样做之后,我必须检查 response.soap_fault?在每次 SOAP 调用之后查看是否有错误。然后我可以使用 response.to_hash 访问错误详细信息。
我使用这个补丁:
module Savon
class SOAPFault
def soap_error_code
fault = nori.find(to_hash, 'Fault')
if nori.find(fault, 'faultcode')
nori.find(fault, 'faultcode').to_i
elsif nori.find(fault, 'Code')
nori.find(fault, 'Code', 'Value').to_i
end
end
end
end
然后在控制器中:
begin
# do something
rescue Savon::SOAPFault => e
raise CustomError, e.soap_error_code
end