Sha256: d64ad907a776a527c8ec991bd4b252d3a13cf921a3f225546a596d24e851dcaa
Contents?: true
Size: 1.71 KB
Versions: 3
Compression:
Stored size: 1.71 KB
Contents
require 'multi_xml' module Aws module Xml class ErrorHandler < Seahorse::Client::Handler def call(context) @handler.call(context).on(300..599) do |response| response.error = error(context) response.data = nil end end private def error(context) if empty_body?(context) error_code = empty_body_error_code(context) error_message = '' else error_code, error_message = extract_error(context) end svc = context.client.class.name.split('::')[1] errors_module = Aws.const_get(svc).const_get(:Errors) errors_module.error_class(error_code).new(context, error_message) end def empty_body?(context) context.http_response.body_contents.empty? end def empty_body_error_code(context) status_code = context.http_response.status_code { 302 => 'MovedTemporarily', 304 => 'NotModified', 400 => 'BadRequest', 403 => 'Forbidden', 404 => 'NotFound', 412 => 'PreconditionFailed', 413 => 'RequestEntityTooLarge', }[status_code] || "Http#{status_code}Error" end def extract_error(context) error = MultiXml.parse(context.http_response.body_contents) %w(Response ErrorResponse Errors Error).each do |wrapper| error = error[wrapper] if error[wrapper] end [remove_prefix(context, error['Code']), error['Message']] end def remove_prefix(context, error_code) if prefix = context.config.api.metadata('errorPrefix') error_code.sub(/^#{prefix}/, '') else error_code end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
aws-sdk-core-2.0.33 | lib/aws-sdk-core/xml/error_handler.rb |
aws-sdk-core-2.0.32 | lib/aws-sdk-core/xml/error_handler.rb |
aws-sdk-core-2.0.31 | lib/aws-sdk-core/xml/error_handler.rb |