public HttpClient createHttpClient()

in gateway-spi/src/main/java/org/apache/knox/gateway/dispatch/DefaultHttpClientFactory.java [81:144]


  public HttpClient createHttpClient(FilterConfig filterConfig) {
    final String serviceRole = filterConfig.getInitParameter(PARAMETER_SERVICE_ROLE);
    HttpClientBuilder builder;
    GatewayConfig gatewayConfig = (GatewayConfig) filterConfig.getServletContext().getAttribute(GatewayConfig.GATEWAY_CONFIG_ATTRIBUTE);
    GatewayServices services = (GatewayServices) filterConfig.getServletContext()
        .getAttribute(GatewayServices.GATEWAY_SERVICES_ATTRIBUTE);
    if (gatewayConfig != null && gatewayConfig.isMetricsEnabled()) {
      MetricsService metricsService = services.getService(ServiceType.METRICS_SERVICE);
      builder = metricsService.getInstrumented(HttpClientBuilder.class);
    } else {
      builder = HttpClients.custom();
    }

    // Conditionally set a custom SSLContext
    SSLContext sslContext = createSSLContext(services, filterConfig, serviceRole);
    if(sslContext != null) {
      builder.setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext));
    }

    if (Boolean.parseBoolean(System.getProperty(GatewayConfig.HADOOP_KERBEROS_SECURED))) {
      CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
      credentialsProvider.setCredentials(AuthScope.ANY, new UseJaasCredentials());

      Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
          .register(AuthSchemes.SPNEGO, new KnoxSpnegoAuthSchemeFactory(true))
          .build();

      builder.setDefaultAuthSchemeRegistry(authSchemeRegistry)
          .setDefaultCookieStore(new HadoopAuthCookieStore(gatewayConfig))
          .setDefaultCredentialsProvider(credentialsProvider);
    } else {
      builder.setDefaultCookieStore(new NoCookieStore());
    }

    builder.setKeepAliveStrategy( DefaultConnectionKeepAliveStrategy.INSTANCE );
    builder.setConnectionReuseStrategy( DefaultConnectionReuseStrategy.INSTANCE );
    builder.setRedirectStrategy( new NeverRedirectStrategy() );
    builder.setRetryHandler( new NeverRetryHandler() );

    int maxConnections = getMaxConnections( filterConfig );
    builder.setMaxConnTotal( maxConnections );
    builder.setMaxConnPerRoute( maxConnections );

    builder.setDefaultRequestConfig(getRequestConfig(filterConfig, serviceRole));

    // See KNOX-1530 for details
    builder.disableContentCompression();

    if (doesRetryParamExist(filterConfig)) {
      int retryCount = Integer.parseInt(filterConfig.getInitParameter(PARAMETER_RETRY_COUNT));
      LOG.setRetryCount(retryCount, serviceRole);
      /* do we want to retry non-idempotent requests? default no */
      boolean retryNonIdempotent = DEFAULT_PARAMETER_RETRY_NON_SAFE_REQUEST;
      if (filterConfig.getInitParameter(PARAMETER_RETRY_NON_SAFE_REQUEST)
          != null) {
        retryNonIdempotent = Boolean.parseBoolean(
            filterConfig.getInitParameter(PARAMETER_RETRY_NON_SAFE_REQUEST));
      }
      LOG.setRetryNonIndependent(retryNonIdempotent, serviceRole);
      builder.setRetryHandler(new DefaultHttpRequestRetryHandler(retryCount,
          retryNonIdempotent));
    }
    return builder.build();
  }