2

我可以在 Savon 日志中看到我的 SOAP 错误包含这样的 XML:

<errorCode>666</errorCode><errorDescription>some evil error</errorDescription>

有谁知道如何从响应中解析错误代码和描述?抱歉,如果这是一个愚蠢的问题,但我已经尝试了所有方法,但我找不到任何关于此的文档。

4

3 回答 3

2

我相信你正在寻找这个:

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 文档中获得了这个解决方案。

谢谢!

于 2015-07-28T08:05:28.717 回答
1

作为记录,我能够做到这一点的唯一方法是禁用 Savon 异常:

Savon::Response.raise_errors = false

这样做之后,我必须检查 response.soap_fault?在每次 SOAP 调用之后查看是否有错误。然后我可以使用 response.to_hash 访问错误详细信息。

于 2010-05-14T17:50:28.850 回答
0

我使用这个补丁:

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
于 2015-09-23T09:34:10.940 回答