code: private <T extends IEntity> IntuitMessage prepareFindById(T entity) throws FMSException {
          Class<?> objectClass = entity.getClass();
          String entityName = objectClass.getSimpleName();
          Object rid = null;
          Method m;
  
          try {
              m = objectClass.getMethod("getId");
              rid = m.invoke(entity);
          } catch (Exception e) {
              throw new FMSException("Unable to read the method getId", e);
          }
  
          // The preferences/companyInfo check is to skip the Id null validation as it is not required for Preferences/CompanyInfo Read operation
          if ((!entityName.equals("Preferences") && !entityName.equals("OLBTransaction") && !entityName.equals("OLBStatus")) && rid == null) {
              throw new FMSException("Id is required.");
          }
  
          IntuitMessage intuitMessage = new IntuitMessage();
          RequestElements requestElements = intuitMessage.getRequestElements();
  
          //set the request params
          Map<String, String> requestParameters = requestElements.getRequestParameters();
          requestParameters.put(RequestElements.REQ_PARAM_METHOD_TYPE, MethodType.GET.toString());
  
          // The preferences/companyInfo check is to skip adding the entity id in the request URI
          if (!entityName.equals("Preferences") && !entityName.equals("OLBTransaction") && !entityName.equals("OLBStatus")) {
              requestParameters.put(RequestElements.REQ_PARAM_ENTITY_ID, rid.toString());
          }
  
          requestElements.setContext(context);
          requestElements.setEntity(entity);
  
          return intuitMessage;
      }
docs: Common method to prepare the request params for findById operation for both sync and async calls
  
  @param entity
  the entity
  @return IntuitMessage the intuit message
  @throws FMSException