Как настроить прокси-сервер на AWS Java SDK v2 клиент Apache - PullRequest
0 голосов
/ 17 января 2019

Похоже, что нет хорошего источника о том, как это сделать, вот два места, где я нашел информацию:

Первая ссылка . Это выглядит как самая последняя версия. Однако я не могу найти software.amazon.awssdk.http.apache.ApacheHttpClient в моем проекте, даже когда у меня есть зависимость.

 <groupId>software.amazon.awssdk</groupId>
  <artifactId>aws-sdk-java</artifactId>
  <version>2.3.2</version>
</dependency>
<dependency>
    <artifactId>aws-http-client-apache</artifactId>
    <groupId>software.amazon.awssdk</groupId>
    <version>2.0.0-preview-1</version>
</dependency>

вторая ссылка выглядит как устаревшая версия о том, как настраивать клиенты. Следующий код в примере выглядит недействительным:

DynamoDBClient client =
        DynamoDBClient.builder()
                      .httpConfiguration(ClientHttpConfiguration.builder()
                                                                .httpClientFactory(apacheClientFactory)
                                                                .build())
                      .build();

ClientHttpConfiguration Недоступно, а метод httpConfiguration недоступен на клиентах.

Попытка взломать что-то вместе дает мне следующий код:

ProxyConfiguration proxyConfiguration = ProxyConfiguration.builder().endpoint(URI.create("host:port")).username("usr").password("pwd").build();

SdkHttpClient apacheClientFactory =
        ApacheSdkHttpClientFactory.builder()
                .socketTimeout(Duration.ofSeconds(10))
                .connectionTimeout(Duration.ofMillis(750))
                .proxyConfiguration(proxyConfiguration).build().createHttpClient();


this.s3client = S3Client.builder().httpClient(apacheClientFactory).build();

Это компилируется, но я получаю множество java.lang.ClassNotFoundException: software.amazon.awssdk.http.ExecutableHttpRequest исключений, которые я не понимаю, откуда они берутся и как их исправить.

Так что мой вопрос в том, как правильно настроить прокси для 2.3.2 версия AWS Java SDK v2 и почему моя реализация не рабочий?

Обновление

Когда я добавляю следующую зависимость, я получаю еще одну ошибку:

<dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>apache-client</artifactId>
  <version>2.3.2</version>
</dependency>

Ошибка:

Caused by: java.lang.ClassNotFoundException: software.amazon.awssdk.http.SdkHttpClient$Builder

1 Ответ

0 голосов
/ 11 июня 2019

Похоже, вы используете несколько версий AWS SDK для Java. Попробуйте использовать подход " ведомость материалов " с использованием области импорта, например:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>bom</artifactId>
      <version>2.5.60</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

С этим определением, приведите конкретные детали, которые вы хотите:

<dependencies>
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>iam</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>apache-client</artifactId>
    </dependency>
</dependencies>

Вам не нужно указывать версии, так как они включены в спецификацию. После того, как вы правильно настроите зависимости, вы можете сделать что-то вроде этого:

  final SdkHttpClient httpClient = ApacheHttpClient.builder()
            .proxyConfiguration(ProxyConfiguration.builder()
                    .useSystemPropertyValues(true)
                    .build())
            .build();
  this.s3client = S3Client.builder().httpClient(httpClient).build();

Я использую useSystemPropertyValues, чтобы он выбрал стандартные системные свойства для удобства установки значений прокси. Все это работает для нас, и прокси используются правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...