# File lib/rhc/rest.rb, line 221
    def process_error_response(response, url=nil)
      messages = []
      parse_error = nil
      begin
        result = RHC::Json.decode(response)
        messages = Array(result['messages'])
      rescue => e
        logger.debug "Response did not include a message from server: #{e.message}" if debug?
        parse_error = ServerErrorException.new(generic_error_message(url), 129)
      end
      case response.code
      when 401
        raise UnAuthorizedException, "Not authenticated"
      when 403
        messages.each do |message|
          if message['severity'].upcase == "ERROR"
            raise RequestDeniedException, message['text']
          end
        end
        raise RequestDeniedException.new("Forbidden")
      when 404
        messages.each do |message|
          if message['severity'].upcase == "ERROR"
            raise ResourceNotFoundException, message['text']
          end
        end
        raise ResourceNotFoundException, generic_error_message(url)
      when 409
        messages.each do |message|
          if message['severity'] and message['severity'].upcase == "ERROR"
            raise ValidationException.new(message['text'], message['field'], message['exit_code'])
          end
        end
      when 422
        e = nil
        messages.each do |message|
          if e and e.field == message["field"]
            e.message << " #{message["text"]}"
          else
            e = ValidationException.new(message["text"], message["field"], message["exit_code"])
          end
        end
        raise e || parse_error || ValidationException.new('Not valid')
      when 400
        messages.each do |message|
          if message['severity'].upcase == "ERROR"
            raise ClientErrorException, message['text']
          end
        end
      when 500
        messages.each do |message|
          if message['severity'].upcase == "ERROR"
            raise ServerErrorException.new(message['text'], message["exit_code"] ? message["exit_code"].to_i : nil)
          end
        end
      when 503
        messages.each do |message|
          if message['severity'].upcase == "ERROR"
            raise ServiceUnavailableException, message['text']
          end
        end
        raise ServiceUnavailableException, generic_error_message(url)
      else
        raise ServerErrorException, "Server returned an unexpected error code: #{response.code}"
      end
      raise parse_error || ServerErrorException.new(generic_error_message(url), 129)
    end