/**
  * Perform an analyze of a given HttpResponse object's response-code in order to interpret whether
  * the requests to Twitter API went well. Otherwise, an exception is thrown describing the
  * problem.
  *
  * @param response HttpResponse object to be interpreted.
  * @throws IOException If an I/O or service error occurs.
  * @throws LimitExceededException If a request limit exceeded error occurs.
  * @throws InvalidQueryException If an invalid query error occurs.
  * @throws SecurityException If a security error occurs.
  * @throws IllegalArgumentException If response is null.
  */
 public static void perform(HttpResponse response) throws IOException, LimitExceededException {
   if (response == null) {
     throw new IllegalArgumentException("Response must not be null.");
   }
   //
   final int respCode = response.getCode();
   //
   if (respCode != HttpConnection.HTTP_OK && respCode != HttpConnection.HTTP_NOT_MODIFIED) {
     if (isInvalidQueryError(respCode)) {
       throw new InvalidQueryException(getErrorMessage(response));
     } else if (isLimitExceededError(respCode)) {
       String emgs = getErrorMessage(response);
       String raft = response.getResponseField("X-Rate-Limit-Reset");
       //
       if (!StringUtil.isEmpty(raft)) {
         emgs += " / Retry after " + raft + " secs.";
       }
       //
       throw new LimitExceededException(emgs);
     } else if (isSecurityError(respCode)) {
       throw new SecurityException(getErrorMessage(response));
     } else {
       throw new IOException(getErrorMessage(response));
     }
   }
 }
 /**
  * Get error messages from connection's response.
  *
  * @param response Http response.
  * @return Message.
  * @throws IOException If any I/O error occurs.
  */
 public static String getErrorMessage(HttpResponse response) throws IOException {
   String errorMsg = null;
   //
   Parser parser = ParserFactory.getParser(ParserFactory.JSON);
   HttpResponseCodeErrorJSONHandler handler = new HttpResponseCodeErrorJSONHandler();
   //
   try {
     parser.parse(response.getStream(), handler);
     //
     errorMsg = handler.getMessage();
   } catch (Exception e) {
     errorMsg = "HTTP ERROR CODE: " + response.getCode();
   }
   //
   return errorMsg;
 }