Как получить код ошибки и описание из Savon :: SOAPFault? - PullRequest
2 голосов
/ 14 мая 2010

Я вижу в журнале Savon, что мои ошибки SOAP содержат XML, например:

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

Кто-нибудь знает, как проанализировать код ошибки и описание из ответа? Извините, если это глупый вопрос, но я все перепробовал и не смог найти никакой документации по этому вопросу.

Ответы [ 3 ]

1 голос
/ 28 июля 2015

Я полагаю, вы ищете это:

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 документации .

Спасибо!

1 голос
/ 14 мая 2010

Для справки, единственный способ, которым я смог сделать это, это отключить исключения Savon:

Savon::Response.raise_errors = false

После этого мне пришлось проверить response.soap_fault? после каждого вызова SOAP, чтобы увидеть, если произошла ошибка. Тогда я мог получить доступ к деталям ошибки, используя response.to_hash.

0 голосов
/ 23 сентября 2015

Я использую этот патч:

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
...