public void connect(MessageContext messageContext) throws ConnectException {
    try {
      String worksheetName =
          GoogleSpreadsheetUtils.lookupFunctionParam(messageContext, WORKSHEET_NAME);
      String spreadsheetName =
          GoogleSpreadsheetUtils.lookupFunctionParam(messageContext, SPREADSHEET_NAME);

      if ((worksheetName == null || "".equals(worksheetName.trim()))
          && (spreadsheetName == null || "".equals(spreadsheetName.trim()))) {
        log.error(
            "Please make sure you have given a valid input for the worksheet or spreadsheet name");
        ConnectException connectException =
            new ConnectException(
                "Please make sure you have given a valid input for the worksheet or spreadsheet name");
        GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, connectException);
        return;
      }

      SpreadsheetService ssService =
          new GoogleSpreadsheetClientLoader(messageContext).loadSpreadsheetService();

      GoogleSpreadsheet gss = new GoogleSpreadsheet(ssService);

      SpreadsheetEntry ssEntry = gss.getSpreadSheetsByTitle(spreadsheetName);

      if (ssEntry != null) {

        List<Person> resultData = null;

        resultData = gss.getAuthors(ssEntry);

        if (worksheetName != null) {

          GoogleSpreadsheetWorksheet gssWorksheet =
              new GoogleSpreadsheetWorksheet(ssService, ssEntry.getWorksheetFeedUrl());

          WorksheetEntry wsEntry = gssWorksheet.getWorksheetByTitle(worksheetName);
          if (wsEntry != null) {
            if (gssWorksheet.getAuthors(wsEntry).size() > 0) {
              resultData.clear();
              resultData = gssWorksheet.getAuthors(wsEntry);
            }
          } else {
            ConnectException connectException =
                new ConnectException(
                    "Cannot retrieve the authors. Worksheet with the given name is not available.");
            log.error("Error occured: " + connectException.getMessage(), connectException);
            GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, connectException);
            return;
          }
        }

        int resultSize = resultData.size();

        GoogleSpreadsheetUtils.removeTransportHeaders(messageContext);

        if (messageContext.getEnvelope().getBody().getFirstElement() != null) {
          messageContext.getEnvelope().getBody().getFirstElement().detach();
        }

        OMFactory factory = OMAbstractFactory.getOMFactory();
        OMNamespace ns =
            factory.createOMNamespace("http://org.wso2.esbconnectors.googlespreadsheet", "ns");
        OMElement searchResult = factory.createOMElement("getAuthorsResult", ns);

        OMElement result = factory.createOMElement("result", ns);
        searchResult.addChild(result);
        result.setText("true");

        OMElement data = factory.createOMElement("data", ns);
        searchResult.addChild(data);

        for (int iterateCount = 0; iterateCount < resultSize; iterateCount++) {
          if (resultData.get(iterateCount) != null) {
            OMElement author = factory.createOMElement("author", ns);
            data.addChild(author);
            author.setText(resultData.get(iterateCount).getName());
          }
        }

        messageContext.getEnvelope().getBody().addChild(searchResult);
      } else {
        ConnectException connectException =
            new ConnectException(
                "Cannot retrieve the authors. Spreadsheet with the given name is not available.");
        log.error("Error occured: " + connectException.getMessage(), connectException);
        GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, connectException);
      }

    } catch (IOException te) {
      log.error("Error occured " + te.getMessage(), te);
      GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, te);
    } catch (ServiceException te) {
      log.error("Error occured " + te.getMessage(), te);
      GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, te);
    } catch (Exception te) {
      log.error("Error occured " + te.getMessage(), te);
      GoogleSpreadsheetUtils.storeErrorResponseStatus(messageContext, te);
    }
  }