Class: Aws::S3::Plugins::Http200Errors::Handler Private

Inherits:
Seahorse::Client::Handler
  • Object
show all
Defined in:
lib/aws-sdk-s3/plugins/http_200_errors.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Instance Method Summary collapse

Instance Method Details

#call(context) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


16
17
18
19
20
21
22
23
24
# File 'lib/aws-sdk-s3/plugins/http_200_errors.rb', line 16

def call(context)
  @handler.call(context).on(200) do |response|
    if error = check_for_error(context)
      context.http_response.status_code = 500
      response.data = nil
      response.error = error
    end
  end
end

#check_for_error(context) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/aws-sdk-s3/plugins/http_200_errors.rb', line 26

def check_for_error(context)
  xml = context.http_response.body_contents
  if xml.match(/<Error>/)
    error_code = xml.match(/<Code>(.+?)<\/Code>/)[1]
    error_message = xml.match(/<Message>(.+?)<\/Message>/)[1]
    S3::Errors.error_class(error_code).new(context, error_message)
  elsif !xml.match(/<\w/) # Must have the start of an XML Tag
    # Other incomplete xml bodies will result in XML ParsingError
    Seahorse::Client::NetworkingError.new(
      S3::Errors
        .error_class('InternalError')
        .new(context, 'Empty or incomplete response body')
    )
  end
end