public T newInstance()

in iep-spring-aws2/src/main/java/com/netflix/iep/aws2/AwsClientFactory.java [369:396]


  public <T> T newInstance(String name, Class<T> cls, String accountId, Optional<Region> region) {
    try {
      Config cfg = getConfig(name, cls);
      Config clientConfig = cfg.getConfig("client");
      Region selectedRegion = region.orElseGet(() -> chooseRegion(name, cls));
      SdkHttpService service = createSyncHttpService(clientConfig);
      Method builderMethod = cls.getMethod("builder");
      AwsClientBuilder<?, ?> builder = ((AwsClientBuilder<?, ?>) builderMethod.invoke(null))
          .credentialsProvider(createCredentialsProvider(cfg.getConfig("credentials"), accountId, service))
          .region(selectedRegion)
          .dualstackEnabled(shouldUseDualstack(cfg, selectedRegion))
          .overrideConfiguration(createClientConfig(clientConfig));
      AttributeMap attributeMap = getSdkHttpConfigurationOptions(clientConfig);

      if (builder instanceof AwsSyncClientBuilder<?, ?>) {
        ((AwsSyncClientBuilder<?, ?>) builder)
            .httpClient(service.createHttpClientBuilder().buildWithDefaults(attributeMap));
      } else if (builder instanceof AwsAsyncClientBuilder<?, ?>) {
        SdkAsyncHttpService asyncService = createAsyncHttpService(clientConfig);
        ((AwsAsyncClientBuilder<?, ?>) builder)
            .httpClient(asyncService.createAsyncHttpClientFactory().buildWithDefaults(attributeMap));
      }

      return (T) builder.build();
    } catch (Exception e) {
      throw new RuntimeException("failed to create instance of " + cls.getName(), e);
    }
  }