code: private String computeServiceName() {
          final String httpClientName = getHttpClientName();
          String service = ServiceNameFactory.getServiceName(httpClientName);
          if (service != null) {
              return service; // only if it is so explicitly configured
          }
          // Otherwise, make use of convention over configuration
          int j = httpClientName.indexOf("JavaClient");
          if (j == -1) {
              j = httpClientName.indexOf("Client");
              if (j == -1) {
                  throw new IllegalStateException(
                          "Unrecognized suffix for the AWS http client class name " + httpClientName);
              }
          }
          int i = httpClientName.indexOf(AMAZON);
          int len;
          if (i == -1) {
              i = httpClientName.indexOf(AWS);
              if (i == -1) {
                  throw new IllegalStateException(
                          "Unrecognized prefix for the AWS http client class name " + httpClientName);
              }
              len = AWS.length();
          } else {
              len = AMAZON.length();
          }
          if (i >= j) {
              throw new IllegalStateException(
                      "Unrecognized AWS http client class name " + httpClientName);
          }
          String serviceName = httpClientName.substring(i + len, j);
          return StringUtils.lowerCase(serviceName);
      }
docs: Returns the service name of this AWS http client by first looking it up from the SDK internal
  configuration, and if not found, derive it from the class name of the immediate subclass of
  {@link AmazonWebServiceClient}. No configuration is necessary if the simple class name of the
  http client follows the convention of <code>(Amazon|AWS).*(JavaClient|Client)</code>.