# File lib/rhc/rest/client.rb, line 492
        def handle_error!(response, url, client)
          messages = []
          parse_error = nil
          begin
            result = RHC::Json.decode(response.content)
            messages = Array(result['messages'])
            messages.delete_if do |m|
              m.delete_if{ |k,v| k.nil? || v.blank? } if m.is_a? Hash
              m.blank?
            end
          rescue => e
            debug "Response did not include a message from server: #{e.message}"
          end
          case response.status
          when 400
            raise_generic_error(url, client) if messages.empty?
            message, keys = messages_to_fields(messages)
            raise ValidationException.new(message || "The operation could not be completed.", keys)
          when 401
            raise UnAuthorizedException, "Not authenticated"
          when 403
            raise RequestDeniedException, messages_to_error(messages) || "You are not authorized to perform this operation."
          when 404
            if messages.length == 1
              case messages.first['exit_code']
              when 127
                raise DomainNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
              when 101
                raise ApplicationNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
              end
            end
            raise ResourceNotFoundException, messages_to_error(messages) || generic_error_message(url, client)
          when 409
            raise_generic_error(url, client) if messages.empty?
            message, keys = messages_to_fields(messages)
            raise ValidationException.new(message || "The operation could not be completed.", keys)
          when 422
            raise_generic_error(url, client) if messages.empty?
            message, keys = messages_to_fields(messages)
            raise ValidationException.new(message || "The operation was not valid.", keys)
          when 400
            raise ClientErrorException, messages_to_error(messages) || "The server did not accept the requested operation."
          when 500
            raise ServerErrorException, messages_to_error(messages) || generic_error_message(url, client)
          when 503
            raise ServiceUnavailableException, messages_to_error(messages) || generic_error_message(url, client)
          else
            raise ServerErrorException, messages_to_error(messages) || "Server returned an unexpected error code: #{response.status}"
          end
          raise_generic_error
        end