code: protected Object getSingleExcelRow(Object userObj, int index, boolean isExternalCall) {
          int newIndex = index;
          if (isExternalCall) {
              newIndex++;
  
          }
          logger.entering(new Object[] { userObj, newIndex });
          Object obj;
  
          Class<?> cls;
          try {
              cls = Class.forName(userObj.getClass().getName());
          } catch (ClassNotFoundException e) {
              throw new DataProviderException("Unable to find class of type + '" + userObj.getClass().getName() + "'", e);
          }
          Field[] fields = cls.getDeclaredFields();
  
          List<String> excelHeaderRow = getHeaderRowContents(cls.getSimpleName(), fields.length);
          List<String> excelRowData = getRowContents(cls.getSimpleName(), newIndex, fields.length);
          Map<String, String> headerRowDataMap = prepareHeaderRowDataMap(excelHeaderRow, excelRowData);
          if (excelRowData != null && excelRowData.size() != 0) {
              try {
                  obj = prepareObject(userObj, fields, excelRowData, headerRowDataMap);
              } catch (IllegalAccessException e) {
                  throw new DataProviderException("Unable to create instance of type '" + userObj.getClass().getName()
                          + "'", e);
              }
          } else {
              throw new DataProviderException("Row with key '" + newIndex + "' is not found");
          }
  
          logger.exiting(obj);
  
          return obj;
      }
docs: @param userObj
  The User defined object into which the data is to be packed into.
  @param index
  The row number from the excel sheet that is to be read. For e.g., if you wanted to read the 2nd row
  (which is where your data exists) in your excel sheet, the value for index would be 1. <b>This method
  assumes that your excel sheet would have a header which it would EXCLUDE.</b> When specifying index
  value always remember to ignore the header, since this method will look for a particular row ignoring
  the header row.
  @param isExternalCall
  A boolean that helps distinguish internally if the call is being made internally or by the user.
  
  @return An object that represents the data for a given row in the excel sheet.