code: public String createSignatureBaseString(String requestMethod, String baseUrl, Map<String, String> parameters) {
          if (requestMethod == null || (!requestMethod.equalsIgnoreCase("GET") && !requestMethod.equalsIgnoreCase("POST"))) {
              if (tc.isDebugEnabled()) {
                  Tr.debug(tc, "Request method was not an expected value (GET or POST) so defaulting to POST");
              }
              requestMethod = "POST";
          }
  
          String cleanedUrl = removeQueryAndFragment(baseUrl);
          String parameterString = createParameterStringForSignature(parameters);
  
          StringBuilder signatureBaseString = new StringBuilder();
          signatureBaseString.append(requestMethod.toUpperCase());
          signatureBaseString.append("&");
          signatureBaseString.append(Utils.percentEncode(cleanedUrl));
          signatureBaseString.append("&");
          signatureBaseString.append(Utils.percentEncode(parameterString));
  
          return signatureBaseString.toString();
      }
docs: Per {@link https://dev.twitter.com/oauth/overview/creating-signatures}, a signature for an authorized request takes the
  following form:
  
  [HTTP Method] + "&" + [Percent encoded URL] + "&" + [Percent encoded parameter string]
  
  - HTTP Method: Request method (either "GET" or "POST"). Must be in uppercase.
  - Percent encoded URL: Base URL to which the request is directed, minus any query string or hash parameters. Be sure the
  URL uses the correct protocol (http or https) that matches the actual request sent to the Twitter API.
  - Percent encoded parameter string: Each request parameter name and value is percent encoded according to a specific
  structure
  
  @param requestMethod
  @param baseUrl
  Raw base URL, not percent encoded. This method will perform the percent encoding.
  @param parameters
  Raw parameter names and values, not percent encoded. This method will perform the percent encoding.
  @return