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