

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Migrez de la version 1.x vers la version 2.x du AWS SDK pour Java
<a name="migration"></a>

Le AWS SDK pour Java 2.x est une réécriture majeure de la base de code 1.x construite sur Java 8\$1. Cette version comprend de nombreuses mises à jour, dont une amélioration de la cohérence et de la facilité d'utilisation et une mise en œuvre robuste de l'immuabilité. Cette section décrit les principales fonctionnalités nouvelles de la version 2.x et fournit des conseils sur la façon de migrer votre code vers la version 2.x à partir de la version 1.x.

**Topics**
+ [Nouveautés de la version 2](#migration-whats-new)
+ [Rechercher des applications utilisant des clients 1.x](migration-find-apps-using-v1.md)
+ [Comment effectuer la migration](migration-howto.md)
+ [Quelles sont les différences entre 1.x et 2.x](migration-whats-different.md)
+ [Utiliser le SDK pour Java 1.x et 2.x side-by-side](migration-side-by-side.md)

## Nouveautés de la version 2
<a name="migration-whats-new"></a>
+ Vous pouvez configurer vos propres clients HTTP. Reportez-vous à la section [Configuration du transport HTTP](http-configuration.md).
+ Les clients asynchrones proposent des objets de I/O support et de retour `CompletableFuture` non bloquants. Voir [Programmation asynchrone.](asynchronous.md)
+ Les opérations qui renvoient plusieurs pages ont des réponses paginées automatiquement. De cette façon, vous pouvez concentrer votre code sur ce qu'il faut faire avec la réponse, sans avoir à vérifier et à obtenir les pages suivantes. Voir [Pagination.](pagination.md) 
+ Les performances des AWS Lambda fonctions à l'heure de démarrage du SDK sont améliorées. Consultez la section [Améliorations des performances du SDK à l'heure de démarrage](lambda-optimize-starttime.md). 
+ La version 2.x prend en charge une nouvelle méthode raccourcie pour créer des demandes.  
**Example**  

  ```
  dynamoDbClient.putItem(request -> request.tableName(TABLE))
  ```

Pour plus de détails sur les nouvelles fonctionnalités et pour voir des exemples de code spécifiques, consultez les autres sections de ce guide.
+  [Quick Start](get-started.md) 
+  [Configuration](setup.md) 
+  [Exemples de code pour la version AWS SDK pour Java 2.x](java_code_examples.md)
+  [Utiliser le SDK](using.md) 
+  [Sécurité pour AWS SDK pour Java](security.md) 

# Rechercher des applications utilisant des AWS SDK pour Java clients 1.x
<a name="migration-find-apps-using-v1"></a>

Avant de migrer vers le AWS SDK for Java 2.x, vous devez identifier les applications de votre environnement qui utilisent le SDK for Java 1.x clients. Vous pouvez utiliser CloudTrail les journaux pour suivre l'utilisation du SDK, rechercher des avertissements de dépréciation dans les journaux des applications, inspecter votre code source et créer des configurations, ou examiner vos artefacts Java déployables. Utilisez les méthodes disponibles dans votre environnement.

## Utilisez CloudTrail Lake pour rechercher des applications avec des clients 1.x
<a name="migration-find-v1-apps-with-cloudtrail"></a>

AWS CloudTrail Lake vous permet d'interroger les événements enregistrés par CloudTrail. Procédez comme suit pour créer un lac de données identifiant les versions du SDK utilisées par vos applications :

1. Créez un lac CloudTrail de données. Reportez-vous au [guide de l'utilisateur](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-event-data-store.html) pour créer un magasin de données d'événements.

1. Après avoir créé le magasin de données, examinez le contenu de l'enregistrement. Le corps de l'enregistrement contient des champs qui déterminent l'action, le moment et le lieu demandés. Pour plus de détails, reportez-vous au [guide de l'utilisateur pour le contenu des CloudTrail enregistrements](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html).

1. Exécutez des requêtes sur vos données. Suivez le [guide de l'utilisateur pour interroger et enregistrer les résultats des requêtes](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/query-run-query.html).

Le champ *UserAgent* de chaque enregistrement contient la version du SDK à l'origine de la demande. Utilisez ce champ pour identifier les applications utilisant le SDK for Java 1.x.

L'exemple de requête suivant trouve toutes les demandes d'identifiant provenant d'applications utilisateur et d'outils tiers effectuées avec le SDK for Java 1.x à partir du 17 juin 2025 : EventDatastore `sample-Data-Store-Id`

```
select userIdentity, eventSource, awsRegion,
    eventName, eventType, eventTime, userAgent,
    requestParameters, sourceIPAddress
 from sample-Data-Store-Id
where eventTime > '2025-06-17 00:00:00'
and userAgent like '%aws-sdk-java/1.%'
and userAgent not like '%aws-internal/%'
order by eventTime desc
```

Voici un exemple de contenu d'événement dans le résultat de la requête :

```
{
    "userIdentity": "{
         "type": "IAMUser",
         "principalId": "AIDAJ45Q7YFFAREXAMPLE",
         "arn": "arn:aws:iam::123456789012:user/Alice",
         "accountId": "123456789012",
         "accessKeyId": "",
         "userName": "Alice"
    }",
    "eventSource": "dynamodb.amazonaws.com",
    "awsRegion": "us-west-2",
    "eventName": "ListTables",
    "eventType": "AwsApiCall",
    "eventTime": "2025-07-01 02:23:52.000",
    "userAgent": "aws-sdk-java/1.12.746 Linux/5.10.240 OpenJDK/11.0.25+9-LTS ...",
    "requestParameters": "",
    "sourceIPAddress": "12.345.6.78"
}
```

Vous pouvez utiliser ces informations pour déterminer quand et où la demande a été faite.

Dans l'exemple, une demande DynamoDB `ListTables` a été effectuée `2025-07-01 02:23:52 (UTC)` à partir de l'`12.345.6.78`adresse IP avec les informations d'identification de l'utilisateur IAM nommé Alice. La valeur du champ *UserAgent* indique que la demande a été faite à l'aide de la AWS SDK pour Java version `1.12.746` d'un système Linux avec JDK 11.

Pour une description des champs de l'enregistrement d' AWS CloudTrail événement, voir le [contenu de l'CloudTrail enregistrement pour les événements relatifs à la gestion, aux données et à l'activité réseau](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html).

S'il n' CloudTrail est pas activé dans votre compte, contactez l'administrateur du AWS compte de votre organisation pour l'activer, ou utilisez l'une des méthodes alternatives décrites dans les sections suivantes.

CloudTrail Impliquez les frais pour les données ingérées et les données numérisées par requête. Pour minimiser les coûts, filtrez les requêtes en fonction de plages horaires et de régions spécifiques. Pour connaître la tarification actuelle, consultez [Tarification AWS CloudTrail](https://aws.amazon.com/cloudtrail/pricing/).

## Rechercher dans les journaux d'avertissement des applications pour détecter la dépréciation du SDK
<a name="migration-find-v1-apps-log-warning"></a>

À partir de la version 1.12.767 (publiée le 30 juillet 2024), la version AWS SDK pour Java 1.x émet un avertissement d'obsolescence au démarrage de l'application. Vous pouvez rechercher cet avertissement dans les journaux de vos applications afin d'identifier les applications et les hôtes qui utilisent le SDK for Java 1.x.

Le libellé exact de l'avertissement dépend de la version du SDK :
+ Versions 1.12.767 à 1.12.796 :

  `WARNING: The AWS SDK for Java 1.x entered maintenance mode starting July 31, 2024 and will reach end of support on December 31, 2025...`
+ Versions 1.12.797 et supérieures :

  `WARNING: The AWS SDK for Java 1.x reached end of support on December 31, 2025...`

La fin `...` indique que le message d'avertissement continue avec du texte supplémentaire. Vous pouvez rechercher le préfixe commun pour `The AWS SDK for Java 1.x` trouver l'une ou l'autre version de l'avertissement.

L'exemple suivant montre comment rechercher cet avertissement à l'aide de `grep` :

```
grep -r "The AWS SDK for Java 1.x" /path/to/your/application/logs/
```

Si l'avertissement est détecté, la `grep` commande imprime les lignes de journal correspondantes. Si aucun avertissement n'est détecté, cela signifie que votre application n'utilise pas le SDK pour Java 1.x ou qu'elle utilise une version antérieure à 1.12.767. Dans ce cas, utilisez l'une des autres méthodes décrites dans ce document.

## Rechercher le code source et les dépendances
<a name="migration-find-v1-apps-source-code"></a>

Vous pouvez rechercher des références à la version AWS SDK pour Java 1.x dans votre base de code et dans vos fichiers de configuration de build. L'identifiant clé est l'ID de `com.amazonaws` groupe, qui est utilisé par tous les artefacts du SDK for Java 1.x.

Les exemples suivants montrent comment `grep` rechercher des `com.amazonaws` références dans des fichiers de projet Java courants.

**Exemple : recherche dans les fichiers source Java pour les importations du SDK for Java 1.x (exécution depuis le répertoire racine du projet)**

```
grep -r "import com.amazonaws" --include="*.java" .
```

Exemple de sortie :

```
src/main/java/com/example/App.java:import com.amazonaws.services.s3.AmazonS3;
```

**Note**  
Le `com.amazonaws` package est également utilisé par les bibliothèques qui ne font pas partie du SDK pour Java 1.x, telles que. `aws-lambda-java-core` Pour confirmer qu'une importation provient du SDK for Java 1.x, vérifiez que l'ID d'artefact correspondant dans votre configuration ou dans `pom.xml` votre `build.gradle` configuration de gestion des dépendances commence par. `aws-java-sdk-`

**Exemple : recherchez dans `pom.xml` les fichiers Maven les dépendances du SDK for Java 1.x (exécuté à partir du répertoire racine du projet)**

```
grep -r "com.amazonaws" --include="pom.xml" .
```

Exemple de sortie :

```
pom.xml:    <groupId>com.amazonaws</groupId>
```

**Exemple : recherchez dans les fichiers de build Gradle les dépendances du SDK for Java 1.x (exécuté à partir du répertoire racine du projet)**

```
grep -r "com.amazonaws:aws-java-sdk" --include="*.gradle" .
```

Exemple de sortie :

```
build.gradle:    implementation 'com.amazonaws:aws-java-sdk-s3:1.12.xxx'
```

Les `grep` commandes précédentes identifient les références au SDK for Java 1.x déclarées directement dans vos fichiers source et de compilation. Cependant, votre application peut également dépendre du SDK pour Java 1.x de manière transitive, par le biais d'une bibliothèque tierce qui dépend elle-même du SDK. Utilisez l'arbre de dépendances de votre outil de génération pour trouver les dépendances directes et transitives du SDK for Java 1.x. Choisissez l'exemple qui correspond à votre système de compilation.

**Exemple : utilisez Maven pour rechercher toutes les dépendances du SDK transitif pour Java 1.x (exécuté à partir du répertoire racine du projet)**

```
mvn dependency:tree -Dincludes=com.amazonaws
```

Exemple de sortie :

```
[INFO] com.example:my-application:jar:1.0-SNAPSHOT
[INFO] +- com.amazonaws:aws-java-sdk-s3:jar:1.12.746:compile
[INFO] |  \- com.amazonaws:aws-java-sdk-core:jar:1.12.746:compile
[INFO] \- some.thirdparty:library:jar:2.3.1:compile
[INFO]    \- com.amazonaws:aws-java-sdk-dynamodb:jar:1.12.600:compile
```

L'`-Dincludes=com.amazonaws`indicateur filtre l'arborescence pour n'afficher que les artefacts du SDK for Java 1.x. Dans cet exemple, `aws-java-sdk-s3` il s'agit d'une dépendance directe, mais `aws-java-sdk-dynamodb` d'une dépendance transitive introduite par`some.thirdparty:library`.

**Exemple : utilisez Gradle pour rechercher toutes les dépendances du SDK transitif pour Java 1.x (exécuté à partir du répertoire racine du projet)**

```
gradle dependencies --configuration runtimeClasspath | grep "com.amazonaws"
```

Exemple de sortie :

```
+--- com.amazonaws:aws-java-sdk-s3:1.12.746
|    \--- com.amazonaws:aws-java-sdk-core:1.12.746
\--- com.amazonaws:aws-java-sdk-dynamodb:1.12.600
```

Gradle ne possède pas de filtre de dépendance intégré équivalent à celui de Maven`-Dincludes`, donc le rediriger `grep` est l'approche la plus simple.

## Inspectez les artefacts Java déployables
<a name="migration-find-v1-apps-inspect-artifacts"></a>

Vous pouvez inspecter vos artefacts Java déployables (JARs, WARs, ou EARs) pour vérifier si la version AWS SDK pour Java 1.x est intégrée à votre application. Les fichiers d'archive Java sont des fichiers au format ZIP. Pour déterminer si le SDK for Java 1.x est présent, recherchez le `com/amazonaws/sdk/versionInfo.properties` fichier dans l'archive. Ce fichier est inclus dans le `aws-java-sdk-core` module et contient le numéro de version du SDK.

### Vérification rapide à l'aide de la `jar` commande
<a name="migration-find-v1-apps-jar-command"></a>

Pour les fichiers uber-jars où toutes les classes de dépendance sont fusionnées au niveau supérieur, listez le contenu de l'archive et recherchez le fichier de version :

Dans les exemples suivants, remplacez par `myapp.jar` le chemin d'accès au fichier JAR de votre application.

```
jar -tf myapp.jar | grep 'versionInfo.properties'
```

Si le SDK est présent, le résultat est le suivant :

```
com/amazonaws/sdk/versionInfo.properties
```

Si la `jar` commande n'est pas disponible dans votre environnement (par exemple, images de conteneur uniquement ou images de conteneur minimales), vous pouvez utiliser `unzip -l` à la place :

```
unzip -l myapp.jar | grep 'versionInfo.properties'
```

Pour imprimer la version :

```
unzip -p myapp.jar com/amazonaws/sdk/versionInfo.properties
```

Exemple de sortie :

```
platform=java
version=1.12.xxx
```

**Note**  
Les commandes précédentes ne recherchent que les entrées de premier niveau dans uber-jars. Ils ne trouveront pas de classes de SDK dans Thin JARs (où les dépendances sont externes) ou dans des classes imbriquées JARs (comme celles qui se trouvent dans ou dans WARs les packages Lambda situés sous ou). EARs `lib/` `WEB-INF/lib/` Pour Thin JARs, vérifiez plutôt la configuration de votre build (`pom.xml`,`build.gradle`) ou votre arbre de dépendances. Pour Nested JARs, recherchez le bundle à l' JARs aide d'un outil capable de lire les archives ZIP de manière récursive sans les extraire sur le disque.

# Comment migrer votre code de la version AWS SDK pour Java 1.x à la version 2.x
<a name="migration-howto"></a>

Vous pouvez migrer votre SDK existant pour les applications Java 1.x de plusieurs manières.

1. Approche automatisée à l'aide de l'[outil de migration](migration-tool.md).

1. [Approche manuelle](migration-steps.md) en remplaçant progressivement les importations 1.x par des importations 2.x.

Nous vous recommandons de commencer par utiliser l'outil de migration. Il automatise une grande partie du travail de routine de remplacement du code 1.x au code 2.x. 

Comme l'outil [ne migre pas toutes les fonctionnalités](migration-tool.md#migration-tool-limitations), vous devrez rechercher le code v1 restant après avoir exécuté l'outil. Lorsque vous trouvez du code que l'outil n'a pas migré, suivez les [step-by-step instructions](migration-steps.md) (approche manuelle) et utilisez les [articles du guide de migration](migration-whats-different.md) pour terminer la migration.

**Topics**
+ [Outil de migration](migration-tool.md)
+ [Step-by-step instructions](migration-steps.md)

# AWS SDK pour Java outil de migration
<a name="migration-tool"></a>

 AWS SDK pour Java Il fournit un outil de migration qui permet d'automatiser la migration du code du SDK for Java 1.x (V1) vers le code 2.x (V2). L'outil utilise [OpenRewrite](https://docs.openrewrite.org/)un outil open source de refactorisation du code source pour effectuer la migration. OpenRewrite utilise des règles de modification du code (appelées « recettes ») pour mettre à jour automatiquement votre code source de la syntaxe et des modèles V1 à V2.

L'outil prend en charge les règles de modification du code pour les clients du service SDK et la bibliothèque de haut niveau [S3 Transfer Manager](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html). Les règles de modification du code pour d'autres applications de haut niveau, APIs telles que l'API [DynamoDB Enhanced Client](dynamodb-enhanced-client.md) des versions 1 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html)à 2, ne sont pas prises en charge. 

Pour plus de détails sur les limitations, consultez la [fin de cette page](#migration-tool-limitations). Pour des exemples détaillés de modèles de code courants non pris en charge avec des étapes de migration manuelle, voir Modèles de [code non pris en charge](migration-tool-unsupported-patterns.md).

## Utiliser l'outil de migration
<a name="migration-tool-use"></a>

### Migrer un projet Maven
<a name="migration-tool-use-maven"></a>

[Suivez les instructions ci-dessous pour migrer votre projet SDK for Java 1.x basé sur Maven à l'aide OpenRewrite du plug-in Maven.](https://docs.openrewrite.org/reference/rewrite-maven-plugin)

1. Accédez au répertoire racine de votre projet Maven

   Ouvrez une fenêtre de terminal (ligne de commande) et accédez au répertoire racine de votre application basée sur Maven.

1. Exécutez la `rewrite-maven-plugin` commande du plugin

   Vous pouvez choisir entre deux modes (objectifs Maven) : `dryRun` et`run`.

   **Mode `dryRun`******

   Dans ce `dryRun` mode, le plugin génère des journaux de comparaison dans la sortie de la console et un fichier correctif nommé `rewrite.patch` dans le `target/rewrite` dossier. Ce mode vous permet de prévisualiser les modifications qui seront apportées, car aucune modification n'est apportée aux fichiers de code source. 

   L'exemple suivant montre comment invoquer le plugin en `dryRun` mode.

   ```
   mvn org.openrewrite.maven:rewrite-maven-plugin:<rewrite-plugin-version>*:dryRun \
     -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:<sdkversion>** \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   \$1Remplacez *<rewrite-plugin-version>* par la `rewriteMavenPluginVersion` valeur que vous voyez dans ce [fichier de test](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \$1\$1Remplacez par *<sdkversion>* une version 2.x du SDK. Visitez [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) pour vérifier la dernière version. 
**Important**  
Veillez à utiliser la version `rewrite-maven-plugin` indiquée dans le [fichier de test](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54), car les autres versions risquent de ne pas fonctionner.

   La sortie de votre console depuis le `dryRun` mode doit ressembler à la sortie suivante.

   ```
   [WARNING] These recipes would make changes to project/src/test/resources/maven/before/pom.xml:
   [WARNING]     software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   [WARNING]         software.amazon.awssdk.v2migration.UpgradeSdkDependencies
   [WARNING]             org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=apache-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration}
   [WARNING]             org.openrewrite.java.dependencies.AddDependency: {groupId=software.amazon.awssdk, artifactId=netty-nio-client, version=2.27.0, onlyIfUsing=com.amazonaws.ClientConfiguration}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-bom, newGroupId=software.amazon.awssdk, newArtifactId=bom, newVersion=2.27.0}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-s3, newGroupId=software.amazon.awssdk, newArtifactId=s3, newVersion=2.27.0}
   [WARNING]             org.openrewrite.java.dependencies.ChangeDependency: {oldGroupId=com.amazonaws, oldArtifactId=aws-java-sdk-sqs, newGroupId=software.amazon.awssdk, newArtifactId=sqs, newVersion=2.27.0}
   [WARNING] These recipes would make changes to project/src/test/resources/maven/before/src/main/java/foo/bar/Application.java:
   [WARNING]     software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   [WARNING]         software.amazon.awssdk.v2migration.S3GetObjectConstructorToFluent
   [WARNING]             software.amazon.awssdk.v2migration.ConstructorToFluent
   [WARNING]         software.amazon.awssdk.v2migration.S3StreamingResponseToV2
   [WARNING]         software.amazon.awssdk.v2migration.ChangeSdkType
   [WARNING]         software.amazon.awssdk.v2migration.ChangeSdkCoreTypes
   [WARNING]             software.amazon.awssdk.v2migration.ChangeExceptionTypes
   [WARNING]                 org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonClientException, newFullyQualifiedTypeName=software.amazon.awssdk.core.exception.SdkException}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRequestId(), newMethodName=requestId}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorCode(), newMethodName=awsErrorDetails().errorCode}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getServiceName(), newMethodName=awsErrorDetails().serviceName}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getErrorMessage(), newMethodName=awsErrorDetails().errorMessage}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponse(), newMethodName=awsErrorDetails().rawResponse().asByteArray}
   [WARNING]                 org.openrewrite.java.ChangeMethodName: {methodPattern=com.amazonaws.AmazonServiceException getRawResponseContent(), newMethodName=awsErrorDetails().rawResponse().asUtf8String}
   [WARNING]                 org.openrewrite.java.ChangeType: {oldFullyQualifiedTypeName=com.amazonaws.AmazonServiceException, newFullyQualifiedTypeName=software.amazon.awssdk.awscore.exception.AwsServiceException}
   [WARNING]         software.amazon.awssdk.v2migration.NewClassToBuilderPattern
   [WARNING]             software.amazon.awssdk.v2migration.NewClassToBuilder
   [WARNING]             software.amazon.awssdk.v2migration.V1SetterToV2
   [WARNING]         software.amazon.awssdk.v2migration.V1GetterToV2
   ...
   [WARNING]         software.amazon.awssdk.v2migration.V1BuilderVariationsToV2Builder
   [WARNING]         software.amazon.awssdk.v2migration.NewClassToBuilderPattern
   [WARNING]             software.amazon.awssdk.v2migration.NewClassToBuilder
   [WARNING]             software.amazon.awssdk.v2migration.V1SetterToV2
   [WARNING]         software.amazon.awssdk.v2migration.HttpSettingsToHttpClient
   [WARNING]         software.amazon.awssdk.v2migration.WrapSdkClientBuilderRegionStr
   [WARNING] Patch file available:
   [WARNING]     project/src/test/resources/maven/before/target/rewrite/rewrite.patch
   [WARNING] Estimate time saved: 20m
   [WARNING] Run 'mvn rewrite:run' to apply the recipes.
   ```

   **Mode `run`******

   Lorsque vous exécutez le plugin en `run` mode, il modifie le code source sur le disque pour appliquer les modifications. Assurez-vous de disposer d'une copie de sauvegarde du code source avant d'exécuter la commande.

   L'exemple suivant montre comment invoquer le plugin en `run` mode.

   ```
   mvn org.openrewrite.maven:rewrite-maven-plugin:<rewrite-plugin-version>*:run \
     -Drewrite.recipeArtifactCoordinates=software.amazon.awssdk:v2-migration:<sdkversion>** \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   \$1Remplacez *<rewrite-plugin-version>* par celui `rewriteMavenPluginVersionvalue` que vous voyez dans ce [fichier de test](https://github.com/aws/aws-sdk-java-v2/blob/3a01289246f1f4ac814a354051d00030e53ef968/test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java#L54).

   \$1\$1Remplacez par *<sdkversion>* une version 2.x du SDK. Visitez [Maven Central](https://central.sonatype.com/artifact/software.amazon.awssdk/v2-migration) pour vérifier la dernière version. 

   Après avoir exécuté la commande, compilez votre application et exécutez des tests pour vérifier les modifications. 

### Migrer un projet Gradle
<a name="migration-tool-use-gradle"></a>

[Suivez les instructions ci-dessous pour migrer votre projet SDK for Java 1.x basé sur Gradle à l'aide OpenRewrite du plug-in Gradle.](https://docs.openrewrite.org/reference/gradle-plugin-configuration)

1. Accédez au répertoire racine de votre projet Gradle

   Ouvrez une fenêtre de terminal (ligne de commande) et accédez au répertoire racine de votre application basée sur Gradle.

1. Créer un script d'initialisation Gradle

   Créez un `init.gradle` fichier avec le contenu suivant dans le répertoire.

   ```
   initscript {
       repositories {
           maven { url "https://plugins.gradle.org/m2" }
       }
       dependencies {
           classpath("org.openrewrite:plugin:<rewrite-plugin-version>*")
       }
   }
   
   rootProject {
       plugins.apply(org.openrewrite.gradle.RewritePlugin)
       dependencies {
           rewrite("software.amazon.awssdk:v2-migration:latest.release")
       }
   
       afterEvaluate {
           if (repositories.isEmpty()) {
               repositories {
                   mavenCentral()
               }
           }
       }
   }
   ```

   \$1Remplacez *<rewrite-plugin-version>* par la version que vous voyez dans ce [fichier de test](https://github.com/aws/aws-sdk-java-v2/blob/master/test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/gradle/before/init.gradle#L6).

1. Exécutez la `rewrite` commande

   Comme avec le plugin Maven, vous pouvez exécuter le plugin Gradle en mode `dryRun` or`run`.

   **Mode `dryRun`**

   L'exemple suivant montre comment invoquer le plugin en `dryRun` mode.

   ```
   gradle rewriteDryRun --init-script init.gradle \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

   **Mode `run`**

   L'exemple suivant montre comment invoquer le plugin en `run` mode.

   ```
   gradle rewriteRun --init-script init.gradle \
     -Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2
   ```

## Limitations actuelles
<a name="migration-tool-limitations"></a>

Bien que la migration prenne en charge la plupart du code V1 par le biais de règles de modification du code mises à jour vers l'équivalent de la V2, certaines classes et méthodes ne sont pas couvertes. Pour ces classes et méthodes, suivez les [step-by-step instructions](migration-steps.md) pour migrer manuellement votre code.

Pour certaines règles de modification de code non prises en charge, l'outil de migration peut ajouter un commentaire commençant par :

```
/*AWS SDK for Java v2 migration: Transform for ...
```

Après le commentaire, l'outil génère un stub générique de la version V2 de la méthode ou de la classe. Par exemple, dans le résultat suivant, l'outil de migration a tenté de migrer la `setBucketLifecycleConfiguration` méthode du client S3 V1 :

```
/*AWS SDK for Java v2 migration: Transform for setBucketLifecycleConfiguration method not supported. 
Please manually migrate your code by using builder pattern, update from BucketLifecycleConfiguration.Rule 
to LifecycleRule, StorageClass to TransitionStorageClass, and adjust imports and names.*/
s3.putBucketLifecycleConfiguration(
        PutBucketLifecycleConfigurationRequest.builder()
            .bucket(bucketName)
            .lifecycleConfiguration(BucketLifecycleConfiguration.builder()
                .build())
            .build());
```

Les liens de la liste ci-dessous vous redirigent vers des informations de migration qui vous aideront à migrer manuellement le code.
+ [Différences du client S3 entre la version 1 et la version 2 du AWS SDK pour Java](migration-s3-client.md)
+ [Gestionnaire de transfert S3](migration-s3-transfer-manager.md) (TransferManager)
+ [Mappage d'objets DynamoDB (](migration-ddb-mapper.md)Dynamo) DBMapper
+ [EC2 utilitaire de métadonnées](migration-imds.md) (EC2MetadataUtils)
+ [Serveurs](migration-waiters.md) () AmazonDynamo DBWaiters
+ [Générateur de politiques IAM](migration-iam-policy-builder.md) (stratégie)
+ [CloudFront présignant](migration-cloudfront-presigning.md) (CloudFrontUrlSigner, CloudFrontCookieSigner)
+ [Notifications d'événements S3](migration-s3-event-notification.md) (S3EventNotification)
+ Publication de métriques dans le SDK (documentation [1.x, documentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html) [2.x](metrics.md))
+ [Modèles de code non pris en charge](migration-tool-unsupported-patterns.md) : exemples détaillés de modèles de code courants nécessitant une migration manuelle

# Modèles de code non pris en charge par l'outil de migration
<a name="migration-tool-unsupported-patterns"></a>

L'outil de migration convertit automatiquement la plupart du code v1 en v2. Cependant, certains modèles de code nécessitent une migration manuelle. Cette rubrique fournit des exemples détaillés des modèles non pris en charge les plus courants et explique comment les convertir manuellement.

La liste de modèles suivante n'est pas exhaustive. Si votre code n'est pas compilé après avoir exécuté l'outil de migration, suivez les [instructions de step-by-step migration](migration-steps.md) pour migrer manuellement le code v1 restant.

## Demander des constructeurs d'objets avec des paramètres
<a name="request-pojo-constructors"></a>

Pour les demandes POJOs (à l'exception d'Amazon S3), l'outil de migration transforme uniquement les méthodes setter. L'outil ne prend pas en charge les constructeurs paramétrés.

**Modèle pris en charge : objet de requête à l'aide de setters (aucun paramètre de constructeur)**

Avant (code v1 original) :

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest().withMessageBody("Hello World");
request.setQueueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue");
```

Après (résultat de l'outil de migration) :

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World").build();
request = request.toBuilder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue").build();
```

**Modèle non pris en charge : constructeur d'objet de demande avec paramètres**

L'outil de migration ne peut pas convertir les constructeurs avec des paramètres :

Avant la migration manuelle, mais après l'outil de migration :

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2.

// This pattern requires manual migration.
SendMessageRequest request = new SendMessageRequest(
    "https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", 
    "Hello World");
```

L'outil de migration transforme l'importation en version v2, mais le code du constructeur reste inchangé et nécessite des mises à jour manuelles pour utiliser le modèle du générateur.

Après la migration manuelle :

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;

SendMessageRequest request = SendMessageRequest.builder()
    .messageBody("Hello World")
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .build();
```

## Méthodes du client de service avec paramètres individuels
<a name="service-client-method-overloads"></a>

L'outil de migration ne peut pas convertir les méthodes des clients de service qui utilisent des paramètres individuels au lieu d'objets de demande (à l'exception d'Amazon S3).

Avant (code v1) :

```
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AmazonSQS sqs = new AmazonSQSClient();
// The following v1 method takes individual parameters.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Après (résultat de l'outil de migration : ne compile pas) :

```
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.
// No import statement for the v2 request POJO.

SqsClient sqs = SqsClient.builder().build();

// Does not compile–v2 methods only accept request POJOs.
sqs.sendMessage("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue", "Hello World");
```

Vous devez mettre à jour manuellement les arguments de méthode pour utiliser un objet de requête :

```
import software.amazon.awssdk.services.sqs.SqsClient;
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Add manually.

SqsClient sqs = SqsClient.builder().build();

// Corrected v2 code.
SendMessageRequest request = SendMessageRequest.builder()
    .queueUrl("https://sqs.us-west-2.amazonaws.com/0123456789012/demo-queue")
    .messageBody("Hello World")
    .build();
sqs.sendMessage(request);
```

## Méthodes de temporisation des demandes
<a name="request-pojo-timeout-configuration"></a>

L'outil de migration ne convertit pas les méthodes qui définissent des délais d'expiration pour les objets de demande.

Avant (code v1) :

```
import com.amazonaws.services.sqs.model.SendMessageRequest;

SendMessageRequest request = new SendMessageRequest();
request.setSdkRequestTimeout(7);
```

Après (résultat de l'outil de migration : ne compile pas) :

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;  // Import updated to v2.

SendMessageRequest request = SendMessageRequest.builder().build();

// Does not compile.
request.setSdkRequestTimeout(7);
```

Vous devez migrer manuellement pour utiliser la `overrideConfiguration` méthode de la v2 :

```
import software.amazon.awssdk.services.sqs.model.SendMessageRequest;
import java.time.Duration;

SendMessageRequest request = SendMessageRequest.builder().build();

// Corrected v2 code.
request = request.toBuilder()
    .overrideConfiguration(o -> o.apiCallTimeout(Duration.ofSeconds(7)))
    .build();
```

## Constructeurs de clients de service avec paramètres
<a name="service-client-constructors-with-args"></a>

L'outil de migration convertit les constructeurs de clients de service vides, mais ne peut pas convertir les constructeurs qui acceptent des paramètres tels que les informations d'identification ou la configuration.

Avant (code v1) :

```
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;

AWSCredentials awsCredentials = new BasicAWSCredentials("akid", "skid");
AmazonSQS sqs = new AmazonSQSClient(awsCredentials);
```

Après (résultat de l'outil de migration : ne compile pas) :

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.services.sqs.SqsClient;  // Import updated to v2.

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Does not compile.
SqsClient sqs = new SqsClient(awsCredentials);
```

Vous devez mettre à jour manuellement le constructeur du client de service pour utiliser le modèle de générateur :

```
import software.amazon.awssdk.auth.credentials.AwsCredentials;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;  // Add manually.
import software.amazon.awssdk.services.sqs.SqsClient;

AwsCredentials awsCredentials = AwsBasicCredentials.create("akid", "skid");

// Corrected v2 code.
SqsClient sqs = SqsClient.builder()
    .credentialsProvider(StaticCredentialsProvider.create(awsCredentials))
    .build();
```

# step-by-stepInstructions de migration avec exemple
<a name="migration-steps"></a>

Cette section fournit un step-by-step guide pour migrer votre application qui utilise actuellement le SDK pour Java v1.x vers le SDK pour Java 2.x. La première partie présente un aperçu des étapes suivies par un exemple détaillé de migration.

Les étapes décrites ici décrivent une migration d'un cas d'utilisation normal, dans lequel l'application appelle à l' Services AWS aide de clients de service pilotés par un modèle. Si vous devez migrer du code utilisant un niveau supérieur APIs tel que [S3 Transfer Manager](migration-s3-transfer-manager.md) ou la [CloudFrontprésignature](migration-cloudfront-presigning.md), reportez-vous à la section sous la [Quelle est la différence entre la version AWS SDK pour Java 1.x et la version 2.x](migration-whats-different.md) table des matières.



L'approche décrite ici n'est qu'une suggestion. Vous pouvez utiliser d'autres techniques et tirer parti des fonctionnalités d'édition de code de votre IDE pour obtenir le même résultat. 

## Présentation des étapes
<a name="migration-steps-overview"></a>

### 1. Commencez par ajouter le SDK pour Java 2.x BOM
<a name="migration-steps-overview-step1"></a>

En ajoutant l'élément Maven BOM (Bill of Materials) pour le SDK pour Java 2.x à votre fichier POM, vous vous assurez que toutes les dépendances v2 dont vous avez besoin proviennent de la même version. Votre POM peut contenir à la fois des dépendances v1 et v2. Cela vous permet de migrer votre code progressivement plutôt que de le modifier en une seule fois.

#### SDK pour Java 2.x BOM
<a name="drt_b5n_q1c"></a>

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

Vous pouvez trouver la [dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom) sur le référentiel central de Maven.

### 2. Rechercher dans les fichiers les instructions d'importation de classe v1
<a name="migration-steps-overview-step2"></a>

En scannant les fichiers de votre application à la recherche du SERVICE\$1 IDs utilisé dans les importations de la version 1, vous trouverez le SERVICE\$1 IDs unique utilisé. Un SERVICE\$1ID est un nom court et unique pour un. Service AWS`cognitoidentity`C'est le cas par exemple du SERVICE\$1ID pour Amazon Cognito Identity.

### 3. Déterminez les dépendances Maven de la version 2 à partir des instructions d'importation de la version 1
<a name="migration-steps-overview-step3"></a>

Une fois que vous avez trouvé tous les SERVICE\$1 v1 uniquesIDs, vous pouvez déterminer l'artefact Maven correspondant à la dépendance v2 en vous référant à. [Nom du package vers les mappages Artifactid Maven](#migration-serviceid-artifactid-mapping)

### 4. Ajouter des éléments de dépendance v2 au fichier POM
<a name="migration-steps-overview-step4"></a>

Mettez à jour le fichier Maven POM avec les éléments de dépendance déterminés à l'étape 3.

### 5. Dans les fichiers Java, passez progressivement des classes v1 aux classes v2
<a name="migration-steps-overview-step5"></a>

Lorsque vous remplacez les classes v1 par des classes v2, apportez les modifications nécessaires pour prendre en charge l'API v2, par exemple en utilisant des générateurs plutôt que des constructeurs et en utilisant des getters et des setters fluides.

### 6. Supprimer les dépendances Maven v1 du POM et les importations v1 des fichiers
<a name="migration-steps-overview-step6"></a>

Après avoir migré votre code pour utiliser les classes v2, supprimez toutes les importations v1 restantes des fichiers et toutes les dépendances de votre fichier de compilation.

### 7. Refactorisez le code pour utiliser les améliorations de l'API v2
<a name="migration-steps-overview-step7"></a>

Une fois le code compilé et passé avec succès les tests, vous pouvez tirer parti des améliorations apportées à la version 2, telles que l'utilisation d'un autre client HTTP ou de différents paginateurs pour simplifier le code. Il s'agit d'une étape facultative.

## Exemple de migration
<a name="migration-steps-example"></a>

Dans cet exemple, nous migrons une application qui utilise le SDK pour Java v1 et accède Services AWSà plusieurs d'entre eux. Nous travaillons en détail sur la méthode v1 suivante à l'étape 5. Il s'agit d'une méthode dans une classe qui contient huit méthodes et l'application compte 32 classes.

### méthode v1 pour migrer
<a name="v1-snippet-collapsed"></a>

Seules les importations du SDK v1 sont répertoriées ci-dessous à partir du fichier Java.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Reservation;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
...
private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds) {
    List<Instance> runningInstances = new ArrayList<>();
    try {
        DescribeInstancesRequest request = new DescribeInstancesRequest()
                .withInstanceIds(instanceIds);
        DescribeInstancesResult result;
        do {
            // DescribeInstancesResponse is a paginated response, so use tokens with multiple requests.
            result = ec2.describeInstances(request);
            request.setNextToken(result.getNextToken());   // Prepare request for next page.
            for (final Reservation r : result.getReservations()) {
                for (final Instance instance : r.getInstances()) {
                    LOGGER.info("Examining instanceId: "+ instance.getInstanceId());
                    // if instance is in a running state, add it to runningInstances list.
                    if (RUNNING_STATES.contains(instance.getState().getName())) {
                        runningInstances.add(instance);
                    }
                }
            }
        } while (result.getNextToken() != null);
    } catch (final AmazonEC2Exception exception) {
        // if instance isn't found, assume its terminated and continue.
        if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) {
            LOGGER.info("Instance probably terminated; moving on.");
        } else {
            throw exception;
        }
    }
    return runningInstances;
}
```

### 1. Ajouter la version v2 de Maven BOM
<a name="migration-steps-example-step1"></a>

Ajoutez la nomenclature Maven pour le SDK pour Java 2.x au POM avec toutes les autres dépendances de la section. `dependencyManagement` Si votre fichier POM contient la nomenclature de la version 1 du SDK, laissez-la pour le moment. Il sera supprimé ultérieurement.

#### Gestion des dépendances POM dès le départ
<a name="migration-example-boms"></a>

```
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.example</groupId>             <!--Existing dependency in POM. -->
      <artifactId>bom</artifactId>
      <version>1.3.4</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>  <!--Existing v1 BOM dependency. -->
      <version>1.11.1000</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
    <dependency>
      <groupId>software.amazon.awssdk</groupId>  <!--Add v2 BOM dependency. -->
      <artifactId>bom</artifactId>
      <version>2.27.21</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
```

### 2. Rechercher dans les fichiers les instructions d'importation de classe v1
<a name="migration-steps-example-step2"></a>

Recherchez dans le code de l'application les occurrences uniques de`import com.amazonaws.services`. Cela nous aide à déterminer les dépendances v1 utilisées par le projet. Si votre application possède un fichier Maven POM dont les dépendances v1 sont répertoriées, vous pouvez utiliser ces informations à la place. 

Dans cet exemple, nous utilisons la commande [`ripgrep`(rg)](https://github.com/BurntSushi/ripgrep) pour effectuer une recherche dans la base de code.

À la racine de votre base de code, exécutez la `ripgrep` commande suivante. Une `ripgrep` fois les instructions d'importation trouvées, elles sont redirigées vers les `uniq` commandes `cut``sort`, et pour isoler le IDs SERVICE\$1. 

```
rg --no-filename 'import\s+com\.amazonaws\.services' | cut -d '.' -f 4 | sort | uniq
```

Pour cette application, les SERVICE\$1 suivants IDs sont enregistrés sur la console.

```
autoscaling
cloudformation
ec2
identitymanagement
```

Cela indique qu'au moins une occurrence de chacun des noms de package suivants a été utilisée dans les `import` instructions. Pour nos besoins, les noms de classe individuels n'ont pas d'importance. Nous avons juste besoin de trouver les SERVICE\$1 IDs utilisés.

```
com.amazonaws.services.autoscaling.*
com.amazonaws.services.cloudformation.*
com.amazonaws.services.ec2.*
com.amazonaws.services.identitymanagement.*
```

### 3. Déterminez les dépendances Maven de la version 2 à partir des instructions d'importation de la version 1
<a name="migration-steps-example-step3"></a>

Le SERVICE\$1 IDs pour la v1 que nous avons isolé à partir de l'étape 2, par exemple`cloudformation`, `autoscaling` et — peut être mappé sur le même SERVICE\$1ID v2 pour la plupart. Étant donné que l'artifactid Maven v2 correspond au SERVICE\$1ID dans la plupart des cas, vous disposez des informations dont vous avez besoin pour ajouter des blocs de dépendance à votre fichier POM.

Le tableau suivant montre comment déterminer les dépendances de la version 2.


| v1 SERVICE\$1ID correspond à...nom du package | v2 SERVICE\$1ID correspond à...nom du package | Dépendance Maven v2 | 
| --- | --- | --- | 
|  **ec2** `com.amazonaws.services.ec2.*`  |  **ec2** `software.amazon.awssdk.services.ec2.*`  |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>ec2</artifactId><br /></dependency></pre>  | 
|  **mise à l'échelle automatique** `com.amazonaws.services.autoscaling.*`  |  **mise à l'échelle automatique** `software.amazon.awssdk.services.autoscaling.*`  |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>autoscaling</artifactId><br /></dependency></pre>  | 
| cloudformation`com.amazonaws.services.cloudformation.*` | cloudformation`software.amazon.awssdk.cloudformation.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>cloudformation</artifactId><br /></dependency></pre>  | 
| gestion de l'identité\$1`com.amazonaws.services.identitymanagement.*` | je suis\$1`software.amazon.awssdk.iam.*` |  <pre><dependency><br />  <groupId>software.amazon.awssdk</groupId><br />  <artifactId>iam</artifactId><br /></dependency></pre>  | 

\$1 Le `iam` mappage `identitymanagement` vers est une exception lorsque le SERVICE\$1ID diffère d'une version à l'autre. Reportez-vous [Nom du package vers les mappages Artifactid Maven](#migration-serviceid-artifactid-mapping) aux exceptions si Maven ou Gradle ne peuvent pas résoudre la dépendance à la v2.

### 4. Ajouter des éléments de dépendance v2 au fichier POM
<a name="migration-steps-example-step4"></a>

À l'étape 3, nous avons déterminé les quatre blocs de dépendance à ajouter au fichier POM. Nous n'avons pas besoin d'ajouter de version car nous avons spécifié la nomenclature à l'étape 1. Une fois les importations ajoutées, notre fichier POM contient les éléments de dépendance suivants.

```
    ...
  <dependencies>
    ...
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>autoscaling</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>iam</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>cloudformation</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>ec2</artifactId>
    </dependency>
    ...
  </dependencies>
    ...
```

### 5. Dans les fichiers Java, passez progressivement des classes v1 aux classes v2
<a name="migration-steps-example-step5"></a>

Dans la méthode de migration, nous voyons
+ Un client du service EC2 de. `com.amazonaws.services.ec2.AmazonEC2Client`
+ Plusieurs classes de modèles EC2 ont été utilisées. Par exemple `DescribeInstancesRequest` et`DescribeInstancesResult`.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesRequest;
import com.amazonaws.services.ec2.model.DescribeInstancesResult;
import com.amazonaws.services.ec2.model.Instance;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Reservation;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;
...
private static List<Instance> getRunningInstances(AmazonEC2Client ec2, List<String> instanceIds)
    List<Instance> runningInstances = new ArrayList<>();
    try {
        DescribeInstancesRequest request = new DescribeInstancesRequest()
                .withInstanceIds(instanceIds);
        DescribeInstancesResult result;
        do {
            // DescribeInstancesResponse is a paginated response, so use tokens with multiple re
            result = ec2.describeInstances(request);
            request.setNextToken(result.getNextToken());   // Prepare request for next page.
            for (final Reservation r : result.getReservations()) {
                for (final Instance instance : r.getInstances()) {
                    LOGGER.info("Examining instanceId: "+ instance.getInstanceId());
                    // if instance is in a running state, add it to runningInstances list.
                    if (RUNNING_STATES.contains(instance.getState().getName())) {
                        runningInstances.add(instance);
                    }
                }
            }
        } while (result.getNextToken() != null);
    } catch (final AmazonEC2Exception exception) {
        // if instance isn't found, assume its terminated and continue.
        if (exception.getErrorCode().equals(NOT_FOUND_ERROR_CODE)) {
            LOGGER.info("Instance probably terminated; moving on.");
        } else {
            throw exception;
        }
    }
    return runningInstances;
}
...
```

Notre objectif est de remplacer toutes les importations v1 par des importations v2. Nous procédons un cours à la fois.

#### a. Remplacer la déclaration d'importation ou le nom de classe
<a name="migration-example-step5-substep1"></a>

Nous voyons que le premier paramètre de la `describeRunningInstances` méthode est une `AmazonEC2Client` instance v1. Effectuez l’une des actions suivantes :
+ Remplacez le fichier d'importation `com.amazonaws.services.ec2.AmazonEC2Client` par `software.amazon.awssdk.services.ec2.Ec2Client` et `AmazonEC2Client` remplacez-le par`Ec2Client`.
+ Changez le type de paramètre en `Ec2Client` et laissez l'IDE nous demander l'importation correcte. Notre IDE nous demandera d'importer la classe v2 car les noms des clients diffèrent... `AmazonEC2Client` et`Ec2Client`. Cette approche ne fonctionne pas si le nom de classe est le même dans les deux versions.

#### b. Remplacer les classes de modèles v1 par des équivalents v2
<a name="migration-example-step5-substep2"></a>

Après le passage à la v2`Ec2Client`, si nous utilisons un IDE, nous voyons des erreurs de compilation dans l'instruction suivante.

```
                    result = ec2.describeInstances(request);
```

L'erreur de compilation résulte de l'utilisation d'une instance de v1 `DescribeInstancesRequest` comme paramètre de la `Ec2Client` `describeInstances` méthode v2. Pour résoudre le problème, effectuez les instructions de remplacement ou d'importation suivantes.


| replace | avec | 
| --- | --- | 
|  <pre>import com.amazonaws.services.ec2.model.DescribeInstancesRequest</pre>  |  <pre>import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest</pre>  | 

#### c. Changez les constructeurs v1 en constructeurs v2.
<a name="migration-example-step5-substep3"></a>

Nous voyons toujours des erreurs de compilation car il [n'y a pas de constructeur sur les classes v2](migration-whats-different.md#immutable-classes). Pour corriger cela, apportez les modifications suivantes.


| modification | to | 
| --- | --- | 
|  <pre>final DescribeInstancesRequest request = new DescribeInstancesRequest()<br />        .withInstanceIds(instanceIdsCopy);</pre>  |  <pre>final DescribeInstancesRequest request = DescribeInstancesRequest.builder()<br />        .instanceIds(instanceIdsCopy)<br />        .build();</pre>  | 

#### d. Remplacer les objets de `*Result` réponse v1 par des `*Response` équivalents v2
<a name="migration-example-step5-substep4"></a>

Une différence constante entre la v1 et la v2 est que tous les [objets de réponse de la v2 se terminent par `*Response` au lieu de `*Result`](migration-whats-different.md#model-classname-changes). Remplacez l'`DescribeInstancesResult`importation v1 par l'importation v2,`DescribeInstancesResponse`.

#### d. Apporter des modifications à l'API
<a name="migration-example-step5-substep5"></a>

La déclaration suivante nécessite quelques modifications.

```
request.setNextToken(result.getNextToken());
```

Dans la version 2, [les méthodes setter](migration-whats-different.md#setter-getter-methods) n'utilisent pas le `set` ou avec`prefix`. Les méthodes Getter préfixées par `get` ont également disparu dans le SDK pour Java 2.x

Les classes de modèles, telles que l'`request`instance, sont immuables dans la version 2, nous devons donc en créer une nouvelle `DescribeInstancesRequest` avec un générateur.

Dans la version 2, l'instruction devient la suivante.

```
request = DescribeInstancesRequest.builder()
        .nextToken(result.nextToken())
        .build();
```

#### d. Répétez jusqu'à ce que la méthode soit compilée avec les classes v2
<a name="migration-example-step5-substep6"></a>

Continuez avec le reste du code. Remplacez les importations v1 par des importations v2 et corrigez les erreurs de compilation. Reportez-vous à la [référence de l'API v2](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/package-summary.html) et à la [référence What's different](migration-whats-different.md) si nécessaire.

Après avoir migré cette méthode unique, nous avons le code v2 suivant.

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.services.ec2.AmazonEC2Client;
import com.amazonaws.services.ec2.model.AmazonEC2Exception;
import com.amazonaws.services.ec2.model.CreateTagsRequest;
import com.amazonaws.services.ec2.model.InstanceStateName;
import com.amazonaws.services.ec2.model.Tag;
import com.amazonaws.services.ec2.model.TerminateInstancesRequest;

import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
import software.amazon.awssdk.services.ec2.model.Ec2Exception;
import software.amazon.awssdk.services.ec2.model.Instance;
import software.amazon.awssdk.services.ec2.model.Reservation;
...
private static List<Instance> getRunningInstances(Ec2Client ec2, List<String> instanceIds) {
    List<Instance> runningInstances = new ArrayList<>();
        try {
            DescribeInstancesRequest request = DescribeInstancesRequest.builder()
                    .instanceIds(instanceIds)
                    .build();
            DescribeInstancesResponse result;
            do {
                // DescribeInstancesResponse is a paginated response, so use tokens with multiple re
                result = ec2.describeInstances(request);
                request = DescribeInstancesRequest.builder()   // Prepare request for next page.
                        .nextToken(result.nextToken())
                        .build();
                for (final Reservation r : result.reservations()) {
                    for (final Instance instance : r.instances()) {
                        // if instance is in a running state, add it to runningInstances list.
                        if (RUNNING_STATES.contains(instance.state().nameAsString())) {
                            runningInstances.add(instance);
                        }
                    }
                }
            } while (result.nextToken() != null);
        } catch (final Ec2Exception exception) {
            // if instance isn't found, assume its terminated and continue.
            if (exception.awsErrorDetails().errorCode().equals(NOT_FOUND_ERROR_CODE)) {
                    LOGGER.info("Instance probably terminated; moving on.");
            } else {
                throw exception;
            }
        }
        return runningInstances;
    }
...
```

Comme nous migrons une seule méthode dans un fichier Java avec huit méthodes, nous avons un mélange d'importations v1 et v2 au fur et à mesure que nous travaillons sur le fichier. Nous avons ajouté les six dernières instructions d'importation au fur et à mesure de l'exécution des étapes. 

Une fois que nous aurons migré tout le code, il n'y aura plus d'instructions d'importation v1.

### 6. Supprimer les dépendances Maven v1 du POM et les importations v1 des fichiers
<a name="migration-steps-example-step6"></a>

Après avoir migré tout le code v1 du fichier, nous avons les instructions d'importation du SDK v2 suivantes.

```
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.regions.ServiceMetadata;
import software.amazon.awssdk.services.ec2.Ec2Client;
import software.amazon.awssdk.services.ec2.model.CreateTagsRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
import software.amazon.awssdk.services.ec2.model.Ec2Exception;
import software.amazon.awssdk.services.ec2.model.Instance;
import software.amazon.awssdk.services.ec2.model.InstanceStateName;
import software.amazon.awssdk.services.ec2.model.Reservation;
import software.amazon.awssdk.services.ec2.model.Tag;
import software.amazon.awssdk.services.ec2.model.TerminateInstancesRequest;
```

Après avoir migré *tous les* fichiers de notre application, nous n'avons plus besoin des dépendances v1 dans notre fichier POM. Supprimez la nomenclature v1 de la `dependencyManagement` section, si vous en utilisez, ainsi que tous les blocs de dépendance v1.

### 7. Refactorisez le code pour utiliser les améliorations de l'API v2
<a name="migration-steps-example-step7"></a>

Pour l'extrait que nous avons migré, nous pouvons éventuellement utiliser un paginateur v2 et laisser le SDK gérer les demandes de données supplémentaires basées sur des jetons.

Nous pouvons remplacer l'intégralité de la `do` clause par la suivante.

```
                DescribeInstancesIterable responses = ec2.describeInstancesPaginator(request);

                responses.reservations().stream()
                        .forEach(reservation -> reservation.instances()
                                .forEach(instance -> {
                                    if (RUNNING_STATES.contains(instance.state().nameAsString())) {
                                        runningInstances.put(instance.instanceId(), instance);
                                    }
                                }));
```

## Nom du package vers les mappages Artifactid Maven
<a name="migration-serviceid-artifactid-mapping"></a>

Lorsque vous migrez votre projet Maven ou Gradle de la version v1 du SDK pour Java vers la version v2, vous devez déterminer les dépendances à ajouter à votre fichier de compilation. L'approche décrite à l'[step-by-stepInstructions de migration avec exemple](#migration-steps)étape 3 utilise les noms des packages dans les instructions d'importation comme point de départ pour déterminer les dépendances (sous forme d'artifactIds) à ajouter à votre fichier de compilation. 

Vous pouvez utiliser les informations de cette rubrique pour associer les noms des packages v1 aux ArtifactID de la version v2.

### Convention de dénomination commune utilisée dans les noms de packages et les ArtifactID de Maven
<a name="migration-naming-convention"></a>

Le tableau suivant indique la convention de dénomination courante SDKs utilisée pour un SERVICE\$1ID donné. Un SERVICE\$1ID est un identifiant unique pour un. Service AWS Par exemple, le SERVICE\$1ID du service Amazon S3 est `s3` et `cognitoidentity` est le SERVICE\$1ID d'Amazon Cognito Identity.


| nom du package v1 (déclaration d'importation) | Artifactid v1 | Artifactid v2 | nom du package v2 (instruction d'importation) | 
| --- | --- | --- | --- | 
| com.amazonaws.services.Service\$1ID | aws-java-sdk-IDENTIFIANT DE SERVICE | IDENTIFIANT\$1SERVICE | Software.Amazon.AWSSDK.Services.Service\$1ID | 
|   | 
| Exemple pour Amazon Cognito Identity (SERVICE\$1ID :) cognitoidentity | 
| com.amazonaws.services. identité cognito | aws-java-sdk- identité cognitive | identité cognito | software.amazon.awssdk.services. identité cognito | 

### Différences entre SERVICE\$1ID
<a name="migration-serviceid-diffs"></a>

#### Dans la version 1
<a name="migration-serviceid-diffs-withinv1"></a>

Dans certains cas, le SERVICE\$1ID est différent entre le nom du package et l'ArtifactiD du même service. Par exemple, la ligne CloudWatch Metrics du tableau suivant indique qu'il `metrics` s'agit du SERVICE\$1ID dans le nom du package mais `cloudwatchmetrics` du SERVICE\$1ID de l'artifactID.

#### Dans la v2
<a name="migration-serviceid-diffs-withinv2"></a>

Il n'y a aucune différence entre le SERVICE\$1ID utilisé dans les noms de package et les ArtifactID.

#### Entre v1 et v2
<a name="migration-serviceid-diffs-btwv1v2"></a>

Pour la majorité des services, le SERVICE\$1ID de la version v2 est identique au SERVICE\$1ID de la version 1 dans les noms de package et dans les artifactIds. Le `cognitoedentity` SERVICE\$1ID, comme indiqué dans le tableau précédent, en est un exemple. Cependant, certains SERVICE\$1 IDs diffèrent entre les deux SDKs, comme indiqué dans le tableau suivant.

Un **SERVICE\$1ID en gras** dans l'une des colonnes v1 indique qu'il est différent du SERVICE\$1ID utilisé dans la v2.


| Nom du service | nom du package v1 | Artifactid v1 | Artifactid v2 | nom du package v2 | 
| --- | --- | --- | --- | --- | 
|  |  Tous les noms de packages commencent par `com.amazonaws.services` le nom indiqué dans la première ligne.  |  Tous les ArtifactID sont inclus dans des balises, comme indiqué dans la première ligne.  |  Tous les ArtifactID sont inclus dans des balises, comme indiqué dans la première ligne.  |  Tous les noms de packages commencent par `software.amazon.awssdk` le nom indiqué dans la première ligne.  | 
|  | 
| API Gateway | com.amazonaws.services.apigateway | <artifactId>aws-java-sdk- passerelle API</artifactId> | <artifactId>passerelle apigatway</artifactId> | software.amazon.awssdk.services.apigateway | 
| Registre des applications | apregistry | apregistry | registre des applications du catalogue de services | registre des applications du catalogue de services | 
| Application Discovery | découverte d'applications | découverte | découverte d'applications | découverte d'applications | 
| Augmented AI Runtime | durée d'antenne accrue | durée d'antenne accrue | exécution de sagemakera2i | exécution de sagemakera2i | 
| Certificate Manager | gestionnaire de certificats | acm | acm | acm | 
| CloudControl API | API de contrôle du cloud | API de contrôle du cloud | contrôle du cloud | contrôle du cloud | 
| CloudSearch | CloudSearchv2 | cloudsearch | cloudsearch | cloudsearch | 
| CloudSearch Domaine | domaine de recherche dans le cloud | recherche dans le cloud | domaine de recherche dans le cloud | domaine de recherche dans le cloud | 
| CloudWatch Événements | événements CloudWatch | événements | événements CloudWatch | événements CloudWatch | 
| CloudWatch De toute évidence | Cloudwatch, évidemment | Cloudwatch, évidemment | evidently | evidently | 
| CloudWatch Journaux | journaux | journaux | journaux de surveillance du cloud | journaux de surveillance du cloud | 
| CloudWatch Métriques | métriques | métriques de CloudWatch | cloudwatch | cloudwatch | 
| CloudWatch Rhum | rhum Cloudwatch | rhum Cloudwatch | rum | rum | 
| Fournisseur d'identité Cognito | cognitoidp | cognitoidp | fournisseur d'identité cognito | fournisseur d'identité cognito | 
| Campagne Connect | campagne connect | campagne connect | connectez les campagnes | connectez les campagnes | 
| Connect Wisdom | connecter la sagesse | connecter la sagesse | wisdom | wisdom | 
| Database Migration Service | service de migration de base de données | dms | migration de base de données | migration de base de données | 
| DataZone | zone de données | zone de données externe | zone de données | zone de données | 
| DynamoDB | dynamodbv2 | dynamodb | dynamodb | dynamodb | 
| Système de fichiers Elastic | système de fichiers élastique | efs | efs | efs | 
| Elastic Map Reduce | elasticmapreduce | emr | emr | emr | 
| Glue DataBrew | bière à colle | bière à colle | databrew | databrew | 
| Rôles Anywhere IAM | je joue des rôles partout | je joue des rôles partout | rolesanywhere | rolesanywhere | 
| Gestion des identités | gestion de l'identité | iam | iam | iam | 
| Données relatives à l'IoT | données IoT | iot | plan de données IoT | plan de données IoT | 
| Kinesis Analytics | kinesisanalytics | kinesis | kinesisanalytics | kinesisanalytics | 
| Kinesis Firehose | tuyau à incendie Kinesis | kinesis | firehose | firehose | 
| Canaux de signalisation vidéo Kinesis | canaux de signalisation vidéo kinesis | canaux de signalisation vidéo kinesis | signalisation vidéo kinesis | signalisation vidéo kinesis | 
| Lex | Lex Runtime | lex | Lex Runtime | Lex Runtime | 
| À l'affût de la vision | attention à la vision | attention à la vision | lookoutvision | lookoutvision | 
| Modernisation du mainframe | modernisation de l'ordinateur central | modernisation de l'ordinateur central | m2 | m2 | 
| Marketplace Metering | mesure du marché | service de mesure du marché | mesure du marché | mesure du marché | 
| Grafana géré | grafana géré | grafana géré | grafana | grafana | 
| Mechanical Turk | mturk | Requêteur mécanique | mturk | mturk | 
| Migration Hub Strategy Recommendations | recommandations relatives à la stratégie du pôle migratoire | recommandations relatives à la stratégie du pôle migratoire | stratégie du pôle migratoire | stratégie du pôle migratoire | 
| Studio agile | studio agile | studio agile | nimble | nimble | 
| 5G privée | 5 g privés | 5 g privés | réseaux privés | réseaux privés | 
| Prometheus | prométhée | prométhée | ampli | ampli | 
| Corbeille | corbeille | corbeille | rbin | rbin | 
| API de données Redshift | API de données Redshift | API de données Redshift | données redshift | données redshift | 
| Route 53 | Route 53 domaines | route53 | Route 53 domaines | Route 53 domaines | 
| Gestionnaire Sage Maker Edge | gestionnaire de sagemakeredge | gestionnaire de sagemakeredge | sagemakeredge | sagemakeredge | 
| Jeton de sécurité | jeton de sécurité | sts | sts | sts | 
| Migration de serveurs | migration de serveurs | migration de serveurs | sms | sms | 
| Courrier électronique simple | e-mail simple | ses | ses | ses | 
| Courrier électronique simple V2 | e-mail simple v2 | sesv2 | sesv2 | sesv2 | 
| Gestion simplifiée des systèmes | gestion simple des systèmes | ssm | ssm | ssm | 
| Flux de travail simplifié | flux de travail simple | flux de travail simple | swf | swf | 
| Step Functions | fonctions d'étape | fonctions d'étape | sfn | sfn | 

# Quelle est la différence entre la version AWS SDK pour Java 1.x et la version 2.x
<a name="migration-whats-different"></a>

Cette section décrit les principaux changements à prendre en compte lors de la conversion d'une application de la AWS SDK pour Java version 1.x à la version 2.x.

## Modification du nom du package
<a name="mig-diff-package-name-change"></a>

Un changement notable entre le SDK pour Java 1.x et le SDK pour Java 2.x est le changement de nom du package. Les noms des packages commencent par `software.amazon.awssdk` dans le SDK 2.x, alors que le SDK 1.x utilise. `com.amazonaws`

Ces mêmes noms différencient les artefacts Maven du SDK 1.x au SDK 2.x. Les artefacts Maven du SDK 2.x utilisent le GroupID, tandis que le SDK 1.x utilise le `software.amazon.awssdk` GroupID. `com.amazonaws`

Il arrive parfois que votre code nécessite une `com.amazonaws` dépendance pour un projet qui, par ailleurs, n'utilise que des artefacts du SDK 2.x. C'est par exemple le cas lorsque vous travaillez avec le côté serveur AWS Lambda. Cela a été expliqué dans la section [Configurer un projet Apache Maven](setup-project-maven.md#modules-dependencies) plus haut dans ce guide.

**Note**  
Plusieurs noms de packages contenus dans le SDK 1.x contiennent. `v2` `v2`Dans ce cas, l'utilisation de signifie généralement que le code du package est conçu pour fonctionner avec la version 2 du service.   
Comme le nom complet du package commence par`com.amazonaws`, il s'agit de composants du SDK 1.x. Voici des exemples de ces noms de packages dans le SDK 1.x :   
`com.amazonaws.services.dynamodbv2`
`com.amazonaws.retry.v2`
`com.amazonaws.services.apigatewayv2`
`com.amazonaws.services.simpleemailv2`

## Ajouter la version 2.x à votre projet
<a name="adding-v2"></a>

Maven est la méthode recommandée pour gérer les dépendances lors de l'utilisation de la version AWS SDK pour Java 2.x. Pour ajouter des composants de la version 2.x à votre projet, mettez à jour votre `pom.xml` fichier avec une dépendance au SDK. 

**Example**  

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

<dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>dynamodb</artifactId>
    </dependency>
</dependencies>
```

Vous pouvez également [utiliser les versions 1.x et 2.x lorsque side-by-side](migration-side-by-side.md) vous migrez votre projet vers la version 2.x.

## Immuable POJOs
<a name="immutable-classes"></a>

Les clients et les objets de demande et de réponse d'opération sont désormais immuables et ne peuvent pas être modifiés après création. Pour réutiliser une variable de demande ou de réponse, vous devez créer un objet pour l'attribuer.

**Example de mise à jour d'un objet de demande dans la version 1.x**  

```
DescribeAlarmsRequest request = new DescribeAlarmsRequest();
DescribeAlarmsResult response = cw.describeAlarms(request);

request.setNextToken(response.getNextToken());
```

**Example de mise à jour d'un objet de demande dans la version 2.x**  

```
DescribeAlarmsRequest request = DescribeAlarmsRequest.builder().build();
DescribeAlarmsResponse response = cw.describeAlarms(request);

request = DescribeAlarmsRequest.builder()
        .nextToken(response.nextToken())
        .build();
```

## Méthodes Setter et Getter
<a name="setter-getter-methods"></a>

Dans la version AWS SDK pour Java 2.x, les noms des méthodes setter n'incluent pas le préfixe `set` or`with`. Par exemple, `*.withEndpoint()` c'est maintenant`*.endpoint()`.

Les noms des méthodes Getter n'utilisent pas le `get` préfixe.

**Example de l'utilisation des méthodes setter dans la version 1.x**  

```
AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        		.withRegion("us-east-1")
        		.build();
```

**Example de l'utilisation des méthodes setter dans la version 2.x**  

```
DynamoDbClient client = DynamoDbClient.builder()
        		.region(Region.US_EAST_1)
        		.build();
```

**Example de l'utilisation des méthodes getter dans la version 1.x**  

```
String token = request.getNextToken();
```

**Example de l'utilisation des méthodes getter dans la version 2.x**  

```
String token = request.nextToken();
```

## Noms des classes de modèles
<a name="model-classname-changes"></a>

Les noms des classes de modèles qui représentent les réponses des services se terminent par `Response` la version 2 au lieu de `Result` celle utilisée par la version 1.

**Example de noms de classes qui représentent une réponse dans la version 1**  

```
CreateApiKeyResult
AllocateAddressResult
```

**Example de noms de classes qui représentent une réponse dans la version 2**  

```
CreateApiKeyResponse
AllocateAddressResponse
```

## État de migration des bibliothèques et des utilitaires
<a name="migration-libraries-utilities"></a>

### SDK pour bibliothèques et utilitaires Java
<a name="migration-java-sdk-libs-utils"></a>

Le tableau suivant répertorie l'état de migration des bibliothèques et des utilitaires pour le SDK for Java. 


| Nom de la version 1.12.x | Nom de la version 2.x | Depuis la version 2.x | 
| --- | --- | --- | 
| Dynamo DBMapper | [DynamoDbEnhancedClient](dynamodb-enhanced-client.md) | 2.12.0 | 
| Programmes d’attente | [Programmes d'attente](waiters.md) | 2.15.0 | 
| CloudFrontUrlSigner, CloudFrontCookieSigner | [CloudFrontUtilities](https://aws.amazon.com/blogs/developer/amazon-cloudfront-signed-urls-and-cookies-are-now-supported-in-aws-sdk-for-java-2-x/) | 2,18,33 | 
| TransferManager | [S3TransferManager](transfer-manager.md) | 2.19.0 | 
| Client de métadonnées EC2 |  [Client de métadonnées EC2](examples-ec2-IMDS.md)  | 2,19,29 | 
| Analyseur d'URI S3 |  [Analyseur d'URI S3](https://aws.amazon.com/blogs/devops/s3-uri-parsing-is-now-available-in-aws-sdk-for-java-2-x/)  | 2,20,41 | 
| Générateur de politiques IAM | [Générateur de politiques IAM](feature-iam-policy-builder.md) | 2,20,126 | 
| Notifications d’événements S3 | [Notifications d'événements S3](examples-s3-event-notifications.md#s3-event-notification-read) | 2,25,11  | 
| Mise en mémoire tampon côté client Amazon SQS | [API de traitement automatique des demandes par lots pour Amazon SQS](sqs-auto-batch.md) | 2.28.0 | 
| Écouteurs de progression | Écouteurs de progression | [pas encore publié](https://github.com/aws/aws-sdk-java-v2/issues/25) | 

### Bibliothèques associées
<a name="migration-other-sdks"></a>

Le tableau suivant répertorie les bibliothèques publiées séparément mais compatibles avec le SDK for Java 2.x.


| Nom utilisé avec la version 2.x du SDK pour Java | Depuis la version | 
| --- | --- | 
|  [Client de chiffrement Amazon S3](https://docs.aws.amazon.com/amazon-s3-encryption-client/latest/developerguide/what-is-s3-encryption-client.html)  |  3,0.0 1  | 
| [AWS SDK de chiffrement de base de données pour DynamoDB](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html) | 3,0.0 2 | 

#### 1 client de chiffrement Amazon S3
<a name="migration-s3-encryption-sdk"></a>

Le client de chiffrement pour Amazon S3 est disponible en utilisant la dépendance Maven suivante.

```
<dependency>
    <groupId>software.amazon.encryption.s3</groupId>
    <artifactId>amazon-s3-encryption-client-java</artifactId>
    <version>3.x</version>
</dependency>
```

#### 2 SDK AWS de chiffrement de base de données pour DynamoDB
<a name="migration-ddb-encryption-sdk"></a>

Le SDK AWS de chiffrement de base de données pour DynamoDB est disponible pour la version 2 en utilisant la dépendance Maven suivante.

```
<dependency> 
    <groupId>software.amazon.cryptography</groupId>
    <artifactId>aws-database-encryption-sdk-dynamodb</artifactId>
    <version>3.x</version>
</dependency>
```

Les informations sur la bibliothèque de chiffrement pour DynamoDB qui fonctionne avec la version v1 du SDK Java sont disponibles dans le Guide du développeur du SDK de [chiffrement de base AWS de données (](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/java.html)appelé Amazon *DynamoDB* Encryption Client for Java) et dans. [GitHub](https://github.com/aws/aws-dynamodb-encryption-java)

[Pour plus d'informations sur la bibliothèque de chiffrement DynamoDB compatible avec la version 2 du SDK Java, consultez le guide du développeur du SDK de [chiffrement de base de données et AWS le code](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java.html) source. GitHub](https://github.com/aws/aws-database-encryption-sdk-dynamodb)

Les informations de migration relatives à la bibliothèque de chiffrement sont disponibles dans le [Guide du développeur du SDK AWS de chiffrement de base](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java-migrate.html) de données.

### Détails de migration pour les bibliothèques et les utilitaires
<a name="migrate-libs-utils-details"></a>
+ [Gestionnaire des transferts](migration-s3-transfer-manager.md)
+ [Utilitaire de métadonnées EC2](migration-imds.md)
+ [CloudFrontprésignant](migration-cloudfront-presigning.md)
+ [Analyse d'URI S3](migration-s3-uri-parser.md)
+ [DynamoDB mapping/document APIs](migration-ddb-mapper.md) 
+ [Générateur de politiques IAM](migration-iam-policy-builder.md)
+ [Notifications d'événements S3](migration-s3-event-notification.md)
+ Publication de métriques dans le SDK (documentation [1.x, documentation](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/generating-sdk-metrics.html) [2.x](metrics.md))

# Modifications du client
<a name="migration-clients"></a>

## Créateurs de clients
<a name="client-builder"></a>

Vous devez créer tous les clients à l'aide de la méthode du générateur client. Les constructeurs ne sont plus disponibles.

**Example de la création d'un client dans la version 1.x**  

```
AmazonDynamoDB ddbClient = AmazonDynamoDBClientBuilder.defaultClient();
AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient();
```

**Example de la création d'un client dans la version 2.x**  

```
DynamoDbClient ddbClient = DynamoDbClient.create();
DynamoDbClient ddbClient = DynamoDbClient.builder().build();
```

## Noms des classes de clients
<a name="class-names"></a>

Tous les noms de classes de clients sont désormais entièrement encadrés par un chameau et ne sont plus préfixés par. `Amazon` Ces modifications correspondent aux noms utilisés dans l' AWS CLI.

**Example des noms de classe dans la version 1.x**  

```
AmazonDynamoDB
AWSACMPCAAsyncClient
```

**Example des noms de classe dans la version 2.x**  

```
DynamoDbClient
AcmAsyncClient
```


**Changements de nom de classe du client**  

| Client 1.x | Client 2.x | 
| --- | --- | 
| com.amazonaws.services.acmpca.AWSACMPCAAsyncClient | software.amazon.awssdk.services.acm.AcmAsyncClient | 
| com.amazonaws.services.acmpca.AWSACMPCAClient | software.amazon.awssdk.services.acm.AcmClient | 
| com.amazonaws.services.alexaforbusiness.AmazonAlexaForBusinessAsyncClient | software.amazon.awssdk.services.alexaforbusiness.AlexaForBusinessAsyncClient | 
| com.amazonaws.services.alexaforbusiness.AmazonAlexaForBusinessClient | software.amazon.awssdk.services.alexaforbusiness.AlexaForBusinessClient | 
| com.amazonaws.services.apigateway.AmazonApiGatewayAsyncClient | software.amazon.awssdk.services.apigateway.ApiGatewayAsyncClient | 
| com.amazonaws.services.apigateway.AmazonApiGatewayClient | software.amazon.awssdk.services.apigateway.ApiGatewayClient | 
| com.amazonaws.services.applicationautoscaling.AWSApplicationAutoScalingAsyncClient | software.amazon.awssdk.services.applicationautoscaling.ApplicationAutoScalingAsyncClient | 
| com.amazonaws.services.applicationautoscaling.AWSApplicationAutoScalingClient | software.amazon.awssdk.services.applicationautoscaling.ApplicationAutoScalingClient | 
| com.amazonaws.services.applicationdiscovery.AWSApplicationDiscoveryAsyncClient | software.amazon.awssdk.services.applicationdiscovery.ApplicationDiscoveryAsyncClient | 
| com.amazonaws.services.applicationdiscovery.AWSApplicationDiscoveryClient | software.amazon.awssdk.services.applicationdiscovery.ApplicationDiscoveryClient | 
| com.amazonaws.services.appstream.AmazonAppStreamAsyncClient | software.amazon.awssdk.services.appstream.AppStreamAsyncClient | 
| com.amazonaws.services.appstream.AmazonAppStreamClient | software.amazon.awssdk.services.appstream.AppStreamClient | 
| com.amazonaws.services.appsync.AWSAppSyncAsyncClient | software.amazon.awssdk.services.appsync.AppSyncAsyncClient | 
| com.amazonaws.services.appsync.AWSAppSyncClient | software.amazon.awssdk.services.appsync.AppSyncClient | 
| com.amazonaws.services.athena.AmazonAthenaAsyncClient | software.amazon.awssdk.services.athena.AthenaAsyncClient | 
| com.amazonaws.services.athena.AmazonAthenaClient | software.amazon.awssdk.services.athena.AthenaClient | 
| com.amazonaws.services.autoscaling.AmazonAutoScalingAsyncClient | software.amazon.awssdk.services.autoscaling.AutoScalingAsyncClient | 
| com.amazonaws.services.autoscaling.AmazonAutoScalingClient | software.amazon.awssdk.services.autoscaling.AutoScalingClient | 
| com.amazonaws.services.autoscalingplans.AWSAutoScalingPlansAsyncClient | software.amazon.awssdk.services.autoscalingplans.AutoScalingPlansAsyncClient | 
| com.amazonaws.services.autoscalingplans.AWSAutoScalingPlansClient | software.amazon.awssdk.services.autoscalingplans.AutoScalingPlansClient | 
| com.amazonaws.services.batch.AWSBatchAsyncClient | software.amazon.awssdk.services.batch.BatchAsyncClient | 
| com.amazonaws.services.batch.AWSBatchClient | software.amazon.awssdk.services.batch.BatchClient | 
| com.amazonaws.services.budgets.AWSBudgetsAsyncClient | software.amazon.awssdk.services.budgets.BudgetsAsyncClient | 
| com.amazonaws.services.budgets.AWSBudgetsClient | software.amazon.awssdk.services.budgets.BudgetsClient | 
| com.amazonaws.services.certificatemanager.AWSCertificateManagerAsyncClient | software.amazon.awssdk.services.acm.AcmAsyncClient | 
| com.amazonaws.services.certificatemanager.AWSCertificateManagerClient | software.amazon.awssdk.services.acm.AcmClient | 
| com.amazonaws.services.cloud9.AWSCloud9AsyncClient | software.amazon.awssdk.services.cloud9.Cloud9AsyncClient | 
| com.amazonaws.services.cloud9.AWSCloud9Client | software.amazon.awssdk.services.cloud9.Cloud9Client | 
| com.amazonaws.services.clouddirectory.AmazonCloudDirectoryAsyncClient | software.amazon.awssdk.services.clouddirectory.CloudDirectoryAsyncClient | 
| com.amazonaws.services.clouddirectory.AmazonCloudDirectoryClient | software.amazon.awssdk.services.clouddirectory.CloudDirectoryClient | 
| com.amazonaws.services.cloudformation.AmazonCloudFormationAsyncClient | software.amazon.awssdk.services.cloudformation.CloudFormationAsyncClient | 
| com.amazonaws.services.cloudformation.AmazonCloudFormationClient | software.amazon.awssdk.services.cloudformation.CloudFormationClient | 
| com.amazonaws.services.cloudfront.AmazonCloudFrontAsyncClient | software.amazon.awssdk.services.cloudfront.CloudFrontAsyncClient | 
| com.amazonaws.services.cloudfront.AmazonCloudFrontClient | software.amazon.awssdk.services.cloudfront.CloudFrontClient | 
| com.amazonaws.services.cloudhsm.AWSCloudHSMAsyncClient | software.amazon.awssdk.services.cloudhsm.CloudHsmAsyncClient | 
| com.amazonaws.services.cloudhsm.AWSCloudHSMClient | software.amazon.awssdk.services.cloudhsm.CloudHsmClient | 
| com.amazonaws.services.cloudhsmv2.AWSCloudHSMV2AsyncClient | software.amazon.awssdk.services.cloudhsmv2.CloudHsmV2AsyncClient | 
| com.amazonaws.services.cloudhsmv2.AWSCloudHSMV2Client | software.amazon.awssdk.services.cloudhsmv2.CloudHsmV2Client | 
| com.amazonaws.services.cloudsearchdomain.AmazonCloudSearchDomainAsyncClient | software.amazon.awssdk.services.cloudsearchdomain.CloudSearchDomainAsyncClient | 
| com.amazonaws.services.cloudsearchdomain.AmazonCloudSearchDomainClient | software.amazon.awssdk.services.cloudsearchdomain.CloudSearchDomainClient | 
| com.amazonaws.services.cloudsearchv2.AmazonCloudSearchAsyncClient | software.amazon.awssdk.services.cloudsearch.CloudSearchAsyncClient | 
| com.amazonaws.services.cloudsearchv2.AmazonCloudSearchClient | software.amazon.awssdk.services.cloudsearch.CloudSearchClient | 
| com.amazonaws.services.cloudtrail.AWSCloudTrailAsyncClient | software.amazon.awssdk.services.cloudtrail.CloudTrailAsyncClient | 
| com.amazonaws.services.cloudtrail.AWSCloudTrailClient | software.amazon.awssdk.services.cloudtrail.CloudTrailClient | 
| com.amazonaws.services.cloudwatch.AmazonCloudWatchAsyncClient | software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient | 
| com.amazonaws.services.cloudwatch.AmazonCloudWatchClient | software.amazon.awssdk.services.cloudwatch.CloudWatchClient | 
| com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsAsyncClient | software.amazon.awssdk.services.cloudwatchevents.CloudWatchEventsAsyncClient | 
| com.amazonaws.services.cloudwatchevents.AmazonCloudWatchEventsClient | software.amazon.awssdk.services.cloudwatchevents.CloudWatchEventsClient | 
| com.amazonaws.services.codebuild.AWSCodeBuildAsyncClient | software.amazon.awssdk.services.codebuild.CodeBuildAsyncClient | 
| com.amazonaws.services.codebuild.AWSCodeBuildClient | software.amazon.awssdk.services.codebuild.CodeBuildClient | 
| com.amazonaws.services.codecommit.AWSCodeCommitAsyncClient | software.amazon.awssdk.services.codecommit.CodeCommitAsyncClient | 
| com.amazonaws.services.codecommit.AWSCodeCommitClient | software.amazon.awssdk.services.codecommit.CodeCommitClient | 
| com.amazonaws.services.codedeploy.AmazonCodeDeployAsyncClient | software.amazon.awssdk.services.codedeploy.CodeDeployAsyncClient | 
| com.amazonaws.services.codedeploy.AmazonCodeDeployClient | software.amazon.awssdk.services.codedeploy.CodeDeployClient | 
| com.amazonaws.services.codepipeline.AWSCodePipelineAsyncClient | software.amazon.awssdk.services.codepipeline.CodePipelineAsyncClient | 
| com.amazonaws.services.codepipeline.AWSCodePipelineClient | software.amazon.awssdk.services.codepipeline.CodePipelineClient | 
| com.amazonaws.services.codestar.AWSCodeStarAsyncClient | software.amazon.awssdk.services.codestar.CodeStarAsyncClient | 
| com.amazonaws.services.codestar.AWSCodeStarClient | software.amazon.awssdk.services.codestar.CodeStarClient | 
| com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityAsyncClient | software.amazon.awssdk.services.cognitoidentity.CognitoIdentityAsyncClient | 
| com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient | software.amazon.awssdk.services.cognitoidentity.CognitoIdentityClient | 
| com.amazonaws.services.cognitoidp.AWSCognitoIdentityProviderAsyncClient | software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderAsyncClient | 
| com.amazonaws.services.cognitoidp.AWSCognitoIdentityProviderClient | software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient | 
| com.amazonaws.services.cognitosync.AmazonCognitoSyncAsyncClient | software.amazon.awssdk.services.cognitosync.CognitoSyncAsyncClient | 
| com.amazonaws.services.cognitosync.AmazonCognitoSyncClient | software.amazon.awssdk.services.cognitosync.CognitoSyncClient | 
| com.amazonaws.services.comprehend.AmazonComprehendAsyncClient | software.amazon.awssdk.services.comprehend.ComprehendAsyncClient | 
| com.amazonaws.services.comprehend.AmazonComprehendClient | software.amazon.awssdk.services.comprehend.ComprehendClient | 
| com.amazonaws.services.config.AmazonConfigAsyncClient | software.amazon.awssdk.services.config.ConfigAsyncClient | 
| com.amazonaws.services.config.AmazonConfigClient | software.amazon.awssdk.services.config.ConfigClient | 
| com.amazonaws.services.connect.AmazonConnectAsyncClient | software.amazon.awssdk.services.connect.ConnectAsyncClient | 
| com.amazonaws.services.connect.AmazonConnectClient | software.amazon.awssdk.services.connect.ConnectClient | 
| com.amazonaws.services.costandusagereport.AWSCostAndUsageReportAsyncClient | software.amazon.awssdk.services.costandusagereport.CostAndUsageReportAsyncClient | 
| com.amazonaws.services.costandusagereport.AWSCostAndUsageReportClient | software.amazon.awssdk.services.costandusagereport.CostAndUsageReportClient | 
| com.amazonaws.services.costexplorer.AWSCostExplorerAsyncClient | software.amazon.awssdk.services.costexplorer.CostExplorerAsyncClient | 
| com.amazonaws.services.costexplorer.AWSCostExplorerClient | software.amazon.awssdk.services.costexplorer.CostExplorerClient | 
| com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationServiceAsyncClient | software.amazon.awssdk.services.databasemigration.DatabaseMigrationAsyncClient | 
| com.amazonaws.services.databasemigrationservice.AWSDatabaseMigrationServiceClient | software.amazon.awssdk.services.databasemigration.DatabaseMigrationClient | 
| com.amazonaws.services.datapipeline.DataPipelineAsyncClient | software.amazon.awssdk.services.datapipeline.DataPipelineAsyncClient | 
| com.amazonaws.services.datapipeline.DataPipelineClient | software.amazon.awssdk.services.datapipeline.DataPipelineAsyncClient | 
| com.amazonaws.services.dax.AmazonDaxAsyncClient | software.amazon.awssdk.services.dax.DaxAsyncClient | 
| com.amazonaws.services.dax.AmazonDaxClient | software.amazon.awssdk.services.dax.DaxClient | 
| com.amazonaws.services.devicefarm.AWSDeviceFarmAsyncClient | software.amazon.awssdk.services.devicefarm.DeviceFarmAsyncClient | 
| com.amazonaws.services.devicefarm.AWSDeviceFarmClient | software.amazon.awssdk.services.devicefarm.DeviceFarmClient | 
| com.amazonaws.services.directconnect.AmazonDirectConnectAsyncClient | software.amazon.awssdk.services.directconnect.DirectConnectAsyncClient | 
| com.amazonaws.services.directconnect.AmazonDirectConnectClient | software.amazon.awssdk.services.directconnect.DirectConnectClient | 
| com.amazonaws.services.directory.AWSDirectoryServiceAsyncClient | software.amazon.awssdk.services.directory.DirectoryAsyncClient | 
| com.amazonaws.services.directory.AWSDirectoryServiceClient | software.amazon.awssdk.services.directory.DirectoryClient | 
| com.amazonaws.services.dlm.AmazonDLMAsyncClient | software.amazon.awssdk.services.dlm.DlmAsyncClient | 
| com.amazonaws.services.dlm.AmazonDLMClient | software.amazon.awssdk.services.dlm.DlmClient | 
| com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClient | software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient | 
| com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient | software.amazon.awssdk.services.dynamodb.DynamoDbClient | 
| com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreamsAsyncClient | software.amazon.awssdk.services.dynamodb.streams.DynamoDbStreamsAsyncClient | 
| com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreamsClient | software.amazon.awssdk.services.dynamodb.streams.DynamoDbStreamsClient | 
| com.amazonaws.services.ec2.AmazonEC2AsyncClient | software.amazon.awssdk.services.ec2.Ec2AsyncClient | 
| com.amazonaws.services.ec2.AmazonEC2Client | software.amazon.awssdk.services.ec2.Ec2Client | 
| com.amazonaws.services.ecr.AmazonECRAsyncClient | software.amazon.awssdk.services.ecr.EcrAsyncClient | 
| com.amazonaws.services.ecr.AmazonECRClient | software.amazon.awssdk.services.ecr.EcrClient | 
| com.amazonaws.services.ecs.AmazonECSAsyncClient | software.amazon.awssdk.services.ecs.EcsAsyncClient | 
| com.amazonaws.services.ecs.AmazonECSClient | software.amazon.awssdk.services.ecs.EcsClient | 
| com.amazonaws.services.eks.AmazonEKSAsyncClient | software.amazon.awssdk.services.eks.EksAsyncClient | 
| com.amazonaws.services.eks.AmazonEKSClient | software.amazon.awssdk.services.eks.EksClient | 
| com.amazonaws.services.elasticache.AmazonElastiCacheAsyncClient | software.amazon.awssdk.services.elasticache.ElastiCacheAsyncClient | 
| com.amazonaws.services.elasticache.AmazonElastiCacheClient | software.amazon.awssdk.services.elasticache.ElastiCacheClient | 
| com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkAsyncClient | software.amazon.awssdk.services.elasticbeanstalk.ElasticBeanstalkAsyncClient | 
| com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkClient | software.amazon.awssdk.services.elasticbeanstalk.ElasticBeanstalkClient | 
| com.amazonaws.services.elasticfilesystem.AmazonElasticFileSystemAsyncClient | software.amazon.awssdk.services.efs.EfsAsyncClient | 
| com.amazonaws.services.elasticfilesystem.AmazonElasticFileSystemClient | software.amazon.awssdk.services.efs.EfsClient | 
| com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingAsyncClient | software.amazon.awssdk.services.elasticloadbalancing.ElasticLoadBalancingAsyncClient | 
| com.amazonaws.services.elasticloadbalancing.AmazonElasticLoadBalancingClient | software.amazon.awssdk.services.elasticloadbalancing.ElasticLoadBalancingClient | 
| com.amazonaws.services.elasticloadbalancingv2.AmazonElasticLoadBalancingAsyncClient | software.amazon.awssdk.services.elasticloadbalancingv2.ElasticLoadBalancingV2AsyncClient | 
| com.amazonaws.services.elasticloadbalancingv2.AmazonElasticLoadBalancingClient | software.amazon.awssdk.services.elasticloadbalancingv2.ElasticLoadBalancingV2Client | 
| com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceAsyncClient | software.amazon.awssdk.services.emr.EmrAsyncClient | 
| com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClient | software.amazon.awssdk.services.emr.EmrClient | 
| com.amazonaws.services.elasticsearch.AWSElasticsearchAsyncClient | software.amazon.awssdk.services.elasticsearch.ElasticsearchAsyncClient | 
| com.amazonaws.services.elasticsearch.AWSElasticsearchClient | software.amazon.awssdk.services.elasticsearch.ElasticsearchClient | 
| com.amazonaws.services.elastictranscoder.AmazonElasticTranscoderAsyncClient | software.amazon.awssdk.services.elastictranscoder.ElasticTranscoderAsyncClient | 
| com.amazonaws.services.elastictranscoder.AmazonElasticTranscoderClient | software.amazon.awssdk.services.elastictranscoder.ElasticTranscoderClient | 
| com.amazonaws.services.fms.AWSFMSAsyncClient | software.amazon.awssdk.services.fms.FmsAsyncClient | 
| com.amazonaws.services.fms.AWSFMSClient | software.amazon.awssdk.services.fms.FmsClient | 
| com.amazonaws.services.gamelift.AmazonGameLiftAsyncClient | software.amazon.awssdk.services.gamelift.GameLiftAsyncClient | 
| com.amazonaws.services.gamelift.AmazonGameLiftClient | software.amazon.awssdk.services.gamelift.GameLiftClient | 
| com.amazonaws.services.glacier.AmazonGlacierAsyncClient | software.amazon.awssdk.services.glacier.GlacierAsyncClient | 
| com.amazonaws.services.glacier.AmazonGlacierClient | software.amazon.awssdk.services.glacier.GlacierClient | 
| com.amazonaws.services.glue.AWSGlueAsyncClient | software.amazon.awssdk.services.glue.GlueAsyncClient | 
| com.amazonaws.services.glue.AWSGlueClient | software.amazon.awssdk.services.glue.GlueClient | 
| com.amazonaws.services.greengrass.AWSGreengrassAsyncClient | software.amazon.awssdk.services.greengrass.GreengrassAsyncClient | 
| com.amazonaws.services.greengrass.AWSGreengrassClient | software.amazon.awssdk.services.greengrass.GreengrassClient | 
| com.amazonaws.services.guardduty.AmazonGuardDutyAsyncClient | software.amazon.awssdk.services.guardduty.GuardDutyAsyncClient | 
| com.amazonaws.services.guardduty.AmazonGuardDutyClient | software.amazon.awssdk.services.guardduty.GuardDutyClient | 
| com.amazonaws.services.health.AWSHealthAsyncClient | software.amazon.awssdk.services.health.HealthAsyncClient | 
| com.amazonaws.services.health.AWSHealthClient | software.amazon.awssdk.services.health.HealthClient | 
| com.amazonaws.services.identitymanagement.AmazonIdentityManagementAsyncClient | software.amazon.awssdk.services.iam.IamAsyncClient | 
| com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient | software.amazon.awssdk.services.iam.IamClient | 
| com.amazonaws.services.importexport.AmazonImportExportAsyncClient | Deprecated | 
| com.amazonaws.services.importexport.AmazonImportExportClient | Deprecated | 
| com.amazonaws.services.inspector.AmazonInspectorAsyncClient | software.amazon.awssdk.services.inspector.InspectorAsyncClient | 
| com.amazonaws.services.inspector.AmazonInspectorClient | software.amazon.awssdk.services.inspector.InspectorClient | 
| com.amazonaws.services.iot.AWSIotAsyncClient | software.amazon.awssdk.services.iot.IotAsyncClient | 
| com.amazonaws.services.iot.AWSIotClient | software.amazon.awssdk.services.iot.IotClient | 
| com.amazonaws.services.iot1clickdevices.AWSIoT1ClickDevicesAsyncClient | software.amazon.awssdk.services.iot1clickdevices.Iot1ClickDevicesAsyncClient | 
| com.amazonaws.services.iot1clickdevices.AWSIoT1ClickDevicesClient | software.amazon.awssdk.services.iot1clickdevices.Iot1ClickDevicesClient | 
| com.amazonaws.services.iot1clickprojects.AWSIoT1ClickProjectsAsyncClient | software.amazon.awssdk.services.iot1clickprojects.Iot1ClickProjectsAsyncClient | 
| com.amazonaws.services.iot1clickprojects.AWSIoT1ClickProjectsClient | software.amazon.awssdk.services.iot1clickprojects.Iot1ClickProjectsClient | 
| com.amazonaws.services.iotanalytics.AWSIoTAnalyticsAsyncClient | software.amazon.awssdk.services.iotanalytics.IotAnalyticsAsyncClient | 
| com.amazonaws.services.iotanalytics.AWSIoTAnalyticsClient | software.amazon.awssdk.services.iotanalytics.IotAnalyticsClient | 
| com.amazonaws.services.iotdata.AWSIotDataAsyncClient | software.amazon.awssdk.services.iotdata.IotDataAsyncClient | 
| com.amazonaws.services.iotdata.AWSIotDataClient | software.amazon.awssdk.services.iotdata.IotDataClient | 
| com.amazonaws.services.iotjobsdataplane.AWSIoTJobsDataPlaneAsyncClient | software.amazon.awssdk.services.iotdataplane.IotDataPlaneAsyncClient | 
| com.amazonaws.services.iotjobsdataplane.AWSIoTJobsDataPlaneClient | software.amazon.awssdk.services.iotdataplane.IotDataPlaneClient | 
| com.amazonaws.services.kinesis.AmazonKinesisAsyncClient | software.amazon.awssdk.services.kinesis.KinesisAsyncClient | 
| com.amazonaws.services.kinesis.AmazonKinesisClient | software.amazon.awssdk.services.kinesis.KinesisClient | 
| com.amazonaws.services.kinesisanalytics.AmazonKinesisAnalyticsAsyncClient | software.amazon.awssdk.services.kinesisanalytics.KinesisAnalyticsAsyncClient | 
| com.amazonaws.services.kinesisanalytics.AmazonKinesisAnalyticsClient | software.amazon.awssdk.services.kinesisanalytics.KinesisAnalyticsClient | 
| com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseAsyncClient | software.amazon.awssdk.services.firehose.FirehoseAsyncClient | 
| com.amazonaws.services.kinesisfirehose.AmazonKinesisFirehoseClient | software.amazon.awssdk.services.firehose.FirehoseClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoArchivedMediaAsyncClient | software.amazon.awssdk.services.kinesisvideoarchivedmedia.KinesisVideoArchivedMediaAsyncClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoArchivedMediaClient | software.amazon.awssdk.services.kinesisvideoarchivedmedia.KinesisVideoArchivedMediaClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoAsyncClient | software.amazon.awssdk.services.kinesisvideo.KinesisVideoAsyncClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoClient | software.amazon.awssdk.services.kinesisvideo.KinesisVideoClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoMediaAsyncClient | software.amazon.awssdk.services.kinesisvideomedia.KinesisVideoMediaAsyncClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoMediaClient | software.amazon.awssdk.services.kinesisvideomedia.KinesisVideoMediaClient | 
| com.amazonaws.services.kinesisvideo.AmazonKinesisVideoPutMediaClient | Non pris en charge  | 
| com.amazonaws.services.kms.AWSKMSAsyncClient | software.amazon.awssdk.services.kms.KmsAsyncClient | 
| com.amazonaws.services.kms.AWSKMSClient | software.amazon.awssdk.services.kms.KmsClient | 
| com.amazonaws.services.lambda.AWSLambdaAsyncClient | software.amazon.awssdk.services.lambda.LambdaAsyncClient | 
| com.amazonaws.services.lambda.AWSLambdaClient | software.amazon.awssdk.services.lambda.LambdaClient | 
| com.amazonaws.services.lexmodelbuilding.AmazonLexModelBuildingAsyncClient | software.amazon.awssdk.services.lexmodelbuilding.LexModelBuildingAsyncClient | 
| com.amazonaws.services.lexmodelbuilding.AmazonLexModelBuildingClient | software.amazon.awssdk.services.lexmodelbuilding.LexModelBuildingClient | 
| com.amazonaws.services.lexruntime.AmazonLexRuntimeAsyncClient | software.amazon.awssdk.services.lexruntime.LexRuntimeAsyncClient | 
| com.amazonaws.services.lexruntime.AmazonLexRuntimeClient | software.amazon.awssdk.services.lexruntime.LexRuntimeClient | 
| com.amazonaws.services.lightsail.AmazonLightsailAsyncClient | software.amazon.awssdk.services.lightsail.LightsailAsyncClient | 
| com.amazonaws.services.lightsail.AmazonLightsailClient | software.amazon.awssdk.services.lightsail.LightsailClient | 
| com.amazonaws.services.logs.AWSLogsAsyncClient | software.amazon.awssdk.services.logs.LogsAsyncClient | 
| com.amazonaws.services.logs.AWSLogsClient | software.amazon.awssdk.services.logs.LogsClient | 
| com.amazonaws.services.machinelearning.AmazonMachineLearningAsyncClient | software.amazon.awssdk.services.machinelearning.MachineLearningAsyncClient | 
| com.amazonaws.services.machinelearning.AmazonMachineLearningClient | software.amazon.awssdk.services.machinelearning.MachineLearningClient | 
| com.amazonaws.services.macie.AmazonMacieAsyncClient | software.amazon.awssdk.services.macie.MacieAsyncClient | 
| com.amazonaws.services.macie.AmazonMacieClient | software.amazon.awssdk.services.macie.MacieClient | 
| com.amazonaws.services.marketplacecommerceanalytics.AWSMarketplaceCommerceAnalyticsAsyncClient | software.amazon.awssdk.services.marketplacecommerceanalytics.MarketplaceCommerceAnalyticsAsyncClient | 
| com.amazonaws.services.marketplacecommerceanalytics.AWSMarketplaceCommerceAnalyticsClient | software.amazon.awssdk.services.marketplacecommerceanalytics.MarketplaceCommerceAnalyticsClient | 
| com.amazonaws.services.marketplaceentitlement.AWSMarketplaceEntitlementAsyncClient | software.amazon.awssdk.services.marketplaceentitlement.MarketplaceEntitlementAsyncClient | 
| com.amazonaws.services.marketplaceentitlement.AWSMarketplaceEntitlementClient | software.amazon.awssdk.services.marketplaceentitlement.MarketplaceEntitlementClient | 
| com.amazonaws.services.marketplacemetering.AWSMarketplaceMeteringAsyncClient | software.amazon.awssdk.services.marketplacemetering.MarketplaceMeteringAsyncClient | 
| com.amazonaws.services.marketplacemetering.AWSMarketplaceMeteringClient | software.amazon.awssdk.services.marketplacemetering.MarketplaceMeteringClient | 
| com.amazonaws.services.mediaconvert.AWSMediaConvertAsyncClient | software.amazon.awssdk.services.mediaconvert.MediaConvertAsyncClient | 
| com.amazonaws.services.mediaconvert.AWSMediaConvertClient | software.amazon.awssdk.services.mediaconvert.MediaConvertClient | 
| com.amazonaws.services.medialive.AWSMediaLiveAsyncClient | software.amazon.awssdk.services.medialive.MediaLiveAsyncClient | 
| com.amazonaws.services.medialive.AWSMediaLiveClient | software.amazon.awssdk.services.medialive.MediaLiveClient | 
| com.amazonaws.services.mediapackage.AWSMediaPackageAsyncClient | software.amazon.awssdk.services.mediapackage.MediaPackageAsyncClient | 
| com.amazonaws.services.mediapackage.AWSMediaPackageClient | software.amazon.awssdk.services.mediapackage.MediaPackageClient | 
| com.amazonaws.services.mediastore.AWSMediaStoreAsyncClient | software.amazon.awssdk.services.mediastore.MediaStoreAsyncClient | 
| com.amazonaws.services.mediastore.AWSMediaStoreClient | software.amazon.awssdk.services.mediastore.MediaStoreClient | 
| com.amazonaws.services.mediastoredata.AWSMediaStoreDataAsyncClient | software.amazon.awssdk.services.mediastoredata.MediaStoreDataAsyncClient | 
| com.amazonaws.services.mediastoredata.AWSMediaStoreDataClient | software.amazon.awssdk.services.mediastoredata.MediaStoreDataClient | 
| com.amazonaws.services.mediatailor.AWSMediaTailorAsyncClient | software.amazon.awssdk.services.mediatailor.MediaTailorAsyncClient | 
| com.amazonaws.services.mediatailor.AWSMediaTailorClient | software.amazon.awssdk.services.mediatailor.MediaTailorClient | 
| com.amazonaws.services.migrationhub.AWSMigrationHubAsyncClient | software.amazon.awssdk.services.migrationhub.MigrationHubAsyncClient | 
| com.amazonaws.services.migrationhub.AWSMigrationHubClient | software.amazon.awssdk.services.migrationhub.MigrationHubClient | 
| com.amazonaws.services.mobile.AWSMobileAsyncClient | software.amazon.awssdk.services.mobile.MobileAsyncClient | 
| com.amazonaws.services.mobile.AWSMobileClient | software.amazon.awssdk.services.mobile.MobileClient | 
| com.amazonaws.services.mq.AmazonMQAsyncClient | software.amazon.awssdk.services.mq.MqAsyncClient | 
| com.amazonaws.services.mq.AmazonMQClient | software.amazon.awssdk.services.mq.MqClient | 
| com.amazonaws.services.mturk.AmazonMTurkAsyncClient | software.amazon.awssdk.services.mturk.MTurkAsyncClient | 
| com.amazonaws.services.mturk.AmazonMTurkClient | software.amazon.awssdk.services.mturk.MTurkClient | 
| com.amazonaws.services.neptune.AmazonNeptuneAsyncClient | software.amazon.awssdk.services.neptune.NeptuneAsyncClient | 
| com.amazonaws.services.neptune.AmazonNeptuneClient | software.amazon.awssdk.services.neptune.NeptuneClient | 
| com.amazonaws.services.opsworks.AWSOpsWorksAsyncClient | software.amazon.awssdk.services.opsworks.OpsWorksAsyncClient | 
| com.amazonaws.services.opsworks.AWSOpsWorksClient | software.amazon.awssdk.services.opsworks.OpsWorksClient | 
| com.amazonaws.services.opsworkscm.AWSOpsWorksCMAsyncClient | software.amazon.awssdk.services.opsworkscm.OpsWorksCmAsyncClient | 
| com.amazonaws.services.opsworkscm.AWSOpsWorksCMClient | software.amazon.awssdk.services.opsworkscm.OpsWorksCmClient | 
| com.amazonaws.services.organizations.AWSOrganizationsAsyncClient | software.amazon.awssdk.services.organizations.OrganizationsAsyncClient | 
| com.amazonaws.services.organizations.AWSOrganizationsClient | software.amazon.awssdk.services.organizations.OrganizationsClient | 
| com.amazonaws.services.pi.AWSPIAsyncClient | software.amazon.awssdk.services.pi.PiAsyncClient | 
| com.amazonaws.services.pi.AWSPIClient | software.amazon.awssdk.services.pi.PiClient | 
| com.amazonaws.services.pinpoint.AmazonPinpointAsyncClient | software.amazon.awssdk.services.pinpoint.PinpointAsyncClient | 
| com.amazonaws.services.pinpoint.AmazonPinpointClient | software.amazon.awssdk.services.pinpoint.PinpointClient | 
| com.amazonaws.services.polly.AmazonPollyAsyncClient | software.amazon.awssdk.services.polly.PollyAsyncClient | 
| com.amazonaws.services.polly.AmazonPollyClient | software.amazon.awssdk.services.polly.PollyClient | 
| com.amazonaws.services.pricing.AWSPricingAsyncClient | software.amazon.awssdk.services.pricing.PricingAsyncClient | 
| com.amazonaws.services.pricing.AWSPricingClient | software.amazon.awssdk.services.pricing.PricingClient | 
| com.amazonaws.services.rds.AmazonRDSAsyncClient | software.amazon.awssdk.services.rds.RdsAsyncClient | 
| com.amazonaws.services.rds.AmazonRDSClient | software.amazon.awssdk.services.rds.RdsClient | 
| com.amazonaws.services.redshift.AmazonRedshiftAsyncClient | software.amazon.awssdk.services.redshift.RedshiftAsyncClient | 
| com.amazonaws.services.redshift.AmazonRedshiftClient | software.amazon.awssdk.services.redshift.RedshiftClient | 
| com.amazonaws.services.rekognition.AmazonRekognitionAsyncClient | software.amazon.awssdk.services.rekognition.RekognitionAsyncClient | 
| com.amazonaws.services.rekognition.AmazonRekognitionClient | software.amazon.awssdk.services.rekognition.RekognitionClient | 
| com.amazonaws.services.resourcegroups.AWSResourceGroupsAsyncClient | software.amazon.awssdk.services.resourcegroups.ResourceGroupsAsyncClient | 
| com.amazonaws.services.resourcegroups.AWSResourceGroupsClient | software.amazon.awssdk.services.resourcegroups.ResourceGroupsClient | 
| com.amazonaws.services.resourcegroupstaggingapi.AWSResourceGroupsTaggingAPIAsyncClient | software.amazon.awssdk.services.resourcegroupstaggingapi.ResourceGroupsTaggingApiAsyncClient | 
| com.amazonaws.services.resourcegroupstaggingapi.AWSResourceGroupsTaggingAPIClient | software.amazon.awssdk.services.resourcegroupstaggingapi.ResourceGroupsTaggingApiClient | 
| com.amazonaws.services.route53.AmazonRoute53AsyncClient | software.amazon.awssdk.services.route53.Route53AsyncClient | 
| com.amazonaws.services.route53.AmazonRoute53Client | software.amazon.awssdk.services.route53.Route53Client | 
| com.amazonaws.services.route53domains.AmazonRoute53DomainsAsyncClient | software.amazon.awssdk.services.route53domains.Route53DomainsAsyncClient | 
| com.amazonaws.services.route53domains.AmazonRoute53DomainsClient | software.amazon.awssdk.services.route53domains.Route53DomainsClient | 
| com.amazonaws.services.s3.AmazonS3Client | software.amazon.awssdk.services.s3.S3Client | 
| com.amazonaws.services.sagemaker.AmazonSageMakerAsyncClient | software.amazon.awssdk.services.sagemaker.SageMakerAsyncClient | 
| com.amazonaws.services.sagemaker.AmazonSageMakerClient | software.amazon.awssdk.services.sagemaker.SageMakerClient | 
| com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeAsyncClient | software.amazon.awssdk.services.sagemakerruntime.SageMakerRuntimeAsyncClient | 
| com.amazonaws.services.sagemakerruntime.AmazonSageMakerRuntimeClient | software.amazon.awssdk.services.sagemakerruntime.SageMakerRuntimeClient | 
| com.amazonaws.services.secretsmanager.AWSSecretsManagerAsyncClient | software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient | 
| com.amazonaws.services.secretsmanager.AWSSecretsManagerClient | software.amazon.awssdk.services.secretsmanager.SecretsManagerClient | 
| com.amazonaws.services.securitytoken.AWSSecurityTokenServiceAsyncClient | software.amazon.awssdk.services.sts.StsAsyncClient | 
| com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient | software.amazon.awssdk.services.sts.StsClient | 
| com.amazonaws.services.serverlessapplicationrepository.AWSServerlessApplicationRepositoryAsyncClient | software.amazon.awssdk.services.serverlessapplicationrepository.ServerlessApplicationRepositoryAsyncClient | 
| com.amazonaws.services.serverlessapplicationrepository.AWSServerlessApplicationRepositoryClient | software.amazon.awssdk.services.serverlessapplicationrepository.ServerlessApplicationRepositoryClient | 
| com.amazonaws.services.servermigration.AWSServerMigrationAsyncClient | software.amazon.awssdk.services.sms.SmsAsyncClient | 
| com.amazonaws.services.servermigration.AWSServerMigrationClient | software.amazon.awssdk.services.sms.SmsClient | 
| com.amazonaws.services.servicecatalog.AWSServiceCatalogAsyncClient | software.amazon.awssdk.services.servicecatalog.ServiceCatalogAsyncClient | 
| com.amazonaws.services.servicecatalog.AWSServiceCatalogClient | software.amazon.awssdk.services.servicecatalog.ServiceCatalogClient | 
| com.amazonaws.services.servicediscovery.AWSServiceDiscoveryAsyncClient | software.amazon.awssdk.services.servicediscovery.ServiceDiscoveryAsyncClient | 
| com.amazonaws.services.servicediscovery.AWSServiceDiscoveryClient | software.amazon.awssdk.services.servicediscovery.ServiceDiscoveryClient | 
| com.amazonaws.services.shield.AWSShieldAsyncClient | software.amazon.awssdk.services.shield.ShieldAsyncClient | 
| com.amazonaws.services.shield.AWSShieldClient | software.amazon.awssdk.services.shield.ShieldClient | 
| com.amazonaws.services.simpledb.AmazonSimpleDBAsyncClient | software.amazon.awssdk.services.simpledb.SimpleDbAsyncClient | 
| com.amazonaws.services.simpledb.AmazonSimpleDBClient | software.amazon.awssdk.services.simpledb.SimpleDbClient | 
| com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceAsyncClient | software.amazon.awssdk.services.ses.SesAsyncClient | 
| com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient | software.amazon.awssdk.services.ses.SesClient | 
| com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementAsyncClient | software.amazon.awssdk.services.ssm.SsmAsyncClient | 
| com.amazonaws.services.simplesystemsmanagement.AWSSimpleSystemsManagementClient | software.amazon.awssdk.services.ssm.SsmClient | 
| com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowAsyncClient | software.amazon.awssdk.services.swf.SwfAsyncClient | 
| com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient | software.amazon.awssdk.services.swf.SwfClient | 
| com.amazonaws.services.snowball.AmazonSnowballAsyncClient | software.amazon.awssdk.services.snowball.SnowballAsyncClient | 
| com.amazonaws.services.snowball.AmazonSnowballClient | software.amazon.awssdk.services.snowball.SnowballClient | 
| com.amazonaws.services.sns.AmazonSNSAsyncClient | software.amazon.awssdk.services.sns.SnsAsyncClient | 
| com.amazonaws.services.sns.AmazonSNSClient | software.amazon.awssdk.services.sns.SnsClient | 
| com.amazonaws.services.sqs.AmazonSQSAsyncClient | software.amazon.awssdk.services.sqs.SqsAsyncClient | 
| com.amazonaws.services.sqs.AmazonSQSClient | software.amazon.awssdk.services.sqs.SqsClient | 
| com.amazonaws.services.stepfunctions.AWSStepFunctionsAsyncClient | software.amazon.awssdk.services.sfn.SfnAsyncClient | 
| com.amazonaws.services.stepfunctions.AWSStepFunctionsClient | software.amazon.awssdk.services.sfn.SfnClient | 
| com.amazonaws.services.storagegateway.AWSStorageGatewayAsyncClient | software.amazon.awssdk.services.storagegateway.StorageGatewayAsyncClient | 
| com.amazonaws.services.storagegateway.AWSStorageGatewayClient | software.amazon.awssdk.services.storagegateway.StorageGatewayClient | 
| com.amazonaws.services.support.AWSSupportAsyncClient | software.amazon.awssdk.services.support.SupportAsyncClient | 
| com.amazonaws.services.support.AWSSupportClient | software.amazon.awssdk.services.support.SupportClient | 
| com.amazonaws.services.transcribe.AmazonTranscribeAsyncClient | software.amazon.awssdk.services.transcribe.TranscribeAsyncClient | 
| com.amazonaws.services.transcribe.AmazonTranscribeClient | software.amazon.awssdk.services.transcribe.TranscribeClient | 
| com.amazonaws.services.translate.AmazonTranslateAsyncClient | software.amazon.awssdk.services.translate.TranslateAsyncClient | 
| com.amazonaws.services.translate.AmazonTranslateClient | software.amazon.awssdk.services.translate.TranslateClient | 
| com.amazonaws.services.waf.AWSWAFAsyncClient | software.amazon.awssdk.services.waf.WafAsyncClient | 
| com.amazonaws.services.waf.AWSWAFClient | software.amazon.awssdk.services.waf.WafClient | 
| com.amazonaws.services.waf.AWSWAFRegionalAsyncClient | software.amazon.awssdk.services.waf.regional.WafRegionalAsyncClient | 
| com.amazonaws.services.waf.AWSWAFRegionalClient | software.amazon.awssdk.services.waf.regional.WafRegionalClient | 
| com.amazonaws.services.workdocs.AmazonWorkDocsAsyncClient | software.amazon.awssdk.services.workdocs.WorkDocsAsyncClient | 
| com.amazonaws.services.workdocs.AmazonWorkDocsClient | software.amazon.awssdk.services.workdocs.WorkDocsClient | 
| com.amazonaws.services.workmail.AmazonWorkMailAsyncClient | software.amazon.awssdk.services.workmail.WorkMailAsyncClient | 
| com.amazonaws.services.workmail.AmazonWorkMailClient | software.amazon.awssdk.services.workmail.WorkMailClient | 
| com.amazonaws.services.workspaces.AmazonWorkspacesAsyncClient | software.amazon.awssdk.services.workspaces.WorkSpacesAsyncClient | 
| com.amazonaws.services.workspaces.AmazonWorkspacesClient | software.amazon.awssdk.services.workspaces.WorkSpacesClient | 
| com.amazonaws.services.xray.AWSXRayAsyncClient | software.amazon.awssdk.services.xray.XRayAsyncClient | 
| com.amazonaws.services.xray.AWSXRayClient | software.amazon.awssdk.services.xray.XRayClient | 

# Paramètres par défaut de création du client
<a name="client-creation-defaults"></a>

Dans la version 2.x, les modifications suivantes ont été apportées à la logique de création du client par défaut.
+ La chaîne de fournisseurs d'informations d'identification par défaut pour S3 n'inclut plus d'informations d'identification anonymes. Vous devez spécifier manuellement un accès anonyme à S3 à l'aide du`AnonymousCredentialsProvider`.
+ Les variables d'environnement suivantes liées à la création du client par défaut sont différentes.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/client-creation-defaults.html)
+ Les propriétés système suivantes relatives à la création de clients par défaut sont différentes.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/client-creation-defaults.html)
+ La version 2.x ne prend pas en charge les propriétés système suivantes.
+     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/client-creation-defaults.html)
+ Le chargement de la configuration des régions à partir d'un `endpoints.json` fichier personnalisé n'est plus pris en charge.

# Configuration du client
<a name="client-configuration"></a>

Dans la version 1.x, la configuration du client SDK était modifiée en définissant une `ClientConfiguration` instance sur le client ou le générateur de clients. Dans la version 2.x, la configuration du client est scindée en classes de configuration distinctes. Avec les classes de configuration distinctes, vous pouvez configurer différents clients HTTP pour les clients asynchrones et les clients synchrones, tout en utilisant la même `ClientOverrideConfiguration` classe.

**Example de la configuration du client dans la version 1.x**  

```
AmazonDynamoDBClientBuilder.standard()
.withClientConfiguration(clientConfiguration)
.build()
```

**Example de la configuration du client synchrone dans la version 2.x**  

```
ProxyConfiguration.Builder proxyConfig = ProxyConfiguration.builder();

ApacheHttpClient.Builder httpClientBuilder =
        ApacheHttpClient.builder()
                        .proxyConfiguration(proxyConfig.build());

ClientOverrideConfiguration.Builder overrideConfig =
        ClientOverrideConfiguration.builder();

DynamoDbClient client =
        DynamoDbClient.builder()
                      .httpClientBuilder(httpClientBuilder)
                      .overrideConfiguration(overrideConfig.build())
                      .build();
```

**Example de la configuration du client asynchrone dans la version 2.x**  

```
NettyNioAsyncHttpClient.Builder httpClientBuilder =
        NettyNioAsyncHttpClient.builder();

ClientOverrideConfiguration.Builder overrideConfig =
        ClientOverrideConfiguration.builder();

ClientAsyncConfiguration.Builder asyncConfig =
        ClientAsyncConfiguration.builder();

DynamoDbAsyncClient client =
        DynamoDbAsyncClient.builder()
                           .httpClientBuilder(httpClientBuilder)
                           .overrideConfiguration(overrideConfig.build())
                           .asyncConfiguration(asyncConfig.build())
                           .build();
```

## Clients HTTP
<a name="client-configuration-http"></a>

### Changements notables
<a name="client-configuration-http-notables"></a>
+ Dans la version 2.x, vous pouvez modifier le client HTTP à utiliser lors de l'exécution en spécifiant une implémentation à l'aide `clientBuilder.httpClientBuilder` de.
+ Lorsque vous transmettez un client HTTP `clientBuilder.httpClient` à l'aide d'un générateur de clients de service, le client HTTP n'est pas fermé par défaut s'il ferme le client de service. Cela vous permet de partager des clients HTTP entre des clients de service.
+ Les clients HTTP asynchrones utilisent désormais des E/S non bloquantes.
+ Certaines opérations utilisent désormais HTTP/2 pour améliorer les performances.

### Modifications des paramètres
<a name="client-configuration-http-setting-diffs"></a>


| Paramètre | 1.x | Synchronisation 2.x, Apache | Async 2.x, Netty | 
| --- | --- | --- | --- | 
|  |  <pre>ClientConfiguration clientConfig = <br />    new ClientConfiguration()</pre>  |  <pre>ApacheHttpClient.Builder httpClientBuilder = <br />    ApacheHttpClient.builder()</pre>  |  <pre>NettyNioAsyncHttpClient.Builder httpClientBuilder = <br />    NettyNioAsyncHttpClient.builder()</pre>  | 
| Nombre maximal de connexions |  <pre>clientConfig.setMaxConnections(...)<br />clientConfig.withMaxConnections(...)</pre>  |  <pre>httpClientBuilder.maxConnections(...)</pre>  |  <pre>httpClientBuilder.maxConcurrency(...)</pre>  | 
| Délai de connexion |  <pre>clientConfig.setConnectionTimeout(...)<br />clientConfig.withConnectionTimeout(...)</pre>  |  <pre>httpClientBuilder.connectionTimeout(...)<br />httpClientBuilder.connectionAcquisitionTimeout(...)</pre>  |  <pre>httpClientBuilder.connectionTimeout(...)</pre>  | 
| Expiration du socket |  <pre>clientConfig.setSocketTimeout(...)<br />clientConfig.withSocketTimeout(...)</pre>  |  <pre>httpClientBuilder.socketTimeout(...)</pre>  |  <pre>httpClientBuilder.writeTimeout(...)<br />httpClientBuilder.readTimeout(...)</pre>  | 
| Connexion TTL |  <pre>clientConfig.setConnectionTTL(...)<br />clientConfig.withConnectionTTL(...)</pre>  |  <pre>httpClientBuilder.connectionTimeToLive(...)</pre>  |  <pre>httpClientBuilder.connectionTimeToLive(...)</pre>  | 
| Connexion maximale en veille |  <pre>clientConfig.setConnectionMaxIdleMillis(...)<br />clientConfig.withConnectionMaxIdleMillis(...)</pre>  |  <pre>httpClientBuilder.connectionMaxIdleTime(...)</pre>  |  <pre>httpClientBuilder.connectionMaxIdleTime(...)</pre>  | 
| Valider après inactivité |  <pre>clientConfig.setValidateAfterInactivityMillis(...)<br />clientConfig.withValidateAfterInactivityMillis(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Adresse locale |  <pre>clientConfig.setLocalAddress(...)<br />clientConfig.withLocalAddress(...)</pre>  |  <pre>httpClientBuilder.localAddress(...)</pre>  | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/857) | 
| Expect-continue activé |  <pre>clientConfig.setUseExpectContinue(...)<br />clientConfig.withUseExpectContinue(...)</pre>  |  <pre>httpClientBuilder.expectContinueEnabled(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Reaper Connection |  <pre>clientConfig.setUseReaper(...)<br />clientConfig.withReaper(...)</pre>  |  <pre>httpClientBuilder.useIdleConnectionReaper(...)</pre>  |  <pre>httpClientBuilder.useIdleConnectionReaper(...)</pre>  | 
|  |  <pre>AmazonDynamoDBClientBuilder.standard()<br />    .withClientConfiguration(clientConfiguration)<br />    .build()</pre>  |  <pre>DynamoDbClient.builder()<br />    .httpClientBuilder(httpClientBuilder)<br />    .build()</pre>  |  <pre>DynamoDbAsyncClient.builder()<br />.httpClientBuilder(httpClientBuilder)<br />.build()</pre>  | 

## Proxys clients HTTP
<a name="client-configuration-http-proxy"></a>


| Settings | 1.x | Synchronisation 2.x, Apache | Async 2.x, Netty | 
| --- | --- | --- | --- | 
|  |  <pre>ClientConfiguration clientConfig =<br />    new ClientConfiguration()</pre>  |  <pre>ProxyConfiguration.Builder proxyConfig =<br />    ProxyConfiguration.builder()</pre>  |  <pre>ProxyConfiguration.Builder proxyConfig =<br />    ProxyConfiguration.builder()</pre>  | 
| Hôte proxy |  <pre>clientConfig.setProxyHost(...)<br />clientConfig.withProxyHost(...)</pre>  |  <pre>proxyConfig.endpoint(...)</pre>  |  <pre>proxyConfig.host(...)</pre>  | 
| Port proxy |  <pre>clientConfig.setProxyPort(...)<br />clientConfig.withProxyPort(...)</pre>  |  <pre>proxyConfig.endpoint(...)</pre> [Le port proxy](http-configuration-apache.md#http-configuration-apache-proxy-conf-ex) est intégré dans `endpoint`  |  <pre>proxyConfig.port(...)</pre>  | 
| Nom d'utilisateur du proxy |  <pre>clientConfig.setProxyUsername(...)<br />clientConfig.withProxyUsername(...)</pre>  |  <pre>proxyConfig.username(...)</pre>  |  <pre>proxyConfig.username(...)</pre>  | 
| Mot de passe proxy |  <pre>clientConfig.setProxyPassword(...)<br />clientConfig.withProxyPassword(...)</pre>  |  <pre>proxyConfig.password(...)</pre>  |  <pre>proxyConfig.password(...)</pre>  | 
| Domaine proxy |  <pre>clientConfig.setProxyDomain(...)<br />clientConfig.withProxyDomain(...)</pre>  |  <pre>proxyConfig.ntlmDomain(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Station de travail proxy |  <pre>clientConfig.setProxyWorkspace(...)<br />clientConfig.withProxyWorkstation(...)</pre>  |  <pre>proxyConfig.ntlmWorkstation(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Méthodes d'authentification par proxy |  <pre>clientConfig.setProxyAuthenticationMethods(...)<br />clientConfig.withProxyAuthenticationMethods(...)</pre>  |  [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/858)  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Authentification proxy de base préemptive |  <pre>clientConfig.setPreemptiveBasicProxyAuth(...)<br />clientConfig.withPreemptiveBasicProxyAuth(...)</pre>  |  <pre>proxyConfig.preemptiveBasicAuthenticationEnabled(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Hôtes non proxy |  <pre>clientConfig.setNonProxyHosts(...)<br />clientConfig.withNonProxyHosts(...)</pre>  |  <pre>proxyConfig.nonProxyHosts(...)</pre>  |  <pre>proxyConfig.nonProxyHosts(...)</pre>  | 
| Désactiver le socket proxy |  <pre>clientConfig.setDisableSocketProxy(...)<br />clientConfig.withDisableSocketProxy(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|  |  <pre>AmazonDynamoDBClientBuilder.standard()<br />    .withClientConfiguration(clientConfiguration)<br />    .build()</pre>  |  <pre>httpClientBuilder.proxyConfiguration(<br />    proxyConfig.build())</pre>  |  <pre>httpClientBuilder.proxyConfiguration(<br />    proxyConfig.build())</pre>  | 

## Dérogations du client
<a name="client-override-config-diffs"></a>


| Paramètre | 1.x | 2.x | 
| --- | --- | --- | 
|  |  <pre>ClientConfiguration clientConfig =<br />    new ClientConfiguration()</pre>  |  <pre>ClientOverrideConfiguration.Builder overrideConfig =<br />    ClientOverrideConfiguration.builder()</pre>  | 
| Préfixe de l'agent utilisateur |  <pre>clientConfig.setUserAgentPrefix(...)<br />clientConfig.withUserAgentPrefix(...)</pre>  |  <pre>overrideConfig.advancedOption(<br />    SdkAdvancedClientOption.USER_AGENT_PREFIX, ...)</pre>  | 
| Suffixe d'agent utilisateur |  <pre>clientConfig.setUserAgentSuffix(...)<br />clientConfig.withUserAgentSuffix(...)</pre>  |  <pre>overrideConfig.advancedOption(<br />    SdkAdvancedClientOption.USER_AGENT_SUFFIX, ...)</pre>  | 
| Signer |  <pre>clientConfig.setSignerOverride(...)<br />clientConfig.withSignerOverride(...)</pre>  |  <pre>overrideConfig.advancedOption(<br />    SdkAdvancedClientOption.SIGNER, ...)</pre>  | 
| En-têtes supplémentaires |  <pre>clientConfig.addHeader(...)<br />clientConfig.withHeader(...)</pre>  |  <pre>overrideConfig.putHeader(...)</pre>  | 
| Délai d'expiration de la demande |  <pre>clientConfig.setRequestTimeout(...)<br />clientConfig.withRequestTimeout(...)</pre>  |  <pre>overrideConfig.apiCallAttemptTimeout(...)</pre>  | 
| Délai d'exécution du client |  <pre>clientConfig.setClientExecutionTimeout(...)<br />clientConfig.withClientExecutionTimeout(...)</pre>  |  <pre>overrideConfig.apiCallTimeout(...)</pre>  | 
| Utiliser Gzip |  <pre>clientConfig.setUseGzip(...)<br />clientConfig.withGzip(...)</pre>  |  Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new))  | 
| Indication de la taille de la mémoire tampon |  <pre>clientConfig.setSocketBufferSizeHints(...)<br />clientConfig.withSocketBufferSizeHints(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Métadonnées de réponse au cache |  <pre>clientConfig.setCacheResponseMetadata(...)<br />clientConfig.withCacheResponseMetadata(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| Taille du cache des métadonnées de réponse |  <pre>clientConfig.setResponseMetadataCacheSize(...)<br />clientConfig.withResponseMetadataCacheSize(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| résolveur DNS |  <pre>clientConfig.setDnsResolver(...)<br />clientConfig.withDnsResolver(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
| TCP keepalive |  <pre>clientConfig.setUseTcpKeepAlive(...)<br />clientConfig.withTcpKeepAlive(...)</pre>  |  Cette option est désormais dans la configuration du client HTTP <pre>- ApacheHttpClient.builder().tcpKeepAlive(true)<br />- NettyNioAsyncHttpClient.builder().tcpKeepAlive(true)</pre>  | 
| Aléatoire sécurisé |  <pre>clientConfig.setSecureRandom(...)<br />clientConfig.withSecureRandom(...)</pre>  | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|  |  <pre>AmazonDynamoDBClientBuilder.standard()<br />    .withClientConfiguration(clientConfiguration)<br />    .build()</pre>  |  <pre>DynamoDbClient.builder()<br />    .overrideConfiguration(overrideConfig.build())<br />    .build()</pre>  | 

## Le client annule de nouvelles tentatives
<a name="client-override-retry-config-diffs"></a>


| Paramètre | 1.x | 2.x | 
| --- | --- | --- | 
|  |  <pre>ClientConfiguration clientConfig =<br />    new ClientConfiguration()</pre>  |  <pre>ClientOverrideConfiguration.Builder overrideConfigBuilder = <br />    ClientOverrideConfiguration.builder();</pre>  | 
| Nombre maximum de tentatives d'erreur |  <pre>clientConfig.setMaxErrorRetry(...)<br />clientConfig.withMaxErrorRetry(...)</pre>  |  <pre>// Configure the default retry strategy.<br />overrideConfigBuilder.retryStrategy(b -> b.maxAttempts(...));</pre>  | 
| Utiliser des tentatives limitées |  <pre>clientConfig.setUseThrottleRetries(...)<br />clientConfig.withUseThrottleRetries(...)</pre>  | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/645) | 
| Nombre maximum de tentatives consécutives avant la limitation |  <pre>clientConfig.setMaxConsecutiveRetriesBeforeThrottling(...)<br />clientConfig.withMaxConsecutiveRetriesBeforeThrottling(...)</pre>  | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/645) | 
|  |  <pre>AmazonDynamoDBClientBuilder.standard()<br />    .withClientConfiguration(clientConfiguration)<br />    .build()</pre>  |  <pre>DynamoDbClient.builder()<br />        .overrideConfiguration(overrideConfigBuilder.build())<br />        .build();<br /><br />// You also have the option to use a lambda expression to configure and<br />// build the 'ClientOverrideConfiguration.Builder'.<br />DynamoDbClient client = DynamoDbClient.builder()<br />        .overrideConfiguration(o -> o.retryStrategy(b -> b.maxAttempts(5)))<br />        .build();</pre>  | 

## Clients asynchrones
<a name="client-async-config-diffs"></a>


| Paramètre | 1.x | 2.x | 
| --- | --- | --- | 
|  |  |  <pre>ClientAsyncConfiguration.Builder asyncConfig =<br />    ClientAsyncConfiguration.builder()</pre>  | 
| Exécuteur |  <pre>AmazonDynamoDBAsyncClientBuilder.standard()<br />    .withExecutorFactory(...)<br />    .build()</pre>  |  <pre>asyncConfig.advancedOption(<br />    SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, ...)</pre>  | 
|  |  |  <pre>DynamoDbAsyncClient.builder()<br />    .asyncConfiguration(asyncConfig)<br />    .build()</pre>  | 

## Autres modifications apportées aux clients
<a name="client-config-other-diffs"></a>

L'`ClientConfiguration`option suivante de la version 1.x a été modifiée dans la version 2.x du SDK et n'a pas d'équivalent direct.


| Paramètre | 1.x | équivalent 2.x | 
| --- | --- | --- | 
|  Protocole |  <pre>clientConfig.setProtocol(Protocol.HTTP)<br />clientConfig.withProtocol(Protocol.HTTP)</pre>  |  Le paramètre du protocole est HTTPS par défaut. Pour modifier le paramètre, spécifiez le protocole définissant un point de terminaison HTTP dans le générateur de clients : <pre>clientBuilder.endpointOverride(<br />    URI.create("http://..."))</pre>  | 

# Modifications apportées au fournisseur d'identifiants
<a name="migration-client-credentials"></a>

Cette section fournit un mappage des changements de nom des classes et méthodes du fournisseur d'informations d'identification entre les versions 1.x et 2.x du. AWS SDK pour Java

## Des différences notables
<a name="client-credentials"></a>
+ Le fournisseur d'informations d'identification par défaut charge les propriétés système avant les variables d'environnement dans la version 2.x. Pour plus d'informations, consultez la section [Utilisation des informations d'identification](credentials.md).
+ La méthode du constructeur est remplacé par les méthodes `create` ou `builder`.  
**Example**  

  ```
  DefaultCredentialsProvider.create();
  ```
+ L'actualisation asynchrone n'est plus définie par défaut. Vous devez la spécifier avec le `builder` du fournisseur d'informations d'identification.  
**Example**  

  ```
  ContainerCredentialsProvider provider = ContainerCredentialsProvider.builder()
          		.asyncCredentialUpdateEnabled(true)
          		.build();
  ```
+ Vous pouvez spécifier un chemin d'accès à un fichier de profil personnalisé à l'aide du `ProfileCredentialsProvider.builder()`.  
**Example**  

  ```
  ProfileCredentialsProvider profile = ProfileCredentialsProvider.builder()
          		.profileFile(ProfileFile.builder().content(Paths.get("myProfileFile.file")).build())
          		.build();
  ```
+ Le format de fichier de profil a changé pour mieux correspondre à l' AWS CLI. Pour plus de détails, consultez [la section Configuration du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) dans le *guide de AWS Command Line Interface l'utilisateur*.

## Modifications du fournisseur d'informations d'identification mappées entre les versions 1.x et 2.x
<a name="credentials-changes-mapping"></a>

### `AWSCredentialsProvider`
<a name="credentials-provider-changes-AWSCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.AWSCredentialsProvider | software.amazon.awssdk.auth.credentials.AwsCredentialsProvider | 
| Nom de la méthode | getCredentials | resolveCredentials | 
| Méthode non prise en charge | refresh | Non pris en charge | 

### `DefaultAWSCredentialsProviderChain`
<a name="credentials-provider-changes-DefaultAWSCredentialsProviderChain"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.DefaultAWSCredentialsProviderChain | software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider | 
| Création | new DefaultAWSCredentialsProviderChain | DefaultCredentialsProvider.create | 
| Méthode non prise en charge | getInstance | Non pris en charge | 
| Ordre de priorité des paramètres externes |  Variables d'environnement avant les propriétés du système  |  Propriétés du système avant les variables d'environnement  | 

### `AWSStaticCredentialsProvider`
<a name="credentials-provider-changes-AWSStaticCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.AWSStaticCredentialsProvider | software.amazon.awssdk.auth.credentials.StaticCredentialsProvider | 
| Création | new AWSStaticCredentialsProvider | StaticCredentialsProvider.create | 

### `EnvironmentVariableCredentialsProvider`
<a name="credentials-provider-changes-EnvironmentVariableCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.EnvironmentVariableCredentialsProvider | software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider | 
| Création | new EnvironmentVariableCredentialsProvider | EnvironmentVariableCredentialsProvider.create | 
| Nom de la variable d'environnement | AWS\$1ACCESS\$1KEY | AWS\$1ACCESS\$1KEY\$1ID | 
|  | AWS\$1SECRET\$1KEY | AWS\$1SECRET\$1ACCESS\$1KEY | 

### `SystemPropertiesCredentialsProvider`
<a name="credentials-provider-changes-SystemPropertiesCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.SystemPropertiesCredentialsProvider | software.amazon.awssdk.auth.credentials.SystemPropertyCredentialsProvider | 
| Création | new SystemPropertiesCredentialsProvider | SystemPropertiesCredentialsProvider.create | 
| Nom de la propriété du système | aws.secretKey | aws.secretAccessKey | 

### `ProfileCredentialsProvider`
<a name="credentials-provider-changes-ProfileCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.profile.ProfileCredentialsProvider | software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider | 
| Création | new ProfileCredentialsProvider | ProfileCredentialsProvider.create | 
| Emplacement du profil personnalisé |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-client-credentials.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-client-credentials.html)  | 

### `ContainerCredentialsProvider`
<a name="credentials-provider-changes-ContainerCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.ContainerCredentialsProvider | software.amazon.awssdk.auth.credentials.ContainerCredentialsProvider | 
| Création | new ContainerCredentialsProvider | ContainerCredentialsProvider.create | 
| Spécifier l'actualisation asynchrone | Non pris en charge | Comportement par défaut | 

### `InstanceProfileCredentialsProvider`
<a name="credentials-provider-changes-InstanceProfileCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.InstanceProfileCredentialsProvider | software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider | 
| Création | new InstanceProfileCredentialsProvider | InstanceProfileCredentialsProvider.create | 
| Spécifier l'actualisation asynchrone | new InstanceProfileCredentialsProvider(true) |  `InstanceProfileCredentialProvider.builder().asyncCredentialUpdateEnabled(true).build()`  | 
| Nom de la propriété du système | com.amazonaws.sdk.disableEc2Metadata | aws.disableEc2Metadata | 
|  | com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | aws.ec2MetadataServiceEndpoint | 

### `STSAssumeRoleSessionCredentialsProvider`
<a name="credentials-provider-changes-STSAssumeRoleSessionCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.STSAssumeRoleSessionCredentialsProvider | software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider | 
| Création |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-client-credentials.html)  | StsAssumeRoleCredentialsProvider.builder | 
| Actualisation asynchrone | Comportement par défaut | Comportement par défaut | 
| Configuration | new STSAssumeRoleSessionCredentialsProvider.Builder | Configurer une AssumeRoleRequest demande StsClient et | 

### `STSSessionCredentialsProvider`
<a name="credentials-provider-changes-STSSessionCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.STSSessionCredentialsProvider | software.amazon.awssdk.services.sts.auth.StsGetSessionTokenCredentialsProvider | 
| Création |  `new STSSessionCredentialsProvider`  | StsGetSessionTokenCredentialsProvider.builder | 
| Actualisation asynchrone | Comportement par défaut | StsGetSessionTokenCredentialsProvider.builder | 
| Configuration | Paramètres du constructeur | Configurer une GetSessionTokenRequest demande StsClient et dans un générateur | 

### `WebIdentityFederationSessionCredentialsProvider`
<a name="credentials-provider-changes-WebIdentityFederationSessionCredentialsProvider"></a>


| Changer de catégorie | 1.x | 2.x | 
| --- | --- | --- | 
| Nom du paquet/de la classe | com.amazonaws.auth.WebIdentityFederationSessionCredentialsProvider | software.amazon.awssdk.services.sts.auth.StsAssumeRoleWithWebIdentityCredentialsProvider | 
| Création |  `new WebIdentityFederationSessionCredentialsProvider`  | StsAssumeRoleWithWebIdentityCredentialsProvider.builder | 
| Actualisation asynchrone | Comportement par défaut | StsAssumeRoleWithWebIdentityCredentialsProvider.builder | 
| Configuration | Paramètres du constructeur | Configurer une AssumeRoleWithWebIdentityRequest demande StsClient et dans un générateur | 

### Classes remplacées
<a name="credentials-provider-changes-Replacements"></a>


| Classe 1.x | Classes de remplacement 2.x | 
| --- | --- | 
| com.amazonaws.auth.EC2ContainerCredentialsProviderWrapper | software.amazon.awssdk.auth.credentials.ContainerCredentialsProvider et software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider | 
| com.amazonaws.services.s3.S3CredentialsProviderChain | software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider et software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider | 

### Classes supprimées
<a name="credentials-provider-changes-Removed"></a>


| Classe 1.x | 
| --- | 
| com.amazonaws.auth.ClasspathPropertiesFileCredentialsProvider | 
| com.amazonaws.auth.PropertiesFileCredentialsProvider | 

# Changements de région
<a name="migration-client-region"></a>

Cette section décrit les modifications mises en œuvre dans la version AWS SDK pour Java 2.x pour l'utilisation des `Regions` classes `Region` et.

## Configuration de la région
<a name="region-configuration"></a>
+ Certains AWS services ne disposent pas de points de terminaison spécifiques à une région. Lorsque vous utilisez ces services, vous devez définir la région comme `Region.AWS_GLOBAL` ou `Region.AWS_CN_GLOBAL`.  
**Example**  

  ```
  Region region = Region.AWS_GLOBAL;
  ```
+  Les classes `com.amazonaws.regions.Regions` et `com.amazonaws.regions.Region` sont désormais combinées en une seule classe `software.amazon.awssdk.regions.Region`.

## Mappages de méthodes et de noms de classes
<a name="region-method-mapping"></a>

Les tableaux suivants répertorient les classes liées aux régions entre les versions 1.x et 2.x du. AWS SDK pour Java Vous pouvez créer une instance de ces classes à l'aide de la méthode `of()`.

**Example**  

```
RegionMetadata regionMetadata = RegionMetadata.of(Region.US_EAST_1);
```


**1.x Changements de méthode de classe Regions**  

| 1.x | 2.x | 
| --- | --- | 
|  `Regions.fromName`  |  `Region.of`  | 
|  `Regions.getName`  |  `Region.id`  | 
|  `Regions.getDescription`  |  `Region.metadata().description()`  | 
|  `Regions.getCurrentRegion`  |  Non pris en charge  | 
|  `Regions.DEFAULT_REGION`  |  Non pris en charge  | 
|  `Regions.name`  |  `Region.id`  | 


**1.x Changements de méthode de classe Region**  

| 1.x | 2.x | 
| --- | --- | 
|  `Region.getName`  |  `Region.id`  | 
|  `Region.hasHttpsEndpoint`  |  Non pris en charge  | 
|  `Region.hasHttpEndpoint`  |  Non pris en charge  | 
|  `Region.getAvailableEndpoints`  |  Non pris en charge  | 
|  `Region.createClient`  |  Non pris en charge  | 


**RegionMetadata changements de méthode de classe**  

| 1.x | 2.x | 
| --- | --- | 
|  `RegionMetadata.getName`  |  `RegionMetadata.name`  | 
|  `RegionMetadata.getDomain`  |  `RegionMetadata.domain`  | 
|  `RegionMetadata.getPartition`  |  `RegionMetadata.partition`  | 


**ServiceMetadata changements de méthode de classe**  

| 1.x | 2.x | 
| --- | --- | 
|  `Region.getServiceEndpoint`  |  `ServiceMetadata.endpointFor(Region)`  | 
|  `Region.isServiceSupported`  |  `ServiceMetadata.regions().contains(Region)`  | 

# Modifications des opérations, des demandes et des réponses
<a name="migration-operation-requests-responses"></a>

Dans la version 2 du SDK pour Java, les demandes sont transmises à une opération client. Par exemple, `DynamoDbClient's` `PutItemRequest` est passé à `DynamoDbClient.putItem` l'opération. Ces opérations renvoient une réponse du Service AWS, telle que `PutItemResponse` a.

La version 2 du SDK pour Java présente les modifications suivantes par rapport à la version 1.
+ Les opérations comportant plusieurs pages de réponse disposent désormais d'une `Paginator` méthode permettant d'itérer automatiquement tous les éléments de la réponse.
+ Vous ne pouvez pas modifier les demandes et les réponses.
+ Vous devez créer des demandes et des réponses avec une méthode de générateur statique au lieu d'un constructeur. Par exemple, la version 1 `new PutItemRequest().withTableName(...)` existe maintenant`PutItemRequest.builder().tableName(...).build()`.
+ Les opérations prennent en charge un moyen court de créer des demandes :`dynamoDbClient.putItem(request -> request.tableName(...))`.

Les sections suivantes décrivent les modifications spécifiques apportées entre la version 1 et la version 2. Certaines modifications de type de paramètre peuvent être converties automatiquement à l'aide de l'[outil de migration](migration-tool.md), tandis que d'autres modifications nécessitent des mises à jour manuelles de votre code.

# Modifications des paramètres de date
<a name="migration-date-parameters"></a>

Dans la version 1, de nombreuses opérations acceptaient `java.util.Date` des objets pour des paramètres temporels. Dans la version 2, ces opérations utilisent plutôt `java.time.Instant` des objets.

Vous pouvez convertir `Date` les paramètres automatiquement à l'aide de l'[outil de migration](migration-tool.md), ou vous pouvez les convertir manuellement en appelant la `toInstant()` méthode sur votre `Date` objet.

**Example - Génère une URL présignée avec une date d'expiration dans la version 1**  

```
// Generate a presigned URL that expires at a specific date
Date expiration = new Date(System.currentTimeMillis() + 3600000); // 1 hour from now
URL presignedUrl = s3Client.generatePresignedUrl(bucketName, keyName, expiration);
```

**Example - Génère une URL présignée avec une expiration instantanée dans la version 2**  

```
// Generate a presigned URL that expires at a specific instant
Date expiration = new Date(System.currentTimeMillis() + 3600000); // 1 hour from now
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(
    GetObjectPresignRequest.builder()
        .getObjectRequest(GetObjectRequest.builder()
            .bucket(bucketName)
            .key(keyName)
            .build())
        .signatureDuration(Duration.between(Instant.now(), expiration.toInstant()))
        .build());
```

# Modifications apportées à la gestion des données binaires
<a name="migration-binary-data"></a>

Dans la version 1, les données binaires étaient gérées directement à l'aide `ByteBuffer` d'objets. Dans la version 2, le SDK utilise `SdkBytes` des objets qui fournissent un moyen plus pratique et plus sûr de travailler avec des données binaires.

Vous pouvez les convertir `ByteBuffer` automatiquement `SdkBytes` à l'aide de l'[outil de migration](migration-tool.md), ou vous pouvez les convertir manuellement en faisant `asByteBuffer()` appel à l'`SdkBytes`objet renvoyé.

**Example - Récupère des données binaires à partir d'un attribut de message dans la version 1**  

```
// Get binary data from a message attribute
MessageAttributeValue messageAttributeValue = new MessageAttributeValue();
ByteBuffer binaryValue = messageAttributeValue.getBinaryValue();
String binaryString = new String(messageAttributeValue.getBinaryValue().array());
```

**Example - Récupère des données binaires à partir d'un attribut de message dans la version 2**  

```
// Get binary data from a message attribute
MessageAttributeValue messageAttributeValue = MessageAttributeValue.builder().build();
ByteBuffer binaryValue = messageAttributeValue.binaryValue().asByteBuffer();
String binaryString = new String(messageAttributeValue.binaryValue().asByteBuffer().array());
```

# Modifications des paramètres de délai
<a name="migration-timeout-parameters"></a>

Dans la version 1, les valeurs de délai d'attente étaient spécifiées sous forme de valeurs entières représentant des millisecondes. Dans la version 2, les paramètres de temporisation utilisent `java.time.Duration` des objets pour améliorer la sécurité et la clarté des textes.

Vous pouvez convertir les valeurs de délai d'expiration numériques automatiquement à l'aide de l'[outil de migration](migration-tool.md), ou vous pouvez les convertir manuellement en encapsulant vos valeurs numériques avec la méthode d'usine appropriée`Duration`.

**Example - Définissez un délai d'expiration pour les demandes dans la version 1**  

```
// Set request timeout in milliseconds
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setRequestTimeout(5000); // 5 seconds
```

**Example - Définissez un délai d'expiration pour les demandes dans la version 2**  

```
// Set request timeout using Duration
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setRequestTimeout(Duration.ofMillis(5000)); // 5 seconds

// Or more clearly:
clientConfiguration.setRequestTimeout(Duration.ofSeconds(5)); // 5 seconds
```

Vous pouvez utiliser les méthodes d'`Duration`usine suivantes pour les valeurs de délai d'expiration :
+ `Duration.ofMillis(long millis)`- Pour les valeurs en millisecondes.
+ `Duration.ofSeconds(long seconds)`- Pour les secondes valeurs.
+ `Duration.ofMinutes(long minutes)`- Pour les valeurs infimes.

# Différences entre les opérations de streaming entre les versions 1.x et 2.x du AWS SDK pour Java
<a name="migration-streaming-ops"></a>

Les opérations de streaming, telles qu'Amazon S3 `getObject` et ses `putObject` méthodes, prennent en charge le non-blocage I/O dans la version 2.x du SDK. Par conséquent, les objets du modèle de demande et de réponse ne prennent plus un `InputStream` comme paramètre. Au lieu de cela, pour les demandes synchrones, l'objet de demande accepte`RequestBody`, qui est un flux d'octets. L'équivalent asynchrone accepte un. `AsyncRequestBody`

**Example du `putObject` fonctionnement d'Amazon S3 dans la version 1.x**  

```
s3client.putObject(BUCKET, KEY, new File(file_path));
```

**Example du `putObject` fonctionnement d'Amazon S3 dans la version 2.x**  

```
s3client.putObject(PutObjectRequest.builder()
                                 .bucket(BUCKET)
                                 .key(KEY)
                                 .build(),
                 RequestBody.of(Paths.get("myfile.in")));
```

Un objet de réponse de streaming accepte un `ResponseTransformer` pour les clients synchrones et un `AsyncResponseTransformer` pour les clients asynchrones dans la V2.

**Example du `getObject` fonctionnement d'Amazon S3 dans la version 1.x**  

```
S3Object o = s3.getObject(bucket, key);
S3ObjectInputStream s3is = o.getObjectContent();
FileOutputStream fos = new FileOutputStream(new File(key));
```

**Example du `getObject` fonctionnement d'Amazon S3 dans la version 2.x**  

```
s3client.getObject(GetObjectRequest.builder().bucket(bucket).key(key).build(),
		ResponseTransformer.toFile(Paths.get("key")));
```

Dans le SDK pour Java 2.x, les opérations de réponse en continu disposent `AsBytes` d'une méthode permettant de charger la réponse en mémoire et de simplifier les conversions de type courantes en mémoire.

# Différences de sérialisation entre 1.x et 2.x du AWS SDK pour Java
<a name="migration-serialization-changes"></a>

## Lister les objets pour demander une différence de paramètres
<a name="serialization-diffs-list-obj-to-req-param"></a>

Les SDK pour Java v1.x et v2.x diffèrent dans la manière dont ils sérialisent les objets List pour demander des paramètres.

Le SDK pour Java 1.x ne sérialise pas une liste vide, alors que le SDK pour Java 2.x sérialise une liste vide en tant que paramètre vide.

Par exemple, considérez un service avec un `SampleOperation` qui prend un`SampleRequest`. `SampleRequest`Accepte deux paramètres : le type String `str1` et le type List`listParam`, comme indiqué dans les exemples suivants.

**Example ou `SampleOperation` en 1.x**  

```
SampleRequest v1Request = new SampleRequest()
    .withStr1("TestName");

sampleServiceV1Client.sampleOperation(v1Request);
```
La journalisation au niveau du fil indique que le `listParam` paramètre n'est pas sérialisé.  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName
```

**Example ou `SampleOperation` en 2.x**  

```
sampleServiceV2Client.sampleOperation(b -> b
    .str1("TestName"));
```
La journalisation au niveau du fil indique que le `listParam` paramètre est sérialisé sans aucune valeur.  

```
Action=SampleOperation&Version=2011-01-01&str1=TestName&listParam=
```

## POJOs en V1 par rapport aux constructeurs en V2
<a name="serialization-json-objects"></a>

[Étant donné que le SDK V1 pour Java utilise des classes POJO mutables, les bibliothèques de sérialisation et de désérialisation, telles que Jackson, peuvent utiliser directement des objets modèles.](https://github.com/FasterXML/jackson-docs) 

Le SDK V2 pour Java, en revanche, utilise des objets modèles immuables. Vous devez utiliser un générateur intermédiaire pour effectuer la dé/sérialisation.

L'exemple suivant montre les différences entre de/serializing un appel d'`headBucket`API avec V1 et un appel V2 utilisant un Jackson`ObjectMapper`.

```
    public void sendRequest() throws IOException {
        final String bucketName = "amzn-s3-demo-bucket";
        final ObjectMapper mapper = new ObjectMapper();

        // V1 uses POJOs to serialize and deserialize.
        final AmazonS3 v1S3Client = AmazonS3ClientBuilder.defaultClient();
        HeadBucketResult resultV1 = v1S3Client.headBucket(
            new HeadBucketRequest(bucketName));

        String v1Serialized = mapper.writeValueAsString(resultV1);

        HeadBucketResult deserializedV1 = mapper.readValue(v1Serialized, HeadBucketResult.class);
        
        // V2 uses builders to serialize and deserialize.
        S3Client v2S3Client = S3Client.create();
        HeadBucketResponse v2Response = v2S3Client.headBucket(
            b -> b.bucket(bucketName));

        String v2Serialized = mapper.writeValueAsString(
            v2Response.toBuilder());

        HeadBucketResponse v2Deserialized = mapper.readValue(
            v2Serialized, HeadBucketResponse.serializableBuilderClass())
            .build();
    }
```

# Différences de désérialisation entre 1.x et 2.x du AWS SDK pour Java
<a name="migration-deserialization-changes"></a>

## Collections vides en V2 par rapport `nulls` à V1
<a name="deserialization-diffs-list-obj-to-req-param"></a>

Les SDK pour Java v1.x et v2.x diffèrent dans la manière dont ils désérialisent les réponses JSON avec des listes et des cartes vides.

Lorsque le SDK reçoit une réponse avec une propriété manquante modélisée sous forme de liste ou de carte, V1 désérialise la propriété manquante`null`, tandis que V2 désérialise la propriété en un objet de collection vide immuable.

Par exemple, considérez la réponse renvoyée pour la `describeTable` méthode par un client DynamoDB. L'exemple de méthode suivant contient un client DynamoDB V2 et un client DynamoDB V1 qui exécutent tous deux la méthode sur une table dépourvue d'`describeTable`index secondaires globaux.

**Example de la désérialisation d'une propriété modélisée sous forme de liste manquante dans la réponse**  

```
public void deserializationDiffs(){

    DescribeTableResponse v2Response = dynamoDbClientV2.describeTable(builder -> builder.tableName(TABLE_NAME));
    // V2 provides has* methods on model objects for list/map members. No null check needed.
    LOGGER.info( String.valueOf(v2Response.table().hasGlobalSecondaryIndexes()) );
    LOGGER.info( String.valueOf(v2Response.table().globalSecondaryIndexes().isEmpty()) );
    // V2 deserialize to an empty collection.
    LOGGER.info(v2Response.table().globalSecondaryIndexes().toString());

    // V1 deserialize to null.
    DescribeTableResult v1Result = dynamoDbClientV1.describeTable(new DescribeTableRequest(TABLE_NAME));
    if (v1Result.getTable().getGlobalSecondaryIndexes() != null){
        LOGGER.info(v1Result.getTable().getGlobalSecondaryIndexes().toString());
    } else {
        LOGGER.info("The list of global secondary indexes returned by the V1 call is <null>");
    }
}
```
Voici la sortie enregistrée :  

```
INFO  org.example.DeserializationDifferences:45 - false
INFO  org.example.DeserializationDifferences:46 - true
INFO  org.example.DeserializationDifferences:48 - []
INFO  org.example.DeserializationDifferences:55 - The list of global secondary indexes returned by the V1 call is <null>
```

Le SDK Java 2.x adopte une approche idiomatique en désérialisant les listes vides et les mappant vers des collections vides immuables au lieu de les renvoyer`null`, ce qui favorise un code plus sûr et plus concis. Avec la V2, vous pouvez vérifier si un service a renvoyé un attribut modélisé sous forme de liste ou de carte avec la `has*` méthode, comme `hasGlobalSecondaryIndexes` illustré dans l'exemple précédent.

Cette approche évite d'avoir à `null` effectuer des vérifications explicites et s'aligne sur les meilleures pratiques Java modernes en matière de gestion des structures de données absentes ou vides.

### Exemple complet
<a name="full-example-deserialization"></a>

```
package org.example;

import com.amazonaws.regions.Regions;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest;
import com.amazonaws.services.dynamodbv2.model.DescribeTableResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.BillingMode;
import software.amazon.awssdk.services.dynamodb.model.DescribeTableResponse;
import software.amazon.awssdk.services.dynamodb.model.KeyType;
import software.amazon.awssdk.services.dynamodb.model.ScalarAttributeType;

import java.util.UUID;

public class DeserializationDifferences {
    private static final Logger LOGGER = LoggerFactory.getLogger(DeserializationDifferences.class);
    private static final String TABLE_NAME = "DeserializationTable-" + UUID.randomUUID();
    DynamoDbClient dynamoDbClientV2 = DynamoDbClient.create();
    AmazonDynamoDB dynamoDbClientV1 = AmazonDynamoDBClientBuilder.standard().withRegion(Regions.US_EAST_1).build();

    public static void main(String[] args) {

        DeserializationDifferences difference = new DeserializationDifferences();
        difference.createTable();
        difference.deserializationDiffs();
        difference.deleteTable();
    }

    public void createTable(){
        dynamoDbClientV2.createTable(b -> b
                .billingMode(BillingMode.PAY_PER_REQUEST)
                .tableName(TABLE_NAME)
                .keySchema(b1 -> b1.attributeName("Id").keyType(KeyType.HASH))
                .attributeDefinitions(b2 -> b2.attributeName("Id").attributeType(ScalarAttributeType.S)));
        dynamoDbClientV2.waiter().waitUntilTableExists(b -> b.tableName(TABLE_NAME));
    }

    public void deserializationDiffs(){

        DescribeTableResponse v2Response = dynamoDbClientV2.describeTable(builder -> builder.tableName(TABLE_NAME));
        // V2 provides has* methods on model objects for list/map members. No null check needed.
        LOGGER.info( String.valueOf(v2Response.table().hasGlobalSecondaryIndexes()) );
        LOGGER.info( String.valueOf(v2Response.table().globalSecondaryIndexes().isEmpty()) );
        // V2 deserialize to an empty collection.
        LOGGER.info(v2Response.table().globalSecondaryIndexes().toString());

        // V1 deserialize to null.
        DescribeTableResult v1Result = dynamoDbClientV1.describeTable(new DescribeTableRequest(TABLE_NAME));
        if (v1Result.getTable().getGlobalSecondaryIndexes() != null){
            LOGGER.info(v1Result.getTable().getGlobalSecondaryIndexes().toString());
        } else {
            LOGGER.info("The list of global secondary indexes returned by the V1 call is <null>");
        }
    }

    public void deleteTable(){
        dynamoDbClientV2.deleteTable(b -> b.tableName(TABLE_NAME));
        dynamoDbClientV2.waiter().waitUntilTableNotExists(b -> b.tableName(TABLE_NAME));
    }
}
```

La réponse JSON pour la `describeTable` méthode du client V1 et V2 ne contient aucun `GlobalSecondaryIndexes` attribut :

```
{
  "Table": {
    "AttributeDefinitions": [
      {
        "AttributeName": "Id",
        "AttributeType": "S"
      }
    ],
    "BillingModeSummary": {
      "BillingMode": "PAY_PER_REQUEST",
      "LastUpdateToPayPerRequestDateTime": ...
    },
    "CreationDateTime": ...,
    "DeletionProtectionEnabled": false,
    "ItemCount": 0,
    "KeySchema": [
      {
        "AttributeName": "Id",
        "KeyType": "HASH"
      }
    ],
    "ProvisionedThroughput": {
      "NumberOfDecreasesToday": 0,
      "ReadCapacityUnits": 0,
      "WriteCapacityUnits": 0 
    },
    "TableArn": "arn:aws:dynamodb:us-east-1:11111111111:table/DeserializationTable-...",
    "TableId": "...",
    "TableName": "DeserializationTable-...",
    "TableSizeBytes": 0,
    "TableStatus": "ACTIVE",
    "TableThroughputModeSummary": {
      "LastUpdateToPayPerRequestDateTime": ...,
      "TableThroughputMode": "PAY_PER_REQUEST"
    },
    "WarmThroughput": {
      "ReadUnitsPerSecond": 12000,
      "Status": "ACTIVE",
      "WriteUnitsPerSecond": 4000
    }
  }
}
```

# Modifications des exceptions
<a name="migration-exception-changes"></a>

Les noms des classes d'exception, leurs structures et leurs relations ont changé. `software.amazon.awssdk.core.exception.SdkException`est la nouvelle `Exception` classe de base étendue par toutes les autres exceptions.

Ce tableau fait correspondre les modifications des noms des classes des exceptions.


| 1.x | 2.x | 
| --- | --- | 
|   `com.amazonaws.SdkBaseException` `com.amazonaws.AmazonClientException`   |   `software.amazon.awssdk.core.exception.SdkException`   | 
|   `com.amazonaws.SdkClientException`   |   `software.amazon.awssdk.core.exception.SdkClientException`   | 
|   `com.amazonaws.AmazonServiceException`   |   `software.amazon.awssdk.awscore.exception.AwsServiceException`   | 

Le tableau suivant répertorie les méthodes relatives aux classes d'exceptions entre les versions 1.x et 2.x.


| 1.x | 2.x | 
| --- | --- | 
|   `AmazonServiceException.getRequestId`   |   `SdkServiceException.requestId`   | 
|   `AmazonServiceException.getServiceName`   |   `AwsServiceException.awsErrorDetails().serviceName`   | 
|   `AmazonServiceException.getErrorCode`   |   `AwsServiceException.awsErrorDetails().errorCode`   | 
|   `AmazonServiceException.getErrorMessage`   |   `AwsServiceException.awsErrorDetails().errorMessage`   | 
|   `AmazonServiceException.getStatusCode`   |   `AwsServiceException.awsErrorDetails().sdkHttpResponse().statusCode`   | 
|   `AmazonServiceException.getHttpHeaders`   |   `AwsServiceException.awsErrorDetails().sdkHttpResponse().headers`   | 
|   `AmazonServiceException.rawResponse`   |   `AwsServiceException.awsErrorDetails().rawResponse`   | 

# Modifications spécifiques au service
<a name="migration-service-changes"></a>

## Modifications apportées à Amazon S3
<a name="s3-operations-name"></a>

Le SDK for Java 2.x désactive l'accès anonyme par défaut. Par conséquent, vous devez activer l'accès anonyme en utilisant le`AnonymousCredentialsProvider`.

### Changements de nom d'opération
<a name="s3-op-name-changes"></a>

De nombreux noms d'opérations pour le Amazon S3 client ont changé dans la version AWS SDK pour Java 2.x. Dans la version 1.x, le Amazon S3 client n'est pas généré directement à partir de l'API du service. Cela génère un discordance entre les opérations du kit SDK et l'API du service. Dans la version 2.x, nous générons désormais le Amazon S3 client pour qu'il soit plus cohérent avec l'API du service.

Le tableau suivant indique les noms des opérations dans les deux versions.


**Noms des opérations Amazon S3**  

| 1.x | 2.x | 
| --- | --- | 
| abortMultipartUpload | abortMultipartUpload | 
| changeObjectStorageClass  | copyObject | 
| completeMultipartUpload  | completeMultipartUpload | 
| copyObject | copyObject | 
| copyPart | uploadPartCopy | 
| createBucket | createBucket | 
| deleteBucket | deleteBucket | 
| deleteBucketAnalyticsConfiguration | deleteBucketAnalyticsConfiguration | 
| deleteBucketCrossOriginConfiguration | deleteBucketCors | 
| deleteBucketEncryption | deleteBucketEncryption | 
| deleteBucketInventoryConfiguration | deleteBucketInventoryConfiguration | 
| deleteBucketLifecycleConfiguration | deleteBucketLifecycle | 
| deleteBucketMetricsConfiguration | deleteBucketMetricsConfiguration | 
| deleteBucketPolicy | deleteBucketPolicy | 
| deleteBucketReplicationConfiguration | deleteBucketReplication | 
| deleteBucketTaggingConfiguration | deleteBucketTagging | 
| deleteBucketWebsiteConfiguration | deleteBucketWebsite | 
| deleteObject | deleteObject | 
| deleteObjectTagging | deleteObjectTagging | 
| deleteObjects | deleteObjects | 
| deleteVersion | deleteObject | 
| disableRequesterPays | putBucketRequestPayment | 
| doesBucketExist | headBucket | 
| doesBucketExistV2 | headBucket | 
| doesObjectExist | headObject | 
| enableRequesterPays | putBucketRequestPayment | 
| generatePresignedUrl | [S3Presigner](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/presigner/S3Presigner.html) | 
| getBucketAccelerateConfiguration | getBucketAccelerateConfiguration | 
| getBucketAcl | getBucketAcl | 
| getBucketAnalyticsConfiguration | getBucketAnalyticsConfiguration | 
| getBucketCrossOriginConfiguration | getBucketCors | 
| getBucketEncryption | getBucketEncryption | 
| getBucketInventoryConfiguration | getBucketInventoryConfiguration | 
| getBucketLifecycleConfiguration | getBucketLifecycle ou getBucketLifecycleConfiguration | 
| getBucketLocation | getBucketLocation | 
| getBucketLoggingConfiguration | getBucketLogging | 
| getBucketMetricsConfiguration | getBucketMetricsConfiguration | 
| getBucketNotificationConfiguration | getBucketNotification ou getBucketNotificationConfiguration | 
| getBucketPolicy | getBucketPolicy | 
| getBucketReplicationConfiguration | getBucketReplication | 
| getBucketTaggingConfiguration | getBucketTagging | 
| getBucketVersioningConfiguration | getBucketVersioning | 
| getBucketWebsiteConfiguration | getBucketWebsite | 
| getObject | getObject | 
| getObjectAcl | getObjectAcl | 
| getObjectAsString | getObjectAsBytes().asUtf8String | 
| getObjectMetadata | headObject | 
| getObjectTagging | getObjectTagging | 
| getResourceUrl | [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Utilities.html#getUrl(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Utilities.html#getUrl(java.util.function.Consumer)) | 
| getS3AccountOwner | listBuckets | 
| getUrl | [S3Utilities\$1getUrl](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Utilities.html#getUrl(java.util.function.Consumer)) | 
| headBucket | headBucket | 
| initiateMultipartUpload | createMultipartUpload | 
| isRequesterPaysEnabled | getBucketRequestPayment | 
| listBucketAnalyticsConfigurations | listBucketAnalyticsConfigurations | 
| listBucketInventoryConfigurations | listBucketInventoryConfigurations | 
| listBucketMetricsConfigurations | listBucketMetricsConfigurations | 
| listBuckets | listBuckets | 
| listMultipartUploads | listMultipartUploads | 
| listNextBatchOfObjects | listObjectsV2Paginator | 
| listNextBatchOfVersions | listObjectVersionsPaginator | 
| listObjects | listObjects | 
| listObjectsV2 | listObjectsV2 | 
| listParts | listParts | 
| listVersions | listObjectVersions | 
| putObject | putObject | 
| restoreObject | restoreObject | 
| restoreObjectV2 | restoreObject | 
| selectObjectContent | selectObjectContent | 
| setBucketAccelerateConfiguration | putBucketAccelerateConfiguration | 
| setBucketAcl | putBucketAcl | 
| setBucketAnalyticsConfiguration | putBucketAnalyticsConfiguration | 
| setBucketCrossOriginConfiguration | putBucketCors | 
| setBucketEncryption | putBucketEncryption | 
| setBucketInventoryConfiguration | putBucketInventoryConfiguration | 
| setBucketLifecycleConfiguration | putBucketLifecycle ou putBucketLifecycleConfiguration | 
| setBucketLoggingConfiguration | putBucketLogging | 
| setBucketMetricsConfiguration | putBucketMetricsConfiguration | 
| setBucketNotificationConfiguration | putBucketNotification ou putBucketNotificationConfiguration | 
| setBucketPolicy | putBucketPolicy | 
| setBucketReplicationConfiguration | putBucketReplication | 
| setBucketTaggingConfiguration | putBucketTagging | 
| setBucketVersioningConfiguration | putBucketVersioning | 
| setBucketWebsiteConfiguration | putBucketWebsite | 
| setObjectAcl | putObjectAcl | 
| setObjectRedirectLocation | copyObject | 
| setObjectTagging | putObjectTagging | 
| uploadPart | uploadPart | 

## Modifications apportées à Amazon SNS
<a name="sns-changes"></a>

Un client SNS ne peut plus accéder aux rubriques SNS dans des régions autres que celle à laquelle il est configuré pour accéder.

## Modifications apportées à Amazon SQS
<a name="sqs-changes"></a>

Un client SQS ne peut plus accéder aux files d'attente SQS dans des régions autres que celle à laquelle il est configuré pour accéder.

## Modifications apportées à Amazon RDS
<a name="rds-changes"></a>

Le SDK pour Java 2.x remplace `RdsUtilities#generateAuthenticationToken` la `RdsIamAuthTokenGenerator` classe de la version 1.x.

# Modifications apportées à l'utilisation d'Amazon S3 de la version 1 à la version 2 du AWS SDK pour Java
<a name="migration-s3"></a>

Cela AWS SDK for Java 2.x introduit des modifications importantes dans le client S3, notamment une nouvelle structure de package, des noms de classe mis à jour et des signatures de méthode révisées. Bien que de nombreuses méthodes puissent être migrées automatiquement de la V1 à la V2 à l'aide de l'[outil de migration](migration-tool.md), certaines nécessitent une migration manuelle, telles que `listNextBatchOfObjects` et`selectObjectContent`. De plus, la V2 remplace certaines classes V1 comme `AccessControlList` et `CannedAccessControlList` par de nouvelles implémentations.

**Topics**
+ [Différences du client S3 entre la version 1 et la version 2 du AWS SDK pour Java](migration-s3-client.md)
+ [Migrez le gestionnaire de transfert de la version 1 à la version 2 du AWS SDK pour Java](migration-s3-transfer-manager.md)
+ [Modifications apportées à l'analyse d'Amazon S3 URIs de la version 1 à la version 2](migration-s3-uri-parser.md)
+ [Modifications apportées à l'API de notifications d'événements S3 de la version 1 à la version 2](migration-s3-event-notification.md)

# Différences du client S3 entre la version 1 et la version 2 du AWS SDK pour Java
<a name="migration-s3-client"></a>

Dans cette rubrique, les différences entre les clients S3 des versions 1 et 2 du SDK for Java sont organisées en fonction de [la manière dont l'outil de migration](migration-tool.md) peut automatiser la migration. L'outil prend en charge la migration de la plupart des méthodes de la version 1 à la version 2, mais certaines méthodes nécessitent une migration manuelle. Outre les méthodes client S3, certaines classes S3 V1 n'ont pas d'équivalent V2 direct, ce qui vous oblige à les migrer manuellement.

**Contents**
+ [Exemple de méthodes V1 prises en charge par l'outil de migration](#methods-tool-migration)
  + [`putObject`](#V1-V2-putobject)
  + [`getObject`](#V1-V2-getobject)
+ [Méthodes V1 nécessitant une migration manuelle](#s3-methods-manual-migration)
  + [`getObject` utilisant `S3ObjectId`](#V1s-getObject-using-V1s-S3ObjectId)
  + [`getETag` utilisant `ObjectMetadata`](#V1s-ObjectMetadata-using-V1s-getETag)
  + [`listNextBatchOfObjects`](#V1-listNextBatchOfObjects)
  + [`listNextBatchOfVersions`](#V1-listNextBatchOfVersions)
  + [`selectObjectContent`](#V1-selectObjectContent)
  + [`setBucketAcl`](#V1-setBucketAcl)
  + [`setObjectAcl`](#V1-setObjectAcl)
  + [`initiateMultipartUpload`](#V1-initiateMultipartUpload)
    + [Exemple de migration](#V1-initiateMultipartUpload-migration-ex)
    + [Différences d'implémentation](#V1-initiateMultipartUpload-impl-diffs)
  + [`setRegion`](#V1-setRegion)
  + [`setS3ClientOptions(S3ClientOptions clientOptions)`](#V1-setS3ClientOptions)
  + [`setBucketLoggingConfiguration`](#V1-setBucketLoggingConfiguration)
  + [`setBucketLifecycleConfiguration`](#V1-setBucketLifecycleConfiguration)
  + [`setBucketTaggingConfiguration`](#V1-setBucketTaggingConfiguration)
+ [Classes V1 nécessitant une migration manuelle](#s3-classes-manual-migration)
  + [`AccessControlList`](#V1-AccessControlList)
  + [`CannedAccessControlList`](#V1-CannedAccessControlList)
  + [`BucketNotificationConfiguration`](#V1-BucketNotificationConfiguration)
  + [`MultiFactorAuthentication`](#V1-MultifactorAuthentication)

## Exemple de méthodes V1 prises en charge par l'outil de migration
<a name="methods-tool-migration"></a>

L'outil de migration migre automatiquement la plupart des méthodes de la V1 à la V2. Les `getObject` méthodes `putObject` et en sont deux exemples.

### `putObject`
<a name="V1-V2-putobject"></a>

```
// SDK V1
s3Client.putObject("amzn-s3-demo-bucket", "my-key", "Hello World!");


// SDK V2
s3Client.putObject(req -> req 
    .bucket("amzn-s3-demo-bucket") 
    .key("my-key"), 
    RequestBody.fromString("Hello World!"));
```

### `getObject`
<a name="V1-V2-getobject"></a>

```
// SDK V1
S3Object object = s3Client.getObject("amzn-s3-demo-bucket", "my-key");
InputStream content = object.getObjectContent();


// SDK V2
ResponseInputStream<GetObjectResponse> response = s3Client.getObject(req -> req 
    .bucket("amzn-s3-demo-bucket") 
    .key("my-key"));
```

## Méthodes V1 nécessitant une migration manuelle
<a name="s3-methods-manual-migration"></a>

Vous devez migrer manuellement les méthodes client V1 S3 suivantes. Lorsque vous utilisez l'outil de migration, un commentaire s'affiche dans le fichier Java de sortie V2 qui vous dirige vers cette rubrique.

### Des V1 `getObject` utilisant des V1 `S3ObjectId` à V2 `GetObjectRequest.builder()`
<a name="V1s-getObject-using-V1s-S3ObjectId"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.US_WEST_2)
        .build();

S3ObjectId s3ObjectId = new S3ObjectId(
    "amzn-s3-demo-bucket",
    "object-key",
    "abc123version" 
);

GetObjectRequest getRequest= new GetObjectRequest(s3ObjectId);
S3Object s3ObjectVersioned = s3Client.getObject(getRequest);


// SDK V2
// V2 does not include a 'S3ObjectId' class. V2 uses the request builder pattern 
// to supply the bucket, key, and version parameters.
S3Client s3Client = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

GetObjectRequest getRequest = GetObjectRequest.builder()
    .bucket("amzn-s3-demo-bucket")
    .key("object-key")
    .versionId("abc123version")
    .build();

ResponseInputStream<GetObjectResponse> response = s3Client.getObject(getRequest);
```

### Des V1 `getETag()` utilisant des V1 `ObjectMetadata` à V2 `GetObjectResponse.eTag()`
<a name="V1s-ObjectMetadata-using-V1s-getETag"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

S3Object object = s3ClientV1.getObject("amzn-s3-demo-bucket", "my-key");

// Double quotes are removed by the S3 client.
System.out.println(object.getObjectMetadata().getETag());

// SDK V2
S3Client s3ClientV2 = S3Client.builder()
        .region(Region.US_WEST_2)
        .build();

ResponseInputStream<GetObjectResponse> response = s3ClientV2.getObject(
        req -> req.bucket("amzn-s3-demo-bucket").key("my-key"));

// Double quotes are *NOT* removed. This is the unchanged ETag value as S3 sent it.
System.out.println(response.response().eTag());
```

### V1 `listNextBatchOfObjects` à V2 `listObjectsV2Paginator`
<a name="V1-listNextBatchOfObjects"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

ObjectListing objectListing = s3ClientV1.listObjects("bucket-name");
while (objectListing.isTruncated()) {
    objectListing = s3ClientV1.listNextBatchOfObjects(objectListing);
    for (S3ObjectSummary summary : objectListing.getObjectSummaries()) {
        System.out.println(summary.getKey());
    }
}


// SDK V2
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

ListObjectsV2Request request = ListObjectsV2Request.builder()
    .bucket("bucket-name")
    .build();

// V2 returns a paginator.
ListObjectsV2Iterable responses = s3Client.listObjectsV2Paginator(request);

for (ListObjectsV2Response page : responses) {
    page.contents().forEach(content -> {
        System.out.println(content.key());
    });
}
```

### V1 `listNextBatchOfVersions` à V2 `listObjectVersionsPaginator`
<a name="V1-listNextBatchOfVersions"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

VersionListing versionListing = s3ClientV1.listVersions("bucket-name", "prefix");
while (versionListing.isTruncated()) {
    versionListing = s3ClientV1.listNextBatchOfVersions(versionListing);
    for (S3VersionSummary version : versionListing.getVersionSummaries()) {
        System.out.println(version.getKey() + " " + version.getVersionId());
    }
}


// SDK V2
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

ListObjectVersionsRequest request = ListObjectVersionsRequest.builder()
    .bucket("bucket-name")
    .prefix("prefix")
    .build();

// V2 returns a paginator.
ListObjectVersionsIterable responses = s3ClientV2.listObjectVersionsPaginator(request);

for (ListObjectVersionsResponse page : responses) {
    page.versions().forEach(version -> {
        System.out.println(version.key() + " " + version.versionId());
    });
}
```

### `selectObjectContent`
<a name="V1-selectObjectContent"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

SelectObjectContentRequest request = new SelectObjectContentRequest()
    .withBucket("bucket-name")
    .withKey("object-key")
    .withExpression("select * from S3Object")
    .withExpressionType(ExpressionType.SQL)
 

SelectObjectContentResult result = s3ClientV1.selectObjectContent(request);
InputStream resultInputStream = result.getPayload().getRecordsInputStream();


// SDK V2
// In V2, 'selectObjectContent()' is available only on the S3AsyncClient. 
// V2 handles responses using an event-based 'SelectObjectContentEventStream'.
S3AsyncClient s3ClientV2 = S3AsyncClient.builder()
    .region(Region.US_WEST_2)
    .build();

SelectObjectContentRequest request = SelectObjectContentRequest.builder()
    .bucket("bucket-name")
    .key("object-key")
    .expression("select * from S3Object")
    .expressionType(ExpressionType.SQL)
    .build();
    
SelectObjectContentResponseHandler handler = new SelectObjectContentResponseHandler() {
    // Implement the required abstract methods such as 'onEventStream()'.
};

CompletableFuture<Void> future = s3ClientV2.selectObjectContent(request, handler);
// The 'SelectObjectContentResponseHandler' implementation processes the results.
```

### `acl`Méthode des V1 `setBucketAcl` à V2 sur `PutBucketAclRequest.builder()`
<a name="V1-setBucketAcl"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

AccessControlList acl = new AccessControlList();
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
s3ClientV1.setBucketAcl("bucket-name", acl);


// SDK V2
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

PutBucketAclRequest request = PutBucketAclRequest.builder()
    .bucket("bucket-name")
    .acl(BucketCannedACL.PRIVATE)
    .build();

s3ClientV2.putBucketAcl(request);
```

### `acl`Méthode des V1 `setObjectAcl` à V2 sur `PutObjectAclRequest.builder()`
<a name="V1-setObjectAcl"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

AccessControlList acl = new AccessControlList();
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
s3ClientV1.setObjectAcl("bucket-name", "object-key", acl);


// SDK V2
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

PutObjectAclRequest request = PutObjectAclRequest.builder()
    .bucket("bucket-name")
    .key("object-key")
    .acl(ObjectCannedACL.PRIVATE)
    .build();

s3ClientV2.putObjectAcl(request);
```

### V1 `initiateMultipartUpload` à V2 `createMultipartUpload`
<a name="V1-initiateMultipartUpload"></a>

#### Exemple de migration
<a name="V1-initiateMultipartUpload-migration-ex"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();
    
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("application/zip");
metadata.addUserMetadata("mykey", "myvalue");

InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(
    "bucket-name", 
    "object-key",
    metadata
);

InitiateMultipartUploadResult initResponse = s3ClientV1.initiateMultipartUpload(initRequest);
String uploadId = initResponse.getUploadId();


// SDK V2
// V1 uses ObjectMetadata methods, whereas V2 uses a simple Map.
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

CreateMultipartUploadRequest createMultipartRequest = CreateMultipartUploadRequest.builder() 
    .bucket("amzn-s3-demo-bucket") 
    .key("object-key") 
    .contentType("application/zip") 
    .metadata(Collections.singletonMap("mykey", "myvalue"))
    .build();

CreateMultipartUploadResponse response = s3ClientV2.createMultipartUpload(createMultipartRequest);
String uploadId = response.uploadId();
```

#### Différences d'implémentation
<a name="V1-initiateMultipartUpload-impl-diffs"></a>

La valeur `Content-Type` d'en-tête par défaut pour les méthodes suivantes est différente, comme indiqué dans le tableau suivant.


****  

| Version de SDK | Method | `Content-Type`Valeur par défaut | 
| --- | --- | --- | 
| version 1 | [initiateMultipartUpload](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#initiateMultipartUpload-com.amazonaws.services.s3.model.InitiateMultipartUploadRequest-) | application/octet-stream | 
| version 2 | [createMultipartUpload](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html#createMultipartUpload(software.amazon.awssdk.services.s3.model.CreateMultipartUploadRequest)) | binary/octet-stream | 

### `region`Méthode des V1 `setRegion` à V2 sur le générateur de clients
<a name="V1-setRegion"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard().build();
s3ClientV1.setRegion(Region.getRegion(Regions.US_WEST_2));


// SDK V2
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();
```

### V1 `setS3ClientOptions(S3ClientOptions clientOptions)`
<a name="V1-setS3ClientOptions"></a>

Au lieu d'utiliser un seul `S3ClientOptions` objet avec la `setS3ClientOptions` méthode, la V2 fournit des méthodes sur le générateur de clients pour définir les options.

### V1 `setBucketLoggingConfiguration` à V2 `putBucketLogging`
<a name="V1-setBucketLoggingConfiguration"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

BucketLoggingConfiguration loggingConfig = new BucketLoggingConfiguration();
loggingConfig.setDestinationBucketName("log-bucket");

SetBucketLoggingConfigurationRequest request = new SetBucketLoggingConfigurationRequest(
    "amzn-s3-demo-source-bucket",
    loggingConfig
);

s3ClientV1.setBucketLoggingConfiguration(request);


// SDK V2
// In V2, V1's 'BucketLoggingConfiguration' is replaced by 'BucketLoggingStatus' 
// and 'LoggingEnabled'.
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

LoggingEnabled loggingEnabled = LoggingEnabled.builder()
    .targetBucket("log-bucket")
    .build();

BucketLoggingStatus loggingStatus = BucketLoggingStatus.builder()
    .loggingEnabled(loggingEnabled)
    .build();

PutBucketLoggingRequest request = PutBucketLoggingRequest.builder()
    .bucket("amzn-s3-demo-source-bucket")
    .bucketLoggingStatus(loggingStatus)
    .build();

s3ClientV2.putBucketLogging(request);
```

### V1 `setBucketLifecycleConfiguration` à V2 `putBucketLifecycleConfiguration`
<a name="V1-setBucketLifecycleConfiguration"></a>

```
// SDK V1
BucketLifecycleConfiguration.Rule rule = new BucketLifecycleConfiguration.Rule()
    .withId("Archive and Delete Rule")
    .withPrefix("documents/")
    .withStatus(BucketLifecycleConfiguration.ENABLED)
    .withTransitions(Arrays.asList(
        new Transition()
            .withDays(30)
            .withStorageClass(StorageClass.StandardInfrequentAccess.toString()),
        new Transition()
            .withDays(90)
            .withStorageClass(StorageClass.Glacier.toString())
    ))
    .withExpirationInDays(365);

BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()
    .withRules(Arrays.asList(rule));

s3ClientV1.setBucketLifecycleConfiguration("amzn-s3-demo-bucket", configuration);


// SDK V2
LifecycleRule rule = LifecycleRule.builder()
    .id("Archive and Delete Rule")
    .filter(LifecycleRuleFilter.builder()
        .prefix("documents/")
        .build())
    .status(ExpirationStatus.ENABLED)
    .transitions(Arrays.asList(
        Transition.builder()
            .days(30)
            .storageClass(TransitionStorageClass.STANDARD_IA)
            .build(),
        Transition.builder()
            .days(90)
            .storageClass(TransitionStorageClass.GLACIER)
            .build()
    ))
    .expiration(LifecycleExpiration.builder()
        .days(365)
        .build())
    .build();

PutBucketLifecycleConfigurationRequest request = PutBucketLifecycleConfigurationRequest.builder()
    .bucket("amzn-s3-demo-bucket")
    .lifecycleConfiguration(BucketLifecycleConfiguration.builder()
        .rules(rule)
        .build())
    .build();

s3ClientV2.putBucketLifecycleConfiguration(request);
```

### V1 `setBucketTaggingConfiguration` à V2 `putBucketTagging`
<a name="V1-setBucketTaggingConfiguration"></a>

```
// SDK V1
List<TagSet> tagsets = new ArrayList<>();
TagSet tagSet = new TagSet();
tagSet.setTag("key1", "value1");
tagSet.setTag("key2", "value2");
tagsets.add(tagSet);

BucketTaggingConfiguration bucketTaggingConfiguration = new BucketTaggingConfiguration();
bucketTaggingConfiguration.setTagSets(tagsets);

SetBucketTaggingConfigurationRequest request = new SetBucketTaggingConfigurationRequest(
    "amzn-s3-demo-bucket",
    bucketTaggingConfiguration
);

s3ClientV1.setBucketTaggingConfiguration(request);


// SDK V2
Tagging tagging = Tagging.builder()
    .tagSet(Arrays.asList(
        Tag.builder()
            .key("key1")
            .value("value1")
            .build(),
        Tag.builder()
            .key("key2")
            .value("value2")
            .build()
    ))
    .build();

PutBucketTaggingRequest request = PutBucketTaggingRequest.builder()
    .bucket("amzn-s3-demo-bucket")
    .tagging(tagging)
    .build();

s3ClientV2.putBucketTagging(request);
```

## Classes V1 nécessitant une migration manuelle
<a name="s3-classes-manual-migration"></a>

### V1 `AccessControlList` à V2 `AccessControlPolicy`
<a name="V1-AccessControlList"></a>

```
// SDK V1
AccessControlList aclV1 = new AccessControlList();
aclV1.setOwner(new Owner("owner-id", "owner-name"));
aclV1.grantPermission(GroupGrantee.AllUsers, Permission.Read);

// SDK V2
// To migrate from V1 to V2, replace direct 'AccessControlList' modifications with an
// 'AccessControlPolicy.builder()' that contains both owner information and grants. 
// Note that V2's approach requires building the complete permission set upfront rather than modifying permissions incrementally.
AccessControlPolicy acpV2 = AccessControlPolicy.builder()
    .owner(Owner.builder()
        .id("owner-id")
        .displayName("owner-name")
        .build())
    .grants(Arrays.asList(
         Grant.builder()
            .grantee(Grantee.builder()
                 .type(Type.GROUP)
                 .uri("http://acs.amazonaws.com/groups/global/AllUsers") 
                 .build())
             .permission(Permission.READ)
             .build()
     ))
     .build();
```

### L'`CannedAccessControlList`énumération des V1 vers les V2 `BucketCannedACL` et les énumérations `ObjectCannedACL`
<a name="V1-CannedAccessControlList"></a>

```
// SDK V1
// In V1, 'CannedAccessControlList' is an enumeration of predefined ACLs.
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard().build();

// Creating a bucket.
s3ClientV1.setBucketAcl("bucket-name", CannedAccessControlList.PublicRead);

// Creating an object.
PutObjectRequest putObjectRequest = new PutObjectRequest("bucket-name", "object-key", file)
    .withCannedAcl(CannedAccessControlList.PublicRead);
s3ClientV1.putObject(putObjectRequest);


// SDK V2
// V2 replaces V1's 'CannedAccessControlList' with 'BucketCannedACL' for buckets and 'ObjectCannedACL' for objects.
S3Client s3ClientV2 = S3Client.builder().build();

// Creating a bucket.
PutBucketAclRequest bucketRequest = PutBucketAclRequest.builder()
    .bucket("bucket-name")
    .acl(BucketCannedACL.PRIVATE)
    .build();
s3ClientV2.putBucketAcl(bucketRequest);

// Creating an object.
PutObjectRequest objectRequest = PutObjectRequest.builder()
    .bucket("bucket-name")
    .key("object-key")
    .acl(ObjectCannedACL.PUBLIC_READ)
    .build();
s3ClientV2.putObject(objectRequest, RequestBody.fromFile(file));
```

### V1 `BucketNotificationConfiguration` à V2 `NotificationConfiguration`
<a name="V1-BucketNotificationConfiguration"></a>

```
//SDK V1
BucketNotificationConfiguration notificationConfig = new BucketNotificationConfiguration();

// Adding configurations by name
notificationConfig.addConfiguration("lambdaConfig", 
    new LambdaConfiguration("arn:aws:lambda:function", "s3:ObjectCreated:"));

notificationConfig.addConfiguration("topicConfig",
    new TopicConfiguration("arn:aws:sns:topic", "s3:ObjectRemoved:"));

notificationConfig.addConfiguration("queueConfig",
    new QueueConfiguration("arn:aws:sqs:queue", "s3:ObjectRestore:*"));

s3Client.setBucketNotificationConfiguration("bucket", notificationConfig);


// SDK V2
// In V2, V1's BucketNotificationConfiguration is renamed to NotificationConfiguration. 
// V2 contains no common abstract class for LambdaFunction/Topic/Queue configurations.
NotificationConfiguration notificationConfig = NotificationConfiguration.builder()
    .lambdaFunctionConfigurations(
        LambdaFunctionConfiguration.builder()
            .lambdaFunctionArn("arn:aws:lambda:function")
            .events(Event.valueOf("s3:ObjectCreated:"))
            .build())
    .topicConfigurations(
        TopicConfiguration.builder()
            .topicArn("arn:aws:sns:topic")
            .events(Event.valueOf("s3:ObjectRemoved:"))
            .build())
    .queueConfigurations(
        QueueConfiguration.builder()
            .queueArn("arn:aws:sqs:queue")
            .events(Event.valueOf("s3:ObjectRestore:*"))
            .build())
    .build();

s3Client.putBucketNotificationConfiguration(req -> req
    .bucket("bucket")
    .notificationConfiguration(notificationConfig));
```

### `mfa`Méthode des V1 `MultiFactorAuthentication` à V2 sur un générateur de requêtes
<a name="V1-MultifactorAuthentication"></a>

```
// SDK V1
AmazonS3 s3ClientV1 = AmazonS3ClientBuilder.standard()
    .withRegion(Regions.US_WEST_2)
    .build();

BucketVersioningConfiguration versioningConfig = new BucketVersioningConfiguration()
    .withStatus(BucketVersioningConfiguration.ENABLED);

// Create an MFA configuration object.
MultiFactorAuthentication mfa = new MultiFactorAuthentication(
    "arn:aws:iam::1234567890:mfa/user",
    "123456"
);

// Create the request object.
SetBucketVersioningConfigurationRequest request = new SetBucketVersioningConfigurationRequest(
    "bucket-name",
    versioningConfig,
    mfa
);

// Send the request.
s3ClientV1.setBucketVersioningConfiguration(request);


// SDK V2
// V2 replaces V1's MultiFactorAuthentication POJO with parameters you set on the request builder.
S3Client s3ClientV2 = S3Client.builder()
    .region(Region.US_WEST_2)
    .build();

PutBucketVersioningRequest request = PutBucketVersioningRequest.builder()
    .bucket("bucket-name")
    .versioningConfiguration(VersioningConfiguration.builder()
        .status(BucketVersioningStatus.ENABLED)
        .build())
    .mfa("arn:aws:iam::1234567890:mfa/user 123456")  // Single method takes both MFA erial number and token.
    .build();

s3ClientV2.putBucketVersioning(request);
```

# Migrez le gestionnaire de transfert de la version 1 à la version 2 du AWS SDK pour Java
<a name="migration-s3-transfer-manager"></a>

Ce guide de migration décrit les principales différences entre Transfer Manager v1 et S3 Transfer Manager v2, notamment les modifications du constructeur, les mappages de méthodes et des exemples de code pour les opérations courantes. Après avoir examiné ces différences, vous pouvez migrer avec succès votre code Transfer Manager existant afin de tirer parti des performances améliorées et des opérations asynchrones de la version 2.

**À propos de l' AWS outil de migration du SDK**  
 AWS SDK pour Java Il fournit un [outil de migration](migration-tool.md) automatique qui peut migrer une grande partie de l'API Transfer Manager v1 vers la v2. Cependant, l'outil de migration ne prend pas en charge plusieurs fonctionnalités de la version 1 de Transfer Manager. Dans ces cas, vous devez migrer manuellement le code de Transfer Manager en suivant les instructions de cette rubrique.  
Tout au long de ce guide, l'**état de migration** indique si l'outil de migration peut migrer automatiquement un constructeur, une méthode ou une fonctionnalité :  
**Supporté** : l'outil de migration peut transformer automatiquement ce code
**Non pris en charge** : vous devez migrer le code manuellement
Même pour les éléments marqués comme « pris en charge », passez en revue les résultats de la migration et testez-les de manière approfondie. La migration de Transfer Manager implique des modifications architecturales importantes, passant d'opérations synchrones à des opérations asynchrones.

## Présentation de
<a name="s3-tm-migration-overview"></a>

S3 Transfer Manager v2 apporte des modifications importantes à l'API Transfer Manager. S3 Transfer Manager v2 repose sur des opérations asynchrones et offre de meilleures performances, en particulier lorsque vous utilisez le client AWS Amazon S3 basé sur CRT.

### Principales différences
<a name="s3-tm-migration-key-differences"></a>
+ **Package** : `com.amazonaws.services.s3.transfer` → `software.amazon.awssdk.transfer.s3`
+ **Nom de la classe** : `TransferManager` → `S3TransferManager`
+ **Dépendance du client** : client Amazon S3 synchrone → client Amazon S3 asynchrone () `S3AsyncClient`
+ **Architecture** : Opérations synchrones → Opérations asynchrones avec `CompletableFuture`
+ **Performances** : améliorées grâce au support AWS client basé sur CRT

## Changements de haut niveau
<a name="s3-tm-migration-high-level-changes"></a>


| Aspect | V1 | V2 | 
| --- | --- | --- | 
| Dépendance à Maven | aws-java-sdk-s3 | s3-transfer-manager | 
| Package | com.amazonaws.services.s3.transfer | software.amazon.awssdk.transfer.s3 | 
| Classe principale | TransferManager | S3TransferManager | 
| Client Amazon S3 | AmazonS3(synchronisation) | S3AsyncClient(asynchrone) | 
| Types de retours | Opérations de blocage | CompletableFuture<T> | 

## Dépendances de Maven
<a name="s3-tm-migration-dependencies"></a>


| V1 | V2 | 
| --- | --- | 
|  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>>1.12.7871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-s3</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.31.682</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>s3-transfer-manager</artifactId><br />    </dependency><br />    <!-- Optional: For enhanced performance with AWS CRT --><br />    <dependency><br />        <groupId>software.amazon.awssdk.crt</groupId><br />        <artifactId>aws-crt</artifactId><br />        <version>0.38.53</version><br />    </dependency><br /></dependencies></pre>  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom). 3 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk.crt/aws-crt).

## Migration du constructeur client
<a name="s3-tm-migration-client-constructor"></a>

### Constructeurs pris en charge (migration automatique)
<a name="s3-tm-migration-supported-constructors"></a>


| Constructeur V1 | équivalent V2 | État de la migration | 
| --- | --- | --- | 
| new TransferManager() | S3TransferManager.create() | Pris en charge | 
| TransferManagerBuilder. defaultTransferManager() | S3TransferManager.create() | Pris en charge | 
| TransferManagerBuilder. standard().build() | S3TransferManager.builder().build() | Pris en charge | 
| new TransferManager(AWSCredentials) | S3TransferManager.builder() .s3Client(S3AsyncClient.builder() .credentialsProvider(...).build()) .build() | Pris en charge | 
| new TransferManager( AWSCredentialsProvider) | S3TransferManager.builder() .s3Client(S3AsyncClient.builder() .credentialsProvider(...).build()) .build() | Pris en charge | 

### Constructeurs non pris en charge (migration manuelle requise)
<a name="s3-tm-migration-unsupported-constructors"></a>


| Constructeur V1 | équivalent V2 | Remarques sur la migration | 
| --- | --- | --- | 
| new TransferManager(AmazonS3) | Migration manuelle requise | Créez un S3AsyncClient séparément | 
| new TransferManager(AmazonS3, ExecutorService) | Migration manuelle requise | Création S3AsyncClient et configuration d'un exécuteur | 
| new TransferManager(AmazonS3, ExecutorService, boolean) | Migration manuelle requise | shutDownThreadPoolsparamètre non pris en charge | 

### Exemples de migration manuelle
<a name="s3-tm-migration-manual-examples"></a>

**Code V1 :**

```
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
TransferManager transferManager = new TransferManager(s3Client);
```

**Code V2 :**

```
// Create an `S3AsyncClient` with similar configuration
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
    .credentialsProvider(DefaultCredentialsProvider.create())
    .build();

// Provide the configured `S3AsyncClient` to the S3 transfer manager builder.
S3TransferManager transferManager = S3TransferManager.builder()
    .s3Client(s3AsyncClient)
    .build();
```

## Migration de la méthode client
<a name="s3-tm-migration-client-methods"></a>

Actuellement, l'outil de migration prend en charge les `resumeUpload` méthodes de base `copy` `download` `upload` `uploadDirectory``downloadDirectory`,`resumeDownload`,,, et.

### Méthodes de transfert de base
<a name="s3-tm-migration-core-transfer-methods"></a>


| Méthode V1 | Méthode V2 | Changement de type de retour | État de la migration | 
| --- | --- | --- | --- | 
| upload(String, String, File) | uploadFile(UploadFileRequest) | Upload → FileUpload | Pris en charge | 
| upload(PutObjectRequest) | upload(UploadRequest) | Upload → Upload | Pris en charge | 
| download(String, String, File) | downloadFile(DownloadFileRequest) | Download → FileDownload | Pris en charge | 
| download(GetObjectRequest, File) | downloadFile(DownloadFileRequest) | Download → FileDownload | Pris en charge | 
| copy(String, String, String, String) | copy(CopyRequest) | Copy → Copy | Pris en charge | 
| copy(CopyObjectRequest) | copy(CopyRequest) | Copy → Copy | Pris en charge | 
| uploadDirectory(String, String, File, boolean) | uploadDirectory( UploadDirectoryRequest) | MultipleFileUpload → DirectoryUpload | Pris en charge | 
| downloadDirectory(String, String, File) | downloadDirectory( DownloadDirectoryRequest) | MultipleFileDownload → DirectoryDownload | Pris en charge | 

### Méthodes de transfert pouvant être reprises
<a name="s3-tm-migration-resumable-methods"></a>


| Méthode V1 | Méthode V2 | État de la migration | 
| --- | --- | --- | 
| resumeUpload(PersistableUpload) | resumeUploadFile(ResumableFileUpload) | Pris en charge | 
| resumeDownload(PersistableDownload) | resumeDownloadFile(ResumableFileDownload) | Pris en charge | 

### Méthodes de cycle de vie
<a name="s3-tm-migration-lifecycle-methods"></a>


| Méthode V1 | Méthode V2 | État de la migration | 
| --- | --- | --- | 
| shutdownNow() | close() | Pris en charge | 
| shutdownNow(boolean) | Ajustez manuellement le code à l'aide de la close() méthode | Non pris en charge | 

### Méthodes client V1 non prises en charge
<a name="s3-tm-migration-unsupported-methods"></a>


| Méthode V1 | Alternative V2 | Remarques | 
| --- | --- | --- | 
| abortMultipartUploads(String, Date) | Utiliser le client Amazon S3 de bas niveau | Non pris en charge | 
| getAmazonS3Client() | Enregistrer une référence séparément | Non pris en charge ; aucun getter dans la version 2 | 
| getConfiguration() | Enregistrer une référence séparément | Non pris en charge ; aucun getter dans la version 2 | 
| uploadFileList(...) | Passez plusieurs uploadFile() appels | Non pris en charge | 
| copyméthodes avec un TransferStateChangeListener paramètre | Utilisation des TransferListener | [Voir l'exemple de migration manuelle](#tm-unsupported-client-methods-copy) | 
| downloadméthodes avec un S3ProgressListener paramètre | Utilisation des [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/transfer/s3/progress/TransferListener.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/transfer/s3/progress/TransferListener.html) | [Voir l'exemple de migration manuelle](#tm-unsupported-client-methods-download) | 
|  `downloadDirectory`méthodes avec 4 paramètres ou plus  |  | [Voir l'exemple de migration manuelle](#tm-unsupported-client-methods-download-dir) | 
| uploadméthode avec ObjectMetadataProvider paramètre | Définir les métadonnées dans la demande | [Voir l'exemple de migration manuelle](#tm-unsupported-client-methods-upload) | 
| uploadDirectoryméthodes avec \$1Provider paramètre | Définir les tags dans la demande | [Voir l'exemple de migration manuelle](#tm-unsupported-client-methods-uploadDirectory) | 

#### `copy`méthodes avec un `TransferStateChangeListener` paramètre
<a name="tm-unsupported-client-methods-copy"></a>
+ `copy(CopyObjectRequest copyObjectRequest, AmazonS3 srcS3, TransferStateChangeListener stateChangeListener)`
+ `copy(CopyObjectRequest copyObjectRequest, TransferStateChangeListener stateChangeListener)`

```
// V1 ----------------------------------------------------------------------------------------------
// Initialize source S3 client
AmazonS3 s3client = AmazonS3ClientBuilder.standard()
                .withRegion("us-west-2")
                .build();
                
// Initialize Transfer Manager
TransferManager tm = TransferManagerBuilder.standard()
                .withS3Client(srcS3)
                .build();

CopyObjectRequest copyObjectRequest = new CopyObjectRequest(
                "amzn-s3-demo-source-bucket",
                "source-key",         
                "amzn-s3-demo-destination-bucket", 
                "destination-key"    
        );

TransferStateChangeListener stateChangeListener = new TransferStateChangeListener() {
            @Override
            public void transferStateChanged(Transfer transfer, TransferState state) {
              //Implementation of the TransferStateChangeListener
            }
        };

Copy copy = tm.copy(copyObjectRequest, srcS3, stateChangeListener);


// V2 ----------------------------------------------------------------------------------------------
S3AsyncClient s3AsyncClient = S3AsyncClient.builder()
                .region(Region.US_WEST_2)          
                .build();

S3TransferManager transferManager = S3TransferManager.builder()
                .s3Client(s3AsyncClient)
                .build();

// Create transfer listener (equivalent to TransferStateChangeListener in v1)                                
TransferListener transferListener = new TransferListener() {
            @Override
            public void transferInitiated(Context.TransferInitiated context) {
               //Implementation
               System.out.println("Transfer initiated");
            }

            @Override
            public void bytesTransferred(Context.BytesTransferred context) {
                //Implementation
                System.out.println("Bytes transferred");
            }

            @Override
            public void transferComplete(Context.TransferComplete context) {
                //Implementation
                System.out.println("Transfer completed!");
            }

            @Override
            public void transferFailed(Context.TransferFailed context) {
                //Implementation
                System.out.println("Transfer failed");
            }
        };

CopyRequest copyRequest = CopyRequest.builder()
                              .copyObjectRequest(req -> req
                                  .sourceBucket("amzn-s3-demo-source-bucket")
                                  .sourceKey("source-key")
                                  .destinationBucket("amzn-s3-demo-destination-bucket")
                                  .destinationKey("destination-key")
                               )
                                .addTransferListener(transferListener) // Configure the transferListener into the request
                                .build();
  
Copy copy = transferManager.copy(copyRequest);
```

#### `download`méthodes avec un `S3ProgressListener` paramètre
<a name="tm-unsupported-client-methods-download"></a>
+ `download(GetObjectRequest getObjectRequest, File file, S3ProgressListener progressListener)`
+ `download(GetObjectRequest getObjectRequest, File file, S3ProgressListener progressListener, long timeoutMillis)`
+ `download(GetObjectRequest getObjectRequest, File file, S3ProgressListener progressListener, long timeoutMillis, boolean resumeOnRetry)`

```
// V1 ----------------------------------------------------------------------------------------------
S3ProgressListener progressListener = new S3ProgressListener() {
        @Override
        public void progressChanged(com.amazonaws.event.ProgressEvent progressEvent) {
            long bytes = progressEvent.getBytesTransferred();
            ProgressEventType eventType = progressEvent.getEventType();
            // Use bytes and eventType as needed
        }

        @Override
        public void onPersistableTransfer(PersistableTransfer persistableTransfer) {

        }
    };

Download download1 = tm.download(getObjectRequest, file, progressListener); 
Download download2 = tm.download(getObjectRequest, file, progressListener, timeoutMillis)
Download download3 = tm.download(getObjectRequest, file, progressListener, timeoutMillis, true)

// V2 ----------------------------------------------------------------------------------------------
TransferListener transferListener = new TransferListener() {
    @Override
    public void transferInitiated(Context.InitializedContext context) {
        // Equivalent to ProgressEventType.TRANSFER_STARTED_EVENT
        System.out.println("Transfer initiated");
    }

    @Override
    public void bytesTransferred(Context.BytesTransferred context) {
        // Equivalent to ProgressEventType.REQUEST_BYTE_TRANSFER_EVENT
        long bytes = context.bytesTransferred();
        System.out.println("Bytes transferred: " + bytes);
    }

    @Override
    public void transferComplete(Context.TransferComplete context) {
        // Equivalent to ProgressEventType.TRANSFER_COMPLETED_EVENT
        System.out.println("Transfer completed");
    }

    @Override
    public void transferFailed(Context.TransferFailed context) {
        // Equivalent to ProgressEventType.TRANSFER_FAILED_EVENT
        System.out.println("Transfer failed: " + context.exception().getMessage());
    }
};
DownloadFileRequest downloadFileRequest = 
                         DownloadFileRequest.builder()
                             .getObjectRequest(getObjectRequest)
                             .destination(file.toPath())
                             .addTransferListener(transferListener)
                             .build();

// For download1
FileDownload download = transferManager.downloadFile(downloadFileRequest);

// For download2
CompletedFileDownload completedFileDownload = download.completionFuture()
                                                  .get(timeoutMillis, TimeUnit.MILLISECONDS);

// For download3, the v2 SDK does not have a direct equiavalent to the `resumeOnRetry` method of v1.
// If a download is interrupted, you need to start a new download request.
```

#### `downloadDirectory`méthodes avec 4 paramètres ou plus
<a name="tm-unsupported-client-methods-download-dir"></a>
+ `downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, boolean resumeOnRetry)`
+ `downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, boolean resumeOnRetry, KeyFilter filter)`
+ `downloadDirectory(String bucketName, String keyPrefix, File destinationDirectory, KeyFilter filter)`

```
// V1 ----------------------------------------------------------------------------------------------
KeyFilter filter = new KeyFilter() {
            @Override
            public boolean shouldInclude(S3ObjectSummary objectSummary) {
                //Filter implementation
            }
        };
MultipleFileDownload multipleFileDownload = tm.downloadDirectory(bucketName, keyPrefix, destinationDirectory, filter);

// V2 ----------------------------------------------------------------------------------------------
// The v2 SDK does not have a direct equiavalent to the `resumeOnRetry` method of v1.
// If a download is interrupted, you need to start a new download request.
DownloadFilter filter = new DownloadFilter() {
            @Override
            public boolean test(S3Object s3Object) {
                // Filter implementation.
            }
        };

DownloadDirectoryRequest downloadDirectoryRequest = 
                              DownloadDirectoryRequest.builder()
                                  .bucket(bucketName)
                                  .filter(filter)
                                  .listObjectsV2RequestTransformer(builder -> builder.prefix(keyPrefix))
                                  .destination(destinationDirectory.toPath())
                                  .build();
                                                                            
DirectoryDownload directoryDownload = transferManager.downloadDirectory(downloadDirectoryRequest);
```

#### `upload`méthode avec `ObjectMetadata` paramètre
<a name="tm-unsupported-client-methods-upload"></a>
+ `upload(String bucketName, String key, InputStream input, ObjectMetadata objectMetadata)`

```
// V1 ----------------------------------------------------------------------------------------------ObjectMetadata metadata = new ObjectMetadata();
ObjectMetadata metadata = new ObjectMetadata();

metadata.setContentType("text/plain");        // System-defined metadata
metadata.setContentLength(22L);               // System-defined metadata
metadata.addUserMetadata("myKey", "myValue"); // User-defined metadata

PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream, metadata);

Upload upload = transferManager.upload("amzn-s3-demo-bucket", "my-key", inputStream, metadata);

// V2 ----------------------------------------------------------------------------------------------
/* When you use an InputStream to upload in V2, you should specify the content length 
   and use `RequestBody.fromInputStream()`. 
   If you don't provide the content length, the entire stream will be buffered in memory. 
   If you can't determine the content length, we recommend using the CRT-based S3 client.
*/
Map<String, String> userMetadata = new HashMap<>();
userMetadata.put("x-amz-meta-myKey", "myValue");

PutObjectRequest putObjectRequest = 
                        PutObjectRequest.builder()
                            .bucket("amzn-s3-demo-bucket1")
                            .key("k")
                            .contentType("text/plain") //System-defined metadata usually has separate methods in the builder.
                            .contentLength(22L)
                            .metadata(userMetadata) //metadata() is only for user-defined metadata.
                            .build();

UploadRequest uploadRequest = 
                        UploadRequest.builder()
                            .putObjectRequest(putObjectRequest)
                            .requestBody(AsyncRequestBody.fromInputStream(stream, 22L, executor))
                            .build();
                                                   
transferManager.upload(uploadRequest).completionFuture().join();
```

#### `uploadDirectory`avec `ObjectMetadataProvider` paramètre
<a name="tm-unsupported-client-methods-uploadDirectory"></a>
+ `uploadDirectory(String bucketName, String virtualDirectoryKeyPrefix, File directory, boolean includeSubdirectories, ObjectMetadataProvider metadataProvider)`
+ `uploadDirectory(String bucketName, String virtualDirectoryKeyPrefix, File directory, boolean includeSubdirectories, ObjectMetadataProvider metadataProvider, ObjectTaggingProvider taggingProvider)`
+ `uploadDirectory(String bucketName, String virtualDirectoryKeyPrefix, File directory, boolean includeSubdirectories, ObjectMetadataProvider metadataProvider, ObjectTaggingProvider taggingProvider, ObjectCannedAclProvider cannedAclProvider)`

```
// V1 ----------------------------------------------------------------------------------------------
tm.uploadDirectory(bucketName, virtualDirectoryKeyPrefix, directory, includeSubdirectories, metadataProvider)
tm.uploadDirectory(bucketName, virtualDirectoryKeyPrefix, directory, includeSubdirectories, metadataProvider, taggingProvider)
tm.uploadDirectory(bucketName, virtualDirectoryKeyPrefix, directory, includeSubdirectories, metadataProvider, taggingProvider, cannedAclProvider)

// V2 ----------------------------------------------------------------------------------------------
UploadDirectoryRequest request = UploadDirectoryRequest.builder()
                                  .bucket(bucketName)
                                  .s3Prefix(virtualDirectoryKeyPrefix)
                                  .source(directory.toPath())
                                  .maxDepth(includeSubdirectories ? Integer.MAX_VALUE : 1)
                                  .uploadFileRequestTransformer(builder -> {
                                      // 1.Replace `ObjectMetadataProvider`, `ObjectTaggingProvider`, and `ObjectCannedAclProvider` with an
                                        // `UploadFileRequestTransformer` that can combine the functionality of all three *Provider implementations.
                                        // 2. Convert your v1 `ObjectMetadata` to v2 `PutObjectRequest` parameters.
                                        // 3. Convert your v1 `ObjectTagging` to v2 `Tagging`.
                                        // 4. Convert your v1 `CannedAccessControlList` to v2 `ObjectCannedACL`.
                                  })
                                  .build();
        
DirectoryUpload directoryUpload = transferManager.uploadDirectory(request);
```

## Migration d'objets du modèle
<a name="s3-tm-migration-model-objects"></a>

En AWS SDK for Java 2.x, de nombreux objets du `TransferManager` modèle ont été redessinés et plusieurs méthodes getter et setter disponibles dans les objets modèle de la version 1 ne sont plus prises en charge. 

Dans la version 2, vous pouvez utiliser la `CompletableFuture<T>` classe pour effectuer des actions une fois le transfert terminé, que ce soit avec succès ou avec une exception. Vous pouvez utiliser `join()` cette méthode pour attendre la fin si nécessaire. 

### Objets de transfert principaux
<a name="s3-tm-migration-core-transfer-objects"></a>


| Classe V1 | Classe V2 | État de la migration | 
| --- | --- | --- | 
| TransferManager | S3TransferManager | Pris en charge | 
| TransferManagerBuilder | S3TransferManager.Builder | Pris en charge | 
| Transfer | Transfer | Pris en charge | 
| AbortableTransfer | Transfer | Pris en charge (pas de classe séparée) | 
| Copy | Copy | Pris en charge | 
| Download | FileDownload | Pris en charge | 
| Upload | Upload / FileUpload | Pris en charge | 
| MultipleFileDownload | DirectoryDownload | Pris en charge | 
| MultipleFileUpload | DirectoryUpload | Pris en charge | 

### Objets de persistance
<a name="s3-tm-migration-persistence-objects"></a>


| Classe V1 | Classe V2 | État de la migration | 
| --- | --- | --- | 
| PersistableDownload | ResumableFileDownload | Pris en charge | 
| PersistableUpload | ResumableFileUpload | Pris en charge | 
| PersistableTransfer | ResumableTransfer | Pris en charge | 
| PauseResult<T> | Objet directement réutilisable | Non pris en charge | 

### Objets de résultat
<a name="s3-tm-migration-result-objects"></a>


| Classe V1 | Classe V2 | État de la migration | 
| --- | --- | --- | 
| CopyResult | CompletedCopy | Pris en charge | 
| UploadResult | CompletedUpload | Pris en charge | 

### Objets de configuration
<a name="s3-tm-migration-configuration-objects"></a>


| Classe V1 | Classe V2 | État de la migration | 
| --- | --- | --- | 
| TransferManagerConfiguration | MultipartConfiguration(sur le client Amazon S3) | Pris en charge | 
| TransferProgress | TransferProgress \$1 TransferProgressSnapshot | Pris en charge | 
| KeyFilter | DownloadFilter | Pris en charge | 

### Objets non pris en charge
<a name="s3-tm-migration-unsupported-objects"></a>


| Classe V1 | Alternative V2 | État de la migration | 
| --- | --- | --- | 
| PauseStatus | Non pris en charge | Non pris en charge | 
| UploadContext | Non pris en charge | Non pris en charge | 
| ObjectCannedAclProvider | PutObjectRequest.builder().acl() | Non pris en charge | 
| ObjectMetadataProvider | PutObjectRequest.builder().metadata() | Non pris en charge | 
| ObjectTaggingProvider | PutObjectRequest.builder().tagging() | Non pris en charge | 
| PresignedUrlDownload | Non pris en charge | Non pris en charge | 

## TransferManagerBuilder migration de configuration
<a name="s3-tm-migration-builder-configuration"></a>

### Configuration changes
<a name="migration-transfer-manager-config-changes"></a>

Les modifications de configuration que vous devez définir pour le gestionnaire de transfert v2 dépendent du client S3 que vous utilisez. Vous avez le choix entre le client S3 AWS basé sur CRT ou le client asynchrone S3 standard basé sur Java. Pour plus d'informations sur les différences, consultez la [clients S3 dans le AWS SDK for Java 2.x](examples-s3.md#s3-clients) rubrique.

------
#### [ Use the AWS CRT-based S3 client ]


****  

| Paramètre | v1 | v2 - Gestionnaire de transfert utilisant un client S3 AWS basé sur CRT | 
| --- | --- | --- | 
|    (trouvez un constructeur)  |  <pre>TransferManagerBuilder tmBuilder = <br />   TransferManagerBuilder.standard();</pre>  |  <pre>S3TransferManager.Builder tmBuilder  = <br />  S3TransferManager.builder();</pre>  | 
|    Client S3  |  <pre>tmBuilder.withS3Client(...);<br />tmBuilder.setS3Client(...);</pre>  |  <pre>tmBuilder.s3Client(...);</pre>  | 
|    Exécuteur  |  <pre>tmBuilder.withExecutorFactory(...);<br />tmBuilder.setExecutorFactory(...);</pre>  |  <pre>tmBuilder.executor(...);</pre>  | 
|    Arrêter les pools de threads  |  <pre>tmBuilder.withShutDownThreadPools(...);<br />tmBuilder.setShutdownThreadPools(...);</pre>  | Non pris en charge. L'exécuteur fourni ne sera pas arrêté à la fermeture du S3TransferManager | 
|    Taille minimale de la pièce à télécharger  |  <pre>tmBuilder.withMinimumUploadPartSize(...);<br />tmBuilder.setMinimumUploadPartSize(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.crtBuilder().<br />      minimumPartSizeInBytes(...).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Seuil de téléchargement en plusieurs parties  |  <pre>tmBuilder.withMultipartUploadThreshold(...);<br />tmBuilder.setMultipartUploadThreshold(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.crtBuilder().<br />      thresholdInBytes(...).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Taille minimale des parties de copie  |  <pre>tmBuilder.withMultipartCopyPartSize(...);<br />tmBuilder.setMultipartCopyPartSize(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.crtBuilder().<br />      minimumPartSizeInBytes(...).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Seuil de copie en plusieurs parties  |  <pre>tmBuilder.withMultipartCopyThreshold(...);<br />tmBuilder.setMultipartCopyThreshold(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.crtBuilder().<br />      thresholdInBytes(...).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Désactiver les téléchargements parallèles  |  <pre>tmBuilder.withDisableParallelDownloads(...);<br />tmBuilder.setDisableParallelDownloads(...);</pre>  | Désactivez les téléchargements parallèles en transmettant un client S3 standard basé sur Java avec le multipart désactivé (par défaut) au gestionnaire de transfert.<pre>S3AsyncClient s3 =<br />   S3AsyncClient.builder().build();<br /><br />tmBuilder.s3Client(s3);</pre> | 
|    Calculez toujours le md5 en plusieurs parties  |  <pre>tmBuilder.withAlwaysCalculateMultipartMd5(...);<br />tmBuilder.setAlwaysCalculateMultipartMd5(...);</pre>  | Non pris en charge. | 

------
#### [ Use Java-based S3 async client ]


****  

| Paramètre | v1 | v2 - Gestionnaire de transfert utilisant un client asynchrone S3 basé sur Java | 
| --- | --- | --- | 
|    (trouvez un constructeur)  |  <pre>TransferManagerBuilder tmBuilder = <br />   TransferManagerBuilder.standard();</pre>  |  <pre>S3TransferManager.Builder tmBuilder  = <br />  S3TransferManager.builder();</pre>  | 
|    Client S3  |  <pre>tmBuilder.withS3Client(...);<br />tmBuilder.setS3Client(...);</pre>  |  <pre>tmBuilder.s3Client(...);</pre>  | 
|    Exécuteur  |  <pre>tmBuilder.withExecutorFactory(...);<br />tmBuilder.setExecutorFactory(...);</pre>  |  <pre>tmBuilder.executor(...);</pre>  | 
|    Arrêter les pools de threads  |  <pre>tmBuilder.withShutDownThreadPools(...);<br />tmBuilder.setShutdownThreadPools(...);</pre>  | Non pris en charge. L'exécuteur fourni ne sera pas arrêté à la fermeture du S3TransferManager | 
|    Taille minimale de la pièce à télécharger  |  <pre>tmBuilder.withMinimumUploadPartSize(...);<br />tmBuilder.setMinimumUploadPartSize(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.builder()<br />    .multipartConfiguration(cfg -><br />        cfg.minimumPartSizeInBytes(...)).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Seuil de téléchargement en plusieurs parties  |  <pre>tmBuilder.withMultipartUploadThreshold(...);<br />tmBuilder.setMultipartUploadThreshold(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.builder()<br />    .multipartConfiguration(cfg -><br />        cfg.thresholdInBytes(...)).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Taille minimale des parties de copie  |  <pre>tmBuilder.withMultipartCopyPartSize(...);<br />tmBuilder.setMultipartCopyPartSize(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.builder()<br />    .multipartConfiguration(cfg -><br />        cfg.minimumPartSizeInBytes(...)).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Seuil de copie en plusieurs parties  |  <pre>tmBuilder.withMultipartCopyThreshold(...);<br />tmBuilder.setMultipartCopyThreshold(...);</pre>  |  <pre>S3AsyncClient s3 = S3AsyncClient.builder()<br />    .multipartConfiguration(cfg -><br />        cfg.thresholdInBytes(...)).build();<br /><br />tmBuilder.s3Client(s3);</pre>  | 
|    Désactiver les téléchargements parallèles  |  <pre>tmBuilder.withDisableParallelDownloads(...);<br />tmBuilder.setDisableParallelDownloads(...);</pre>  | Désactivez les téléchargements parallèles en transmettant un client S3 standard basé sur Java avec le multipart désactivé (par défaut) au gestionnaire de transfert.<pre>S3AsyncClient s3 =<br />   S3AsyncClient.builder().build();<br /><br />tmBuilder.s3Client(s3);</pre> | 
|    Calculez toujours le md5 en plusieurs parties  |  <pre>tmBuilder.withAlwaysCalculateMultipartMd5(...);<br />tmBuilder.setAlwaysCalculateMultipartMd5(...);</pre>  | Non pris en charge. | 

------

## Changements de comportement
<a name="s3-tm-migration-behavior-changes"></a>

### Opérations asynchrones
<a name="s3-tm-migration-async-operations"></a>

**V1 (blocage) :**

```
Upload upload = transferManager.upload("amzn-s3-demo-bucket", "key", file);
upload.waitForCompletion(); // Blocks until complete
```

**V2 (asynchrone) :**

```
FileUpload upload = transferManager.uploadFile(UploadFileRequest.builder()
    .putObjectRequest(PutObjectRequest.builder()
        .bucket("amzn-s3-demo-bucket")
        .key("key")
        .build())
    .source(file)
    .build());

CompletedFileUpload result = upload.completionFuture().join(); // Blocks until complete
// Or handle asynchronously:
upload.completionFuture().thenAccept(result -> {
    System.out.println("Upload completed: " + result.response().eTag());
});
```

### Gestion des erreurs
<a name="s3-tm-migration-error-handling"></a>

**V1 :** Les transferts de répertoire échouent complètement si une sous-requête échoue.

**V2 :** Les transferts de répertoire se terminent avec succès même si certaines sous-requêtes échouent. Vérifiez les erreurs de manière explicite :

```
DirectoryUpload directoryUpload = transferManager.uploadDirectory(request);
CompletedDirectoryUpload result = directoryUpload.completionFuture().join();

// Check for failed transfers
if (!result.failedTransfers().isEmpty()) {
    System.out.println("Some uploads failed:");
    result.failedTransfers().forEach(failed -> 
        System.out.println("Failed: " + failed.exception().getMessage()));
}
```

### Téléchargement parallèle via des extractions par plage d'octets
<a name="migration-transfer-manager-behavior-fetches"></a>

Lorsque la fonction de transfert parallèle automatique est activée dans le SDK v2, le gestionnaire de transfert S3 utilise des extractions par [plage d'octets pour récupérer des](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance-guidelines.html#optimizing-performance-guidelines-get-range) parties spécifiques de l'objet en parallèle (téléchargement en plusieurs parties). La façon dont un objet est téléchargé avec la version v2 ne dépend pas de la manière dont l'objet a été initialement chargé. Tous les téléchargements peuvent bénéficier d'un débit élevé et d'une simultanéité. 

En revanche, avec le gestionnaire de transfert de la version 1, la manière dont l'objet a été initialement chargé est importante. Le gestionnaire de transfert v1 récupère les parties de l'objet de la même manière que les parties ont été téléchargées. Si un objet a été initialement chargé en tant qu'objet unique, le gestionnaire de transfert v1 n'est pas en mesure d'accélérer le processus de téléchargement en utilisant des sous-requêtes.

# Modifications apportées à l'analyse d'Amazon S3 URIs de la version 1 à la version 2
<a name="migration-s3-uri-parser"></a>

Cette rubrique détaille les modifications apportées à l'analyse d'Amazon S3 URIs entre la version 1 (v1) et la version 2 (v2.).

## Changements de haut niveau
<a name="migration-3-uri-parser-api-changes"></a>

Pour commencer à analyser un URI S3 dans la version 1, vous instanciez un URI à l'aide `AmazonS3URI` d'un constructeur. Dans la v2, vous `parseUri()` faites appel à une instance de`S3Utilities`, pour renvoyer un`S3URI`.


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.5871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency>  <br />        <groupId>com.amazonaws</groupId><br />        <artifactId>s3</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.212</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>s3</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package | com.amazonaws.services.s3 | software.amazon.awssdk.services.s3 | 
| Noms des classes | [AmazonS3URI](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3URI.html) | [S3URI](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Uri.html) | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Modifications de l'API
<a name="migration-3-uri-parser-api-changes"></a>


| Comportement | v1 |   v2 | 
| --- | --- | --- | 
| Analyse un URI S3. |  <pre>URI uri = URI.create( "https://s3.amazonaws.com");<br /><br />AmazonS3Uri s3Uri = <br />    new AmazonS3URI(uri, false);</pre>  |  <pre>S3Client s3Client = S3Client.create();<br />S3Utilities s3Utilities =<br />    s3Client.utilities();<br /><br />S3Uri s3Uri =<br />    s3Utilities.parseUri(uri);</pre>  | 
| Récupérez le nom du compartiment à partir d'une URI S3. |  <pre>String bucket = s3Uri.getBucket();</pre>  |  <pre>Optional<String> bucket = s3Uri.bucket();</pre>  | 
| Récupérez la clé. |  <pre>String key = s3Uri.getKey();</pre>  |  <pre>Optional<String> key = s3Uri.key();</pre>  | 
| Récupérez la région. |  <pre>String region = s3Uri.getRegion();</pre>  |  <pre>Optional<Region> region = s3Uri.region();<br /><br />String region;<br />if (s3Uri.region().isPresent()) {<br />    region = s3Uri.region().get().id();<br />}</pre>  | 
|  Vérifiez si l'URI S3 est un style de chemin.  |  <pre>boolean isPathStyle = s3Uri.isPathStyle();</pre>  |  <pre>boolean isPathStyle = s3Uri.isPathStyle();</pre>  | 
| Récupérez l'ID de version. |  <pre>String versionId = s3Uri.getVersionId();</pre>  |  <pre>Optional<String> versionId = <br />    s3Uri.firstMatchingRawQueryParameter("versionId");</pre>  | 
| Récupérez les paramètres de requête. | N/A |  <pre>Map<String, List<String>> queryParams =<br />    s3Uri.rawQueryParameters();</pre>  | 

### Changements de comportement
<a name="migration-s3-uri-parser-behavior-changes"></a>

#### Codage d'URL
<a name="migration-s3-uri-parser-behavior-changes-URLencoding"></a>

v1 fournit la possibilité de transmettre un indicateur pour spécifier si l'URI doit être codé en URL. La valeur par défaut est `true`. 

Dans la version 2, le codage d'URL n'est pas pris en charge. Si vous travaillez avec des clés d'objet ou des paramètres de requête contenant des caractères réservés ou non sécurisés, vous devez les encoder par URL. Par exemple, vous devez remplacer un espace blanc `" "` par`%20`.

# Modifications apportées à l'API de notifications d'événements S3 de la version 1 à la version 2
<a name="migration-s3-event-notification"></a>

Cette rubrique détaille les modifications apportées à l'API de notifications d'événements S3 de la version 1.x (v1) à la version 2.x (v2) du. AWS SDK pour Java

## Changements de haut niveau
<a name="migration-s3-event-notification-hl"></a>

### Changements structurels
<a name="migration-s3-event-notification-hl-struct"></a>

La V1 utilise des classes internes statiques pour les `EventNotificationRecord` types et leurs attributs, tandis que la v2 utilise des classes publiques distinctes pour les `EventNotificationRecord` types.

### Modifications des conventions de dénomination
<a name="migration-s3-event-notification-hl-naming"></a>

Dans la version 1, les noms des classes d'attributs incluent le suffixe *Entity*, tandis que la version 2 omet ce suffixe pour simplifier la dénomination : par exemple, *EventData* au lieu de. *eventDataEntity*

## Changements dans les dépendances, les packages et les noms de classe
<a name="migration-s3-event-notification-deps"></a>

Dans la version 1, les classes de l'API de notification d'événements S3 sont importées de manière transitive avec le module S3 (ArtifactiD`aws-java-sdk-s3`). Cependant, dans la version 2, vous devez ajouter une dépendance à l'`s3-event-notifications`artefact.


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.X.X</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-s3</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.X.X1</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>s3-event-notifications</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package | com.amazonaws.services.s3.event | software.amazon.awssdk.eventnotifications.s3.model | 
| Noms des classes |  [S3EventNotification](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.html) [S3 EventNotification S.3 EventNotificationRecord](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.S3EventNotificationRecord.html) [S3EventNotification. GlacierEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.GlacierEventDataEntity.html) [S3EventNotification. IntelligentTieringEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.IntelligentTieringEventDataEntity.html) [S3EventNotification. LifecycleEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.LifecycleEventDataEntity.html) [S3EventNotification. ReplicationEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.ReplicationEventDataEntity.html) [S3EventNotification. RequestParametersEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.RequestParametersEntity.html) [S3EventNotification. ResponseElementsEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.ResponseElementsEntity.html) [S3EventNotification. RestoreEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.RestoreEventDataEntity.html) [S3 EventNotification S.3 BucketEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.S3BucketEntity.html) [Entité S3 EventNotification .S3](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.S3Entity.html) [S3 EventNotification S.3 ObjectEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.S3ObjectEntity.html) [S3EventNotification. TransitionEventDataEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.TransitionEventDataEntity.html) [S3EventNotification. UserIdentityEntity](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/event/S3EventNotification.UserIdentityEntity.html)  |   [S3EventNotification](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/S3EventNotification.html) [S3EventNotificationRecord](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/S3EventNotificationRecord.html) [GlacierEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/GlacierEventData.html) [IntelligentTieringEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/IntelligentTieringEventData.html) [LifecycleEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/LifecycleEventData.html) [ReplicationEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/ReplicationEventData.html) [RequestParameters](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/RequestParameters.html) [ResponseElements](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/ResponseElements.html) [RestoreEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/RestoreEventData.html) [S3Bucket](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/S3Bucket.html) [S3](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/S3.html) [Objet S3](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/S3Object.html) [TransitionEventData](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/TransitionEventData.html) [UserIdentity](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/eventnotifications/s3/model/UserIdentity.html)  | 

1 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Modifications de l'API
<a name="migration-s3-event-notification-API-changes"></a>

### JSON vers `S3EventNotification` et inversement
<a name="migration-s3-event-notification-API-changes-conv"></a>


| Cas d’utilisation | v1 |   v2 | 
| --- | --- | --- | 
| Créer S3EventNotification à partir d'une chaîne JSON |  <pre>S3EventNotification notification = <br />        S3EventNotification.parseJson(message.body());</pre>  |  <pre>S3EventNotification notification = <br />        S3EventNotification.fromJson(message.body());</pre>  | 
| Convertir S3EventNotification en chaîne JSON |  <pre>String json = notification.toJson();</pre>  |  <pre>String json = notification.toJson();</pre>  | 

### Attributs d'accès de `S3EventNotification`
<a name="migration-s3-event-notification-API-changes-attr"></a>


| Cas d’utilisation | v1 |   v2 | 
| --- | --- | --- | 
| Récupérer des enregistrements à partir d'une notification |  <pre>List<S3EventNotification.S3EventNotificationRecord> records = <br />        notifcation.getRecords();</pre>  |  <pre>List<S3EventNotificationRecord> records = <br />        notification.getRecords();</pre>  | 
| Récupérer un enregistrement à partir d'une liste d'enregistrements |  <pre>S3EventNotification.S3EventNotificationRecord record = <br />        records.stream().findAny().get();</pre>  |  <pre>S3EventNotificationRecord record = <br />        records.stream().findAny().get();</pre>  | 
| Récupérer les données des événements Glacier |  <pre>S3EventNotification.GlacierEventDataEntity glacierEventData =<br />        record.getGlacierEventData();</pre>  |  <pre>GlacierEventData glacierEventData = <br />        record.getGlacierEventData();</pre>  | 
| Récupérer les données d'un événement de restauration à partir d'un événement Glacier |  <pre>S3EventNotification.RestoreEventDataEntity restoreEventData = <br />        glacierEventData.getRestoreEventDataEntity();</pre>  |  <pre>RestoreEventData restoreEventData = <br />        glacierEventData.getRestoreEventData();</pre>  | 
| Récupérer les paramètres de la demande |  <pre>S3EventNotification.RequestParametersEntity requestParameters = <br />        record.getRequestParameters();</pre>  |  <pre>RequestParameters requestParameters = <br />        record.getRequestParameters();</pre>  | 
| Récupérez les données des événements liés à la hiérarchisation intelligente |  <pre>S3EventNotification.IntelligentTieringEventDataEntity tieringEventData = <br />        record.getIntelligentTieringEventData();</pre>  |  <pre>IntelligentTieringEventData intelligentTieringEventData = <br />        record.getIntelligentTieringEventData();</pre>  | 
| Récupérez les données des événements du cycle de vie |  <pre>S3EventNotification.LifecycleEventDataEntity lifecycleEventData = <br />        record.getLifecycleEventData();</pre>  |  <pre>LifecycleEventData lifecycleEventData = <br />        record.getLifecycleEventData();</pre>  | 
| Récupère le nom de l'événement sous forme d'énumération |  <pre>S3Event eventNameAsEnum = record.getEventNameAsEnum();</pre>  |  <pre>//getEventNameAsEnum does not exist; use 'getEventName()'<br />String eventName = record.getEventName();</pre>  | 
| Récupérer les données des événements de réplication |  <pre>S3EventNotification.ReplicationEventDataEntity replicationEntity = <br />        record.getReplicationEventDataEntity();</pre>  |  <pre>ReplicationEventData replicationEventData = <br />        record.getReplicationEventData();</pre>  | 
| Récupérez les informations relatives au compartiment et à l'objet S3 |  <pre>S3EventNotification.S3Entity s3 = record.getS3();</pre>  |  <pre>S3 s3 = record.getS3();</pre>  | 
| Récupérer les informations d'identité de l'utilisateur |  <pre>S3EventNotification.UserIdentityEntity userIdentity = <br />        record.getUserIdentity();</pre>  |  <pre>UserIdentity userIdentity = <br />        record.getUserIdentity();</pre>  | 
| Récupérez les éléments de réponse |  <pre>S3EventNotification.ResponseElementsEntity responseElements = <br />        record.getResponseElements();</pre>  |  <pre>ResponseElements responseElements = <br />        record.getResponseElements();</pre>  | 

## Migrer la version `aws-lambda-java-events` de la bibliothèque
<a name="migration-s3-events-notification-lambda-lib"></a>

Si vous avez l'habitude [aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs/tree/main/aws-lambda-java-events)de travailler avec des événements de notification S3 dans le cadre d'une fonction Lambda, nous vous recommandons de passer à la dernière version 3.x.x. Les versions récentes éliminent toutes les dépendances à la version AWS SDK pour Java 1.x de l'API de notification d'événements S3.

Pour plus d'informations sur les différences de gestion des notifications d'événements S3 entre la `aws-lambda-java-events` bibliothèque et le SDK for Java 2.x, consultez. [Traitez les événements S3 dans Lambda avec les bibliothèques Java : et AWS SDK for Java 2.x `aws-lambda-java-events`](examples-s3-event-notifications.md#s3-event-notif-processing-options)

# Modifications du fichier de profil
<a name="migration-profile-file"></a>

Il AWS SDK for Java 2.x analyse les définitions de profil dans `~/.aws/config` et `~/.aws/credentials` pour émuler de plus près la façon dont la AWS CLI analyse les fichiers.

Le SDK pour Java 2.x :
+ Résout un `~/` ou `~` suivi par le séparateur de chemin par défaut du système de fichiers au début du chemin en vérifiant, dans l'ordre`$HOME`,, `$USERPROFILE` (Windows uniquement)`$HOMEDRIVE`,, `$HOMEPATH` (Windows uniquement), puis la propriété du `user.home` système.
+ Cherche la variable d'`AWS_SHARED_CREDENTIALS_FILE`environnement au lieu de`AWS_CREDENTIAL_PROFILES_FILE`.
+ Supprime silencieusement les définitions de profil dans les fichiers de configuration sans le mot `profile` au début du nom du profil.
+ Supprime silencieusement les définitions de profil qui ne sont pas composées de caractères alphanumériques, de traits de soulignement ou de tirets (une fois que le premier `profile` mot a été supprimé pour les fichiers de configuration).
+ Fusionne les paramètres des définitions de profil dupliquées dans le même fichier.
+ Fusionne les paramètres des définitions de profil dupliquées dans les fichiers de configuration et d'identification.
+ Ne fusionne PAS les paramètres si `[profile foo]` `[foo]` les deux se trouvent dans le même fichier.
+ Utilise les paramètres `[profile foo]` si `[profile foo]` les deux se `[foo]` trouvent dans le fichier de configuration.
+ Utilise la valeur du dernier paramètre dupliqué dans le même fichier et le même profil.
+ Reconnaît les deux `;` et `#` permet de définir un commentaire.
+ Reconnaît `;` et permet de définir un commentaire `#` dans les définitions de profil, même si les caractères sont adjacents au crochet de fermeture.
+ Reconnaît `;` et `#` définit un commentaire uniquement en définissant des valeurs uniquement si elles sont précédées d'un espace.
+ Reconnaît `;` `#` et tous les contenus suivants lors de la définition des valeurs s'ils ne sont pas précédés d'espaces.
+ Considère les informations d'identification basées sur les rôles comme les informations d'identification les plus prioritaires. Le SDK 2.x utilise toujours des informations d'identification basées sur les rôles si l'utilisateur spécifie la propriété. `role_arn`
+ Considère les informations d'identification basées sur les sessions comme des informations d'identification. second-highest-priority Le SDK 2.x utilise toujours les informations d'identification basées sur les sessions si les informations d'identification basées sur les rôles n'ont pas été utilisées et que l'utilisateur spécifie les propriétés et. `aws_access_key_id` `aws_session_token`
+ Utilise les informations d'identification de base si les informations d'identification basées sur les rôles et les sessions ne sont pas utilisées et si l'utilisateur a spécifié la propriété. `aws_access_key_id`

# Variables d'environnement et modifications des propriétés du système
<a name="migration-env-and-system-props"></a>


| Variable d'environnement 1.x | Propriété du système 1.x | Variable d'environnement 2.x | Propriété du système 2.x | 
| --- | --- | --- | --- | 
| AWS\$1ACCESS\$1KEY\$1IDAWS\$1ACCESS\$1KEY | aws.accessKeyId | AWS\$1ACCESS\$1KEY\$1ID | aws.accessKeyId | 
| AWS\$1SECRET\$1KEYAWS\$1SECRET\$1ACCESS\$1KEY | aws.secretKey | AWS\$1SECRET\$1ACCESS\$1KEY | aws.secretAccessKey | 
| AWS\$1SESSION\$1TOKEN | aws.sessionToken | AWS\$1SESSION\$1TOKEN | aws.sessionToken | 
| AWS\$1REGION | aws.region | AWS\$1REGION | aws.region | 
| AWS\$1CONFIG\$1FILE |   | AWS\$1CONFIG\$1FILE | aws.configFile | 
| AWS\$1CREDENTIAL\$1PROFILES\$1FILE |   | AWS\$1SHARED\$1CREDENTIALS\$1FILE | aws.sharedCredentialsFile | 
| AWS\$1PROFILE | aws.profile | AWS\$1PROFILE | aws.profile | 
| AWS\$1EC2\$1METADATA\$1DISABLED | com.amazonaws.sdk.disableEc2Metadata | AWS\$1EC2\$1METADATA\$1DISABLED | aws.disableEc2Metadata | 
|   | com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | AWS\$1EC2\$1METADATA\$1SERVICE\$1ENDPOINT | aws.ec2MetadataServiceEndpoint | 
| AWS\$1CONTAINER\$1CREDENTIALS\$1RELATIVE\$1URI |   | AWS\$1CONTAINER\$1CREDENTIALS\$1RELATIVE\$1URI | aws.containerCredentialsPath | 
| AWS\$1CONTAINER\$1CREDENTIALS\$1FULL\$1URI |   | AWS\$1CONTAINER\$1CREDENTIALS\$1FULL\$1URI | aws.containerCredentialsFullUri | 
| AWS\$1CONTAINER\$1AUTHORIZATION\$1TOKEN |   | AWS\$1CONTAINER\$1AUTHORIZATION\$1TOKEN | aws.containerAuthorizationToken | 
| AWS\$1CBOR\$1DISABLED | com.amazonaws.sdk.disableCbor | CBOR\$1ENABLED | aws.cborEnabled | 
| AWS\$1ION\$1BINARY\$1DISABLE | com.amazonaws.sdk.disableIonBinary | BINARY\$1ION\$1ENABLED | aws.binaryIonEnabled | 
| AWS\$1EXECUTION\$1ENV |   | AWS\$1EXECUTION\$1ENV | aws.executionEnvironment | 
|   | com.amazonaws.sdk.disableCertChecking | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|   | com.amazonaws.sdk.enableDefaultMetrics | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/23) | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/23) | 
|   | com.amazonaws.sdk.enableThrottledRetry | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/645) | [Non pris en charge](https://github.com/aws/aws-sdk-java-v2/issues/645) | 
|   | com.amazonaws.regions.RegionUtils.fileOverride | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|   | com.amazonaws.regions.RegionUtils.disableRemote | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|   | com.amazonaws.services.s3.disableImplicitGlobalClients | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 
|   | com.amazonaws.sdk.enableInRegionOptimizedMode | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | Non pris en charge ([fonctionnalité de demande](https://github.com/aws/aws-sdk-java-v2/issues/new)) | 

# Changements dans Waiters de la version 1 à la version 2
<a name="migration-waiters"></a>

Cette rubrique détaille les modifications apportées aux fonctionnalités de Waiters de la version 1 (v1) à la version 2 (v2).

Les tableaux suivants montrent la différence pour les serveurs DynamoDB en particulier. Les serveurs des autres services suivent le même schéma.

## Changements de haut niveau
<a name="migration-waiters-api-changes"></a>

Les classes de serveurs utilisent le même artefact Maven que le service. 


| Modification | v1 | v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.6801</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>dynamodb</artifactId><br />    </dependency><br /></dependencies><br /></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.102</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>dynamodb</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package | com.amazonaws.services.dynamodbv2.waiters | software.amazon.awssdk.services.dynamodb.waiters | 
| Noms des classes |  `[AmazonDynamoDBWaiters](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/waiters/AmazonDynamoDBWaiters.html)`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-waiters.html)  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Modifications de l'API
<a name="migration-cf-presign-behavior-changes"></a>


| Modification | v1 | v2 | 
| --- | --- | --- | 
| Créez un serveur |  <pre>AmazonDynamoDB client = AmazonDynamoDBClientBuilder <br />                            .standard().build();<br />AmazonDynamoDBWaiters waiter = client.waiters();</pre>  | Synchrone :<pre>DynamoDbClient client = DynamoDbClient.create();<br />DynamoDbWaiter waiter = client.waiter();</pre>Asynchrone :<pre>DynamoDbAsyncClient asyncClient = <br />        DynamoDbAsyncClient.create();<br />DynamoDbAsyncWaiter waiter = asyncClient.waiter();</pre> | 
| Patientez jusqu'à ce qu'une table existe | Synchrone :<pre>waiter.tableExists()<br />    .run(new WaiterParameters<>(<br />        new DescribeTableRequest(tableName)));</pre>Asynchrone :<pre>waiter.tableExists()<br />    .runAsync(new WaiterParameters()<br />      .withRequest(new DescribeTableRequest(tableName)),<br />          new WaiterHandler() {<br />              @Override<br />              public void onWaitSuccess(<br />                  AmazonWebServiceRequest amazonWebServiceRequest) {<br />                    System.out.println("Table creation succeeded");<br />              }<br /><br />              @Override<br />              public void onWaitFailure(Exception e) {<br />                  e.printStackTrace();<br />              }<br />          }).get();</pre> |  Synchrone : <pre>WaiterResponse<DescribeTableResponse> waiterResponse =<br />    waiter.waitUntilTableExists(<br />        r -> r.tableName("myTable"));<br />waiterResponse.matched().response()<br />       .ifPresent(System.out::println);</pre> Asynchrone : <pre>waiter.waitUntilTableExists(r -> r.tableName(tableName))<br />           .whenComplete((r, t) -> {<br />               if (t != null) {<br />                   t.printStackTrace();<br />               } else {<br />                   System.out.println(<br />                        "Table creation succeeded");<br />               }<br />           }).join();</pre>  | 

## Configuration changes
<a name="migration-waiters-config"></a>


| Modification | v1 | v2 | 
| --- | --- | --- | 
| Stratégie de sondage (nombre maximum de tentatives et délai fixe) |  <pre>MaxAttemptsRetryStrategy maxAttemptsRetryStrategy = <br />        new MaxAttemptsRetryStrategy(10);<br /><br />FixedDelayStrategy fixedDelayStrategy = <br />        new FixedDelayStrategy(3);<br /><br />PollingStrategy pollingStrategy = <br />        new PollingStrategy(maxAttemptsRetryStrategy, <br />                fixedDelayStrategy);<br /><br />waiter.tableExists().run(<br />        new WaiterParameters<>(<br />            new DescribeTableRequest(tableName)), <br />                pollingStrategy);</pre>  |  <pre><br />FixedDelayBackoffStrategy fixedDelayBackoffStrategy = <br />        FixedDelayBackoffStrategy<br />            .create(Duration.ofSeconds(3));<br /><br />waiter.waitUntilTableExists(r -> r.tableName(tableName),<br />        c -> c.maxAttempts(10)<br />                .backoffStrategy(fixedDelayBackoffStrategy));</pre>  | 

# Modifications apportées à l'utilitaire de métadonnées EC2 de la version 1 à la version 2
<a name="migration-imds"></a>

Cette rubrique décrit les modifications apportées à l'utilitaire de métadonnées Amazon Elastic Compute Cloud (EC2) du SDK pour Java, de la version 1 (v1) à la version 2 (v2).

## Changements de haut niveau
<a name="migration-imds-high-level-changes"></a>


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.5871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-core</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.212</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>imds</artifactId><br />    </dependency><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>apache-client3</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package |  com.amazonaws.util  |  software.amazon.awssdk.imds  | 
| Approche d'instanciation |  Utilisez des méthodes utilitaires statiques ; pas d'instanciation : <pre>String localHostName = <br />           EC2MetadataUtils.getLocalHostName();</pre>  |  Utilisez une méthode d'usine statique : <pre>Ec2MetadataClient client = Ec2MetadataClient.create();</pre> Ou utilisez une approche de constructeur : <pre>Ec2MetadataClient client = Ec2MetadataClient.builder()<br />    .endpointMode(EndpointMode.IPV6)<br />    .build();</pre>  | 
| Types de clients | Méthodes utilitaires synchrones uniquement : EC2MetadataUtils |  Synchrone : `Ec2MetadataClient` Asynchrone : `Ec2MetadataAsyncClient`  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

3 Notez la déclaration du `apache-client` module pour la version 2. La version V2 de l'utilitaire de métadonnées EC2 nécessite une implémentation de l'`SdkHttpClient`interface pour le client de métadonnées synchrone ou de l'`SdkAsyncHttpClient`interface pour le client de métadonnées asynchrone. La [Configurez les clients HTTP dans AWS SDK for Java 2.x](http-configuration.md) section présente la liste des clients HTTP que vous pouvez utiliser.

### Demande de métadonnées
<a name="migration-imds-fetching-changes"></a>

Dans la version 1, vous utilisez des méthodes statiques qui n'acceptent aucun paramètre pour demander des métadonnées pour une ressource EC2. En revanche, vous devez spécifier le chemin d'accès à la ressource EC2 en tant que paramètre dans la version v2. Le tableau suivant présente les différentes approches.


****  

| v1 |   v2 | 
| --- | --- | 
|  <pre>String userMetaData = EC2MetadataUtils.getUserData();</pre>  |  <pre>Ec2MetadataClient client = Ec2MetadataClient.create();<br />Ec2MetadataResponse response = <br />                client.get("/latest/user-data");<br />String userMetaData = <br />                response.asString();</pre>  | 

Reportez-vous aux [catégories de métadonnées de l'instance](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instancedata-data-categories.html) pour trouver le chemin que vous devez fournir pour demander un élément de métadonnées. 

**Note**  
Lorsque vous utilisez un client de métadonnées d'instance dans la version 2, vous devez vous efforcer d'utiliser le même client pour toutes les demandes de récupération de métadonnées.

 

## Changements de comportement
<a name="migration-imds-behavior-changes"></a>

### Données JSON
<a name="migration-imds-behavior-json"></a>

Sur EC2, le service de métadonnées d'instance (IMDS) exécuté localement renvoie certaines métadonnées sous forme de chaînes au format JSON. Les métadonnées dynamiques d'un [document d'identité d'instance en sont un exemple](https://docs.aws.amazon.com//AWSEC2/latest/UserGuide/instance-identity-documents.html).

L'API v1 contient des méthodes distinctes pour chaque élément de métadonnées d'identité d'instance, tandis que l'API v2 renvoie directement la chaîne JSON. Pour utiliser la chaîne JSON, vous pouvez utiliser l'[API Document](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/document/package-summary.html) pour analyser la réponse et naviguer dans la structure JSON.

Le tableau suivant compare la manière dont vous récupérez les métadonnées d'un document d'identité d'instance dans les versions 1 et 2.


****  

| Cas d’utilisation | v1 |   v2 | 
| --- | --- | --- | 
| Récupérez la région |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String region = instanceInfo.getRegion();</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String region = instanceInfo.asMap().get("region").asString();</pre>  | 
| Récupérez l'identifiant de l'instance |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String instanceId = instanceInfo.instanceId;</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String instanceId = instanceInfo.asMap().get("instanceId").asString();</pre>  | 
| Récupérez le type d'instance |  <pre>InstanceInfo instanceInfo = <br />        EC2MetadataUtils.getInstanceInfo();<br />String instanceType = instanceInfo.instanceType();</pre>  |  <pre>Ec2MetadataResponse response = <br />    client.get("/latest/dynamic/instance-identity/document");<br />Document instanceInfo = response.asDocument();<br />String instanceType = instanceInfo.asMap().get("instanceType").asString();</pre>  | 

### Différences de résolution des terminaux
<a name="migration-imds-behavior-endpoint-res"></a>

Le tableau suivant indique les emplacements que le SDK vérifie pour convertir le point de terminaison en IMDS. Les emplacements sont répertoriés par ordre de priorité décroissant.


****  

| v1 |   v2 | 
| --- | --- | 
| Propriété du système : com.amazonaws.sdk.ec2MetadataServiceEndpointOverride | Méthode de configuration du générateur de clients : endpoint(...) | 
| Variable d'environnement : AWS\$1EC2\$1METADATA\$1SERVICE\$1ENDPOINT | Propriété du système : aws.ec2MetadataServiceEndpoint | 
| Valeur par défaut: http://169.254.169.254 | Fichier de configuration : \$1.aws/config avec le ec2\$1metadata\$1service\$1endpoint paramètre | 
|  | Valeur associée à la résolution endpoint-mode  | 
|  | Valeur par défaut : http://169.254.169.254 | 

### Résolution du point de terminaison en version 2
<a name="migration-imds-behavior-endpoint-res2"></a>

Lorsque vous définissez explicitement un point de terminaison à l'aide du générateur, cette valeur de point de terminaison est prioritaire par rapport à tous les autres paramètres. Lorsque le code suivant s'exécute, la propriété `aws.ec2MetadataServiceEndpoint` système et le `ec2_metadata_service_endpoint` paramètre du fichier de configuration sont ignorés s'ils existent.

```
Ec2MetadataClient client = Ec2MetadataClient
  .builder()
  .endpoint(URI.create("endpoint.to.use"))
  .build();
```

#### Mode Endpoint
<a name="migration-imds-behavior-endpoint-mode"></a>

Avec la version v2, vous pouvez spécifier un mode de point de terminaison pour configurer le client de métadonnées afin qu'il utilise les valeurs de point de terminaison par défaut pour ou. IPv4 IPv6 Le mode Endpoint n'est pas disponible pour la version 1. La valeur par défaut utilisée pour IPv4 est `http://169.254.169.254` et `http://[fd00:ec2::254]` pour IPv6.

Le tableau suivant montre les différentes manières de définir le mode de point de terminaison par ordre décroissant de priorité.


****  

|  |  | Valeurs possibles | 
| --- | --- | --- | 
| Méthode de configuration du générateur de clients : endpointMode(...) |  <pre>Ec2MetadataClient client = Ec2MetadataClient<br />  .builder()<br />  .endpointMode(EndpointMode.IPV4)<br />  .build();</pre>  | EndpointMode.IPV4, EndpointMode.IPV6 | 
| Propriété du système | aws.ec2MetadataServiceEndpointMode | IPv4, IPv6 (le cas n'a pas d'importance) | 
| Fichier de configuration : \$1.aws/config | Paramètre ec2\$1metadata\$1service\$1endpoint | IPv4, IPv6 (le cas n'a pas d'importance) | 
| Non spécifié dans les méthodes précédentes | IPv4 est utilisé |  | 

#### Comment le SDK se résout `endpoint` ou `endpoint-mode` dans la version v2
<a name="migration-imds-behavior-endpoint-res2-which"></a>

1. Le SDK utilise la valeur que vous avez définie dans le code du générateur de clients et ignore les paramètres externes. Étant donné que le SDK génère une exception si les deux `endpoint` `endpointMode` sont appelés sur le générateur de clients, le SDK utilise la valeur du point de terminaison, quelle que soit la méthode que vous utilisez.

1. Si vous ne définissez aucune valeur dans le code, le SDK se tourne vers une configuration externe, d'abord pour les propriétés du système, puis pour un paramètre dans le fichier de configuration. 

   1. Le SDK vérifie d'abord la valeur d'un point de terminaison. Si une valeur est trouvée, elle est utilisée. 

   1. Si le SDK n'a toujours pas trouvé de valeur, il recherche les paramètres du mode endpoint.

1. Enfin, si le SDK ne trouve aucun paramètre externe et que vous n'avez pas configuré le client de métadonnées dans le code, le SDK utilise la IPv4 valeur de. `http://169.254.169.254`

### IMDSv2
<a name="migration-imds-behavior-imdsv2"></a>

Amazon EC2 définit deux approches pour accéder aux métadonnées des instances :
+ Service de métadonnées d'instance, version 1 (IMDSv1) — Approche de demande/réponse
+ Service de métadonnées d'instance version 2 (IMDSv2) — Approche axée sur les sessions

Le tableau suivant compare le fonctionnement de Java SDKs avec IMDS.


****  

| v1 |   v2 | 
| --- | --- | 
| IMDSv2 est utilisé par défaut | Utilise toujours IMDSv2 | 
| Tente de récupérer un jeton de session pour chaque demande et revient à zéro IMDSv1 si elle ne parvient pas à récupérer un jeton de session | Conserve un jeton de session dans un cache interne qui est réutilisé pour plusieurs demandes | 

Le SDK pour Java 2.x IMDSv2 ne prend en charge que. IMDSv1

## Différences de configuration
<a name="migration-imds-config-diffs"></a>

Le tableau suivant répertorie les différentes options de configuration.


****  

| Configuration | v1 |   v2 | 
| --- | --- | --- | 
| Nouvelles tentatives | Configuration non disponible | Configurable via la méthode du générateur retryPolicy(...) | 
| HTTP | Le délai d'expiration de la connexion est configurable via la variable d'AWS\$1METADATA\$1SERVICE\$1TIMEOUTenvironnement. La valeur par défaut est de 1 seconde. | Configuration disponible en passant un client HTTP à la méthode du générateurhttpClient(...). Le délai de connexion par défaut pour les clients HTTP est de 2 secondes. | 

### Exemple de configuration HTTP v2
<a name="migration-imds-http-conf-v2-ex"></a>

L'exemple suivant montre comment configurer le client de métadonnées. Cet exemple configure le délai d'expiration de la connexion et utilise le client HTTP Apache.

```
SdkHttpClient httpClient = ApacheHttpClient.builder()
    .connectionTimeout(Duration.ofSeconds(1))
    .build();

Ec2MetadataClient imdsClient = Ec2MetadataClient.builder()
    .httpClient(httpClient)
    .build();
```

# Modifications apportées à Amazon CloudFront Presign de la version 1 à la version 2
<a name="migration-cloudfront-presigning"></a>

Cette rubrique détaille les modifications apportées à Amazon CloudFront entre la version 1 (v1) et la version 2 (v2).

## Changements de haut niveau
<a name="migration-cloudfront-presigning-api-changes"></a>


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.5871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency>  <br />        <groupId>com.amazonaws</groupId><br />        <artifactId>cloudfront</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.212</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>cloudfront</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package | com.amazonaws.services.cloudfront | software.amazon.awssdk.services.cloudfront | 
| Noms des classes |  [CloudFrontUrlSigner](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudfront/CloudFrontUrlSigner.html) [CloudFrontCookieSigner](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/cloudfront/CloudFrontCookieSigner.html)  |  [CloudFrontUtilities](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cloudfront/CloudFrontUtilities.html) [SignedUrl](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cloudfront/url/SignedUrl.html) [CannedSignerRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cloudfront/model/CannedSignerRequest.html) [CustomSignerRequest](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/cloudfront/model/CustomSignerRequest.html)  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Modifications de l'API
<a name="migration-cf-presign-behavior-changes"></a>


| Comportement | v1 |   v2 | 
| --- | --- | --- | 
| Créez une demande prédéfinie | Les arguments sont transmis directement à l'API. |  <pre>CannedSignerRequest cannedRequest =<br />      CannedSignerRequest.builder()<br />                         .resourceUrl(resourceUrl)<br />                         .privateKey(privateKey)<br />                         .keyPairId(keyPairId)<br />                         .expirationDate(expirationDate)<br />                         .build();</pre>  | 
| Créez une demande personnalisée | Les arguments sont transmis directement à l'API. |  <pre>CustomSignerRequest customRequest =<br />      CustomSignerRequest.builder()<br />                         .resourceUrl(resourceUrl)<br />                         .resourceUrlPattern(resourceUrlPattern)<br />                         .privateKey(keyFile)<br />                         .keyPairId(keyPairId)<br />                         .expirationDate(expirationDate)<br />                         .activeDate(activeDate)<br />                         .ipRange(ipRange)<br />                         .build();</pre>  | 
| Générer une URL signée (standardisée) |  <pre>String signedUrl =<br />  CloudFrontUrlSigner.getSignedURLWithCannedPolicy(<br />    resourceUrl, keyPairId, privateKey, expirationDate);</pre>  |  <pre>CloudFrontUtilities cloudFrontUtilities =<br />    CloudFrontUtilities.create();<br /><br />SignedUrl signedUrl =        <br />    cloudFrontUtilities.getSignedUrlWithCannedPolicy(cannedRequest);<br /><br />String url = signedUrl.url();<br /></pre>  | 
| Générer un cookie signé (personnalisé) |  <pre>CookiesForCustomPolicy cookies =<br />    CloudFrontCookieSigner.getCookiesForCustomPolicy(<br />        resourceUrl, privateKey, keyPairId, expirationDate, <br />        activeDate, ipRange);<br /></pre>  |  <pre>CloudFrontUtilities cloudFrontUtilities =<br />    CloudFrontUtilities.create();<br /><br />CookiesForCustomPolicy cookies =<br />     cloudFrontUtilities.getCookiesForCustomPolicy(customRequest);<br /></pre>  | 

### En-têtes de cookies refactorisés dans la version 2
<a name="migration-cf-presign-behavior-headers"></a>

Dans Java v1, le SDK Java fournit les en-têtes de cookies sous forme de. `Map.Entry<String, String>`

```
Map.Entry<String, String> signatureMap = cookies.getSignature();
String signatureKey = signatureMap.getKey(); // "CloudFront-Signature"
String signatureValue = signatureMap.getValue(); // "[SIGNATURE_VALUE]"
```

Le SDK Java v2 fournit l'intégralité de l'en-tête en une seule `String` fois.

```
String signatureHeaderValue = cookies.signatureHeaderValue(); // "CloudFront-Signature=[SIGNATURE_VALUE]"
```

# Modifications apportées à l'API IAM Policy Builder de la version 1 à la version 2
<a name="migration-iam-policy-builder"></a>

Cette rubrique décrit les modifications apportées à l'API IAM Policy Builder de la version 1 (v1) à la version 2 (v2).

## Changements de haut niveau
<a name="migration-iam-policy-builder-high-level"></a>


****  

| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.5871</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-core</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.27.212</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>iam-policy-builder</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Nom du package | com.amazonaws.auth.policy | software.amazon.awssdk.policybuilder.iam | 
| Noms des classes |  [Stratégie](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Policy.html) [Instruction](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Statement.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-iam-policy-builder.html)  |  [IamPolicy](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamPolicy.html) [IamStatement](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamStatement.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/migration-iam-policy-builder.html)  | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Modifications de l'API
<a name="migration-iam-policy-builder-api"></a>


****  

| Paramètre | v1 |   v2 | 
| --- | --- | --- | 
|  Instancier une politique |  <pre>Policy policy = new Policy();</pre>  |  <pre>IamPolicy.Builder policyBuilder = IamPolicy.builder();<br />...<br />IamPolicy policy = policyBuilder.build();</pre>  | 
|    Définir l'identifiant  |  <pre>policy.withtId(...);<br />policy.setId(...);</pre>  |  <pre>policyBuilder.id(...);</pre>  | 
|    Version du set  | N/A - utilise la version par défaut de 2012-10-17 |  <pre>policyBuilder.version(...);</pre>  | 
|    Créer une déclaration  |  <pre>Statement statement = <br />    new Statement(Effect.Allow)<br />            .withActions(...)<br />            .withConditions(...)<br />            .withId(...)<br />            .withPrincipals(...)<br />            .withResources(...);</pre>  |  <pre>IamStatement statement = <br />    IamStatement.builder()<br />            .effect(IamEffect.ALLOW)<br />            .actions(...)<br />            .notActions(...)<br />            .conditions(...)<br />            .sid(...)<br />            .principals(...)<br />            .notPrincipals(...)<br />            .resources(...)<br />            .notResources(...)<br />            .build()</pre>  | 
|    Définir une déclaration  |  <pre>policy.withStatements(statement);<br />policy.setStatements(statement);</pre>  |  <pre>policyBuilder.addStatement(statement);</pre>  | 

## Différences dans l'élaboration d'une déclaration
<a name="migration-iam-policy-builder-statement"></a>

### Actions
<a name="migration-iam-policy-builder-statement-actions"></a>

#### v1
<a name="migration-iam-policy-builder-statement-actions.v1"></a>

Le SDK v1 comporte des [`enum`types d'](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Action.html)actions de service qui représentent des `[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html)` éléments d'une déclaration de politique. Les `enum` types suivants en sont des exemples.
+ `[IdentityManagementActions](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/actions/IdentityManagementActions.html)`
+ `[DynamoDBv2Actions](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/actions/DynamoDBv2Actions.html)`
+ `[SQSActions](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/actions/SQSActions.html)`

L'exemple suivant montre la `SendMessage` constante pour`SQSActions`.

```
Action action = SQSActions.SendMessage;
```

Vous ne pouvez pas spécifier d'`[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html)`élément dans une instruction dans la version 1.

####   v2
<a name="migration-iam-policy-builder-statement-actions.v2"></a>

Dans la version 2, l'[IamAction](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamAction.html)interface représente toutes les actions. Pour spécifier un élément d'[action spécifique au service](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_action.html), transmettez une chaîne à la `create` méthode comme indiqué dans le code suivant.

```
IamAction action = IamAction.create("sqs:SendMessage");
```

Vous pouvez spécifier a `[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notaction.html)` pour une instruction avec v2 comme indiqué dans le code suivant.

```
IamAction action = IamAction.create("sqs:SendMessage");
IamStatement.builder().addNotAction(action);
```

### Conditions
<a name="migration-iam-policy-builder-statement-conditions"></a>

#### v1
<a name="migration-iam-policy-builder-statement-conditions-v1"></a>

Pour représenter les conditions des instructions, le SDK v1 utilise des sous-classes de. [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Condition.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Condition.html) 
+  [ArnCondition](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/ArnCondition.html) 
+  [BooleanCondition](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/BooleanCondition.html)
+  [DateCondition](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/DateCondition.html)
+ [IpAddressCondition](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/IpAddressCondition.html)
+ [NumericCondition](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/NumericCondition.html)
+ [ StringCondition ](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/conditions/StringCondition.html)

Chaque `Condition` sous-classe définit un `enum` type de comparaison pour aider à définir la condition. Par exemple, ce qui suit montre une *comparaison de* [chaînes différentes](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String) pour une condition.

```
Condition condition = new StringCondition(StringComparisonType.StringNotLike, "key", "value");
```

####   v2
<a name="migration-iam-policy-builder-statement-conditions-v2"></a>

Dans la version 2, vous créez une condition pour une déclaration de politique en utilisant `[IamCondition](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamCondition.html)` et en fournissant un`[IamConditionOperator](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamConditionOperator.html)`, qui contient `enums` pour tous les types.

```
IamCondition condition = IamCondition.create(IamConditionOperator.STRING_NOT_LIKE, "key", "value");
```

### Ressources
<a name="migration-iam-policy-builder-statement-resources"></a>

#### v1
<a name="migration-iam-policy-builder-statement-resources-v1"></a>

L'`[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)`élément d'une déclaration de politique est représenté par la `[Resource](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Resource.html)` classe du SDK. Vous fournissez l'ARN sous forme de chaîne dans le constructeur. Les sous-classes suivantes fournissent des constructeurs pratiques.
+ [S3BucketResource](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/resources/S3BucketResource.html)
+ [S3ObjectResource](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/resources/S3ObjectResource.html)
+ [SQSQueueRessource](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/resources/SQSQueueResource.html)

Dans la version 1, vous pouvez spécifier un `[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html)` élément pour a `[Resource](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Resource.html)` en appelant la `withIsNotType` méthode comme indiqué dans l'instruction suivante.

```
Resource resource = new Resource("arn:aws:s3:::amzn-s3-demo-bucket").withIsNotType(true);
```

####   v2
<a name="migration-iam-policy-builder-statement-resources-v2"></a>

Dans la version 2, vous créez un `[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_resource.html)` élément en transmettant un ARN à la `IamResource.create` méthode.

```
IamResource resource = IamResource.create("arn:aws:s3:::amzn-s3-demo-bucket");
```

Un `[IamResource](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamResource.html)` peut être défini comme *[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html)*élément comme indiqué dans l'extrait suivant.

```
IamResource resource = IamResource.create("arn:aws:s3:::amzn-s3-demo-bucket");
IamStatement.builder().addNotResource(resource);
```

`IamResource.ALL`représente toutes les ressources. 

### Principaux
<a name="migration-iam-policy-builder-statement-principal"></a>

#### v1
<a name="migration-iam-policy-builder-statement-principal-v1"></a>

Le SDK v1 propose les `[Principal](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/policy/Principal.html)` classes suivantes pour représenter les types de principes qui incluent tous les membres :
+ `AllUsers`
+ `AllServices`
+ `AllWebProviders`
+ `All`

Vous ne pouvez pas ajouter d'`[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html)`élément à une déclaration.

####   v2
<a name="migration-iam-policy-builder-statement-principal-v2"></a>

Dans la version 2, `IamPrincipal.ALL` représente tous les principes :

Pour représenter tous les membres dans d'autres types de directeurs, utilisez les `[IamPrincipalType](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/policybuilder/iam/IamPrincipalType.html)` classes lorsque vous créez un`IamPrincipal`.
+ `IamPrincipal.create(IamPrincipalType.AWS,"*")`pour tous les utilisateurs.
+ `IamPrincipal.create(IamPrincipalType.SERVICE,"*")`pour tous les services.
+ `IamPrincipal.create(IamPrincipalType.FEDERATED,"*")`pour tous les fournisseurs Web.
+ `IamPrincipal.create(IamPrincipalType.CANONICAL_USER,"*")`pour tous les utilisateurs canoniques.

Vous pouvez utiliser `addNotPrincipal` cette méthode pour représenter un `[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html)` élément lorsque vous créez une déclaration de politique, comme indiqué dans l'instruction suivante.

```
IamPrincipal principal = IamPrincipal.create(IamPrincipalType.AWS, "arn:aws:iam::444455556666:root");
IamStatement.builder().addNotPrincipal(principal);
```

# Modifications apportées à l'utilisation de DynamoDB entre la version 1 et la version 2 du AWS SDK pour Java
<a name="migration-ddb-mapper"></a>



**Topics**
+ [Différences entre les versions 1 et 2 de l'API de mappage DynamoDB AWS SDK pour Java](ddb-mapping.md)
+ [Différences entre l'API des documents entre la version 1 et la version 2 du AWS SDK pour Java](dynamodb-mapping-document-api.md)
+ [Migration de bibliothèques de chiffrement](ddb-encryption-lib-migrate.md)

# Différences entre les versions 1 et 2 de l'API de mappage DynamoDB AWS SDK pour Java
<a name="ddb-mapping"></a>

Le APIs mappage DynamoDB a changé de manière significative entre la version 1 et la version 2 du. AWS SDK pour Java Dans la version 1, vous utilisez le `DynamoDBMapper` pour travailler avec Java POJOs. Dans la version 2, vous utilisez le `DynamoDbEnhancedClient` avec des noms de méthodes mis à jour, des options de définition de schéma améliorées et une sécurité de type améliorée.

Les principales différences sont les suivantes :
+ Nouveaux noms de méthodes (par exemple `getItem` au lieu de`load`)
+ Création d'un schéma de table explicite
+ Support intégré pour les opérations synchrones et asynchrones
+ Changements dans la façon dont les chaînes vides et la configuration sont gérées

Cette section couvre les modifications de l'API de mappage, les différences d'annotations, les mises à jour de configuration et les conseils de migration pour vous aider à passer de la version v1 `DynamoDBMapper` à la version v2`DynamoDbEnhancedClient`.

**Contents**
+ [Modifications importantes apportées aux bibliothèques de mappage de la version 1 à la version 2 du SDK for Java](dynamodb-mapping-high-level.md)
  + [Différences de dépendance à l'importation](dynamodb-mapping-high-level.md#dynamodb-mapping-deps)
+ [Modifications apportées au APIs mappage DynamoDB entre les versions 1 et 2 du SDK for Java](dynamodb-mapping-api-changes.md)
  + [Création d'un client](dynamodb-mapping-api-changes.md#dynamodb-mapping-api-changes-client)
  + [Établir le mappage vers la table/l'index DynamoDB](dynamodb-mapping-api-changes.md#dynamodb-mapping-api-changes-mapping)
  + [Opérations de table](dynamodb-mapping-api-changes.md#dynamodb-mapping-api-changes-tobleops)
  + [Classes et propriétés de cartes](dynamodb-mapping-api-changes.md#dynamodb-mapping-schemas)
    + [Annotations sur les haricots](dynamodb-mapping-api-changes.md#dynamodb-mapping-schemas-annos)
    + [Annotations supplémentaires V2](dynamodb-mapping-api-changes.md#dynamodb-mapping-schemas-annos-v2-addnl)
  + [Configuration](dynamodb-mapping-api-changes.md#dynamodb-mapping-configuration)
    + [Configuration par opération](dynamodb-mapping-api-changes.md#dynamodb-mapping-configuration-per-op)
  + [Conditionnels](dynamodb-mapping-api-changes.md#dynamodb-mapping-conditionals)
  + [Conversion de type](dynamodb-mapping-api-changes.md#dynamodb-mapping-type-conv)
    + [Convertisseurs par défaut](dynamodb-mapping-api-changes.md#dynamodb-mapping-type-conv-defaults)
    + [Définir un convertisseur personnalisé pour un attribut](dynamodb-mapping-api-changes.md#dynamodb-mapping-type-conv-anno)
    + [Ajouter un convertisseur de type, une usine ou un fournisseur](dynamodb-mapping-api-changes.md#dynamodb-mapping-type-conv-factory)
+ [Différences de gestion des chaînes entre la version 1 et la version 2 du SDK for Java](dynamodb-migration-string-handling.md)
+ [Différences de verrouillage optimistes entre la version 1 et la version 2 du SDK for Java](dynamodb-migrate-optimstic-locking.md)
+ [Différences entre les versions 1 et 2 du SDK for Java avec Fluent Setters](dynamodb-migrate-fluent-setters.md)

# Modifications importantes apportées aux bibliothèques de mappage de la version 1 à la version 2 du SDK for Java
<a name="dynamodb-mapping-high-level"></a>

Les noms du client de mappage dans chaque bibliothèque diffèrent dans les versions V1 et V2 :
+ V1 - Dynamo DBMapper
+ V2 - Client DynamoDB amélioré

Vous interagissez avec les deux bibliothèques de la même manière : vous instanciez une, mapper/client puis vous fournissez un POJO Java pour lire et écrire ces APIs éléments dans des tables DynamoDB. Les deux bibliothèques proposent également des annotations pour la classe du POJO afin d'indiquer comment le client gère le POJO. 

Les différences notables lorsque vous passez à la V2 incluent :
+ Les versions V2 et V1 utilisent des noms de méthode différents pour les opérations DynamoDB de bas niveau. Par exemple :    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/dynamodb-mapping-high-level.html)
+ La V2 propose plusieurs méthodes pour définir des schémas de tables et les POJOs mapper à des tables. Vous pouvez choisir d'utiliser des annotations ou un schéma généré à partir du code à l'aide d'un générateur. La V2 propose également des versions mutables et immuables des schémas.
+ Avec la V2, vous créez spécifiquement le schéma de table comme l'une des premières étapes, tandis que dans la V1, le schéma de table est déduit de la classe annotée selon les besoins.
+ La V2 inclut le [client Document API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocument.html) dans l'API client améliorée, tandis que la V1 utilise une [API distincte](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/DynamoDB.html).
+ Tous APIs sont disponibles en versions synchrone et asynchrone dans la V2.

Consultez la section sur le [mappage DynamoDB](dynamodb-enhanced-client.md) de ce guide pour obtenir des informations plus détaillées sur le client amélioré V2.

## Différences de dépendance à l'importation
<a name="dynamodb-mapping-deps"></a>


| V1 | V2 | 
| --- | --- | 
|  <pre><dependencyManagement><br />  <dependencies><br />    <dependency><br />      <groupId>com.amazonaws</groupId><br />      <artifactId>aws-java-sdk-bom</artifactId><br />      <version>1.X.X</version><br />      <type>pom</type><br />      <scope>import</scope><br />    </dependency><br />  </dependencies><br /></dependencyManagement> <br /><br /><dependencies><br />  <dependency><br />    <groupId>com.amazonaws</groupId><br />    <artifactId>aws-java-sdk-dynamodb</artifactId><br />  </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />  <dependencies><br />    <dependency><br />      <groupId>software.amazon.awssdk</groupId><br />      <artifactId>bom</artifactId><br />      <version>2.X.X*</version><br />      <type>pom</type><br />      <scope>import</scope><br />    </dependency><br />  </dependencies><br /></dependencyManagement> <br /><br /><dependencies><br />  <dependency><br />    <groupId>software.amazon.awssdk</groupId><br />    <artifactId>dynamodb-enhanced</artifactId><br />  </dependency><br /></dependencies></pre>  | 

\$1 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

Dans la version 1, une seule dépendance inclut à la fois l'API DynamoDB de bas niveau et mapping/document l'API, tandis que dans la version 2, vous utilisez la dépendance d'artefact pour accéder à `dynamodb-enhanced` l'API. mapping/document Le `dynamodb-enhanced` module contient une dépendance transitive vis-à-vis du module de bas niveau. `dynamodb` 

# Modifications apportées au APIs mappage DynamoDB entre les versions 1 et 2 du SDK for Java
<a name="dynamodb-mapping-api-changes"></a>

## Création d'un client
<a name="dynamodb-mapping-api-changes-client"></a>


****  

| Cas d’utilisation | V1 | V2 | 
| --- | --- | --- | 
|   Instanciation normale  |  <pre>AmazonDynamoDB standardClient = AmazonDynamoDBClientBuilder.standard()<br />    .withCredentials(credentialsProvider)<br />    .withRegion(Regions.US_EAST_1)<br />    .build();<br />DynamoDBMapper mapper = new DynamoDBMapper(standardClient);</pre>  |  <pre>DynamoDbClient standardClient = DynamoDbClient.builder()<br />    .credentialsProvider(ProfileCredentialsProvider.create())<br />    .region(Region.US_EAST_1)<br />    .build();<br />DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()<br />    .dynamoDbClient(standardClient)<br />    .build();</pre>  | 
|   Instanciation minimale  |  <pre>AmazonDynamoDB standardClient = AmazonDynamoDBClientBuilder.standard();<br />DynamoDBMapper mapper = new DynamoDBMapper(standardClient);</pre>  |  <pre>DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.create();</pre>  | 
|   Avec transformateur d'attributs \$1  |  <pre>DynamoDBMapper mapper = new DynamoDBMapper(standardClient, <br />                        attributeTransformerInstance);</pre>  |  <pre>DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()<br />    .dynamoDbClient(standardClient)<br />    .extensions(extensionAInstance, extensionBInstance)<br />    .build();</pre>  | 

\$1 Les extensions de la V2 correspondent approximativement aux transformateurs d'attributs de la V1. La [Utiliser des extensions pour personnaliser les opérations du client DynamoDB Enhanced](ddb-en-client-extensions.md) section contient plus d'informations sur les extensions de la version 2. 

## Établir le mappage vers la table/l'index DynamoDB
<a name="dynamodb-mapping-api-changes-mapping"></a>

Dans la version 1, vous spécifiez le nom d'une table DynamoDB par le biais d'une annotation de bean. Dans la version 2, une méthode d'usine produit une instance de `DynamoDbTable` qui représente la table DynamoDB distante. `table()` Le premier paramètre de la `table()` méthode est le nom de la table DynamoDB.


****  

| Cas d’utilisation | V1 | V2 | 
| --- | --- | --- | 
|   Mappez la classe Java POJO à la table DynamoDB  |  <pre>@DynamoDBTable(tableName ="Customer")<br />public class Customer {<br />  ...<br />}</pre>  |  <pre>DynamoDbTable<Customer> customerTable = enhancedClient.table("Customer",<br />    TableSchema.fromBean(Customer.class));</pre>  | 
|   Mapper vers un index secondaire DynamoDB  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/dynamodb-mapping-api-changes.html) La section du Guide du développeur DynamoDB qui [décrit la méthode `query` V1](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.Methods.html#DynamoDBMapper.Methods.query) présente un exemple complet.  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/dynamodb-mapping-api-changes.html) La [Utiliser des indices secondaires](ddb-en-client-use-secindex.md) section de ce guide fournit plus d'informations.  | 

## Opérations de table
<a name="dynamodb-mapping-api-changes-tobleops"></a>

Cette section décrit les opérations APIs qui diffèrent entre la V1 et la V2 pour la plupart des cas d'utilisation standard. 

Dans la version 2, toutes les opérations impliquant une seule table sont appelées sur l'`DynamoDbTable`instance, et non sur le client amélioré. Le client amélioré contient des méthodes qui peuvent cibler plusieurs tables. 

Dans le tableau intitulé *Opérations de table* ci-dessous, une instance POJO est désignée sous le nom `item` ou en tant que type spécifique tel que`customer1`. Pour les exemples de la V2, les instances nommées `table` sont le résultat d'un appel précédent `enhancedClient.table()` qui renvoie une référence à l'`DynamoDbTable`instance.

Notez que la plupart des opérations V2 peuvent être appelées avec un modèle de consommation fluide, même lorsqu'elles ne sont pas affichées. Par exemple, 

```
Customer customer = table.getItem(r → r.key(key));
  or
Customer customer = table.getItem(r → r.key(k -> k.partitionValue("id").sortValue("email")))
```

Pour les opérations V1, *les opérations de table* (ci-dessous) contiennent certains des formulaires couramment utilisés, mais pas tous les formulaires surchargés. Par exemple, la `load()` méthode présente les surcharges suivantes :

```
mapper.load(Customer.class, hashKey)
mapper.load(Customer.class, hashKey, rangeKey)
mapper.load(Customer.class, hashKey, config)
mapper.load(Customer.class, hashKey, rangeKey, config)
mapper.load(item)
mapper.load(item, config)
```

*Le tableau des opérations* (ci-dessous) montre les formulaires couramment utilisés :

```
mapper.load(item)
mapper.load(item, config)
```


**Opérations de table**  

| Cas d’utilisation | V1 | V2 | 
| --- | --- | --- | 
|  Écrire un POJO Java dans une table DynamoDB **Opération DynamoDB** :, `PutItem` `UpdateItem`  |  <pre>mapper.save(item)<br />mapper.save(item, config)<br />mapper.save(item, saveExpression, config)</pre> Dans la version 1, `DynamoDBMapperConfig.SaveBehavior` les annotations déterminent la méthode DynamoDB de bas niveau qui sera appelée. En général, `UpdateItem` est appelé sauf lors de l'utilisation de `SaveBehavior.CLOBBER` et`SaveBehavior.PUT`. Les clés générées automatiquement constituent un cas d'utilisation particulier, et parfois les deux `PutItem` `UpdateItem` sont utilisées.  |  <pre>table.putItem(putItemRequest)<br />table.putItem(item)<br />table.putItemWithResponse(item) //Returns metadata.<br /><br />updateItem(updateItemRequest)<br />table.updateItem(item)<br />table.updateItemWithResponse(item) //Returns metadata.</pre>  | 
|  Lire un élément d'une table DynamoDB dans un POJO Java **Fonctionnement DynamoDB :** `GetItem`  |  <pre>mapper.load(item)<br />mapper.load(item, config)</pre>  |  <pre>table.getItem(getItemRequest)<br />table.getItem(item)<br />table.getItem(key)<br />table.getItemWithResponse(key) //Returns POJO with metadata.</pre>  | 
|  Supprimer un élément d'une table DynamoDB **Fonctionnement DynamoDB :** `DeleteItem`  |  <pre>mapper.delete(item, deleteExpression, config)</pre>  |  <pre>table.deleteItem(deleteItemRequest)<br />table.deleteItem(item)<br />table.deleteItem(key)</pre>  | 
|  Interrogez une table DynamoDB ou un index secondaire et renvoyez une liste paginée **Fonctionnement DynamoDB :** `Query`  |  <pre>mapper.query(Customer.class, queryExpression)<br />mapper.query(Customer.class, queryExpression, <br />                             mapperConfig)</pre>  |  <pre>table.query(queryRequest)<br />table.query(queryConditional)</pre> Utiliser le renvoi `PageIterable.stream()` (chargement différé) pour les réponses synchronisées et `PagePublisher.subscribe()` pour les réponses asynchrones  | 
|  Interrogez une table DynamoDB ou un index secondaire et renvoyez une liste **Fonctionnement DynamoDB :** `Query`  |  <pre>mapper.queryPage(Customer.class, queryExpression)<br />mapper.queryPage(Customer.class, queryExpression, <br />                                 mapperConfig)</pre>  |  <pre>table.query(queryRequest)<br />table.query(queryConditional)</pre> Utiliser le renvoi `PageIterable.items()` (chargement différé) pour les réponses synchronisées et `PagePublisher.items.subscribe()` pour les réponses asynchrones  | 
|  Scanner une table DynamoDB ou un index secondaire et renvoyer une liste paginée **Fonctionnement DynamoDB :** `Scan`  |  <pre>mapper.scan(Customer.class, scanExpression)<br />mapper.scan(Customer.class, scanExpression, <br />                            mapperConfig)</pre>  |  <pre>table.scan()<br />table.scan(scanRequest)</pre> Utiliser le renvoi `PageIterable.stream()` (chargement différé) pour les réponses synchronisées et `PagePublisher.subscribe()` pour les réponses asynchrones  | 
|  Scanner une table DynamoDB ou un index secondaire et renvoyer une liste **Fonctionnement DynamoDB :** `Scan`  |  <pre>mapper.scanPage(Customer.class, scanExpression)<br />mapper.scanPage(Customer.class, scanExpression, <br />                                mapperConfig)</pre>  |  <pre>table.scan()<br />table.scan(scanRequest)</pre> Utiliser le renvoi `PageIterable.items()` (chargement différé) pour les réponses synchronisées et `PagePublisher.items.subscribe()` pour les réponses asynchrones  | 
|  Lire plusieurs éléments de plusieurs tables dans un lot **Fonctionnement DynamoDB :** `BatchGetItem`  |  <pre>mapper.batchLoad(Arrays.asList(customer1, <br />                               customer2, <br />                               book1))<br />mapper.batchLoad(itemsToGet) <br />           // itemsToGet: Map<Class<?>, List<KeyPair>></pre>  |  <pre>enhancedClient.batchGetItem(batchGetItemRequest)<br /><br />enhancedClient.batchGetItem(r -> r.readBatches(<br />    ReadBatch.builder(Record1.class)<br />             .mappedTableResource(mappedTable1)<br />             .addGetItem(i -> i.key(k -> k.partitionValue(0)))<br />             .build(),<br />    ReadBatch.builder(Record2.class)<br />             .mappedTableResource(mappedTable2)<br />             .addGetItem(i -> i.key(k -> k.partitionValue(0)))<br />             .build()))<br /><br />// Iterate over pages with lazy loading or over all items <br />   from the same table.</pre>  | 
|  Écrire plusieurs éléments dans plusieurs tables par lot **Fonctionnement DynamoDB :** `BatchWriteItem`  |  <pre>mapper.batchSave(Arrays.asList(customer1, <br />                               customer2, <br />                               book1)) </pre>  |  <pre>enhancedClient.batchWriteItem(batchWriteItemRequest)<br /><br />enhancedClient.batchWriteItem(r -> r.writeBatches(<br />    WriteBatch.builder(Record1.class)<br />             .mappedTableResource(mappedTable1)<br />             .addPutItem(item1)<br />             .build(),<br />    WriteBatch.builder(Record2.class)<br />             .mappedTableResource(mappedTable2)<br />             .addPutItem(item2)<br />             .build()))</pre>  | 
|  Supprimer plusieurs éléments de plusieurs tables par lot **Fonctionnement DynamoDB :** `BatchWriteItem`  |  <pre>mapper.batchDelete(Arrays.asList(customer1, <br />                                 customer2, <br />                                 book1)) </pre>  |  <pre>enhancedClient.batchWriteItem(r -> r.writeBatches(<br />    WriteBatch.builder(Record1.class)<br />             .mappedTableResource(mappedTable1)<br />             .addDeleteItem(item1key)<br />             .build(),<br />    WriteBatch.builder(Record2.class)<br />             .mappedTableResource(mappedTable2)<br />             .addDeleteItem(item2key)<br />             .build()))</pre>  | 
|  Écrivez/supprimez plusieurs éléments dans un lot **Fonctionnement DynamoDB :** `BatchWriteItem`  |  <pre>mapper.batchWrite(Arrays.asList(customer1, book1), <br />                  Arrays.asList(customer2)) </pre>  |  <pre>enhancedClient.batchWriteItem(r -> r.writeBatches(<br />    WriteBatch.builder(Record1.class)<br />             .mappedTableResource(mappedTable1)<br />             .addPutItem(item1)<br />             .build(),<br />    WriteBatch.builder(Record2.class)<br />             .mappedTableResource(mappedTable2)<br />             .addDeleteItem(item2key)<br />             .build()))</pre>  | 
|  Réaliser une écriture transactionnelle **Fonctionnement DynamoDB :** `TransactWriteItems`  |  <pre>mapper.transactionWrite(transactionWriteRequest)</pre>  |  <pre>enhancedClient.transactWriteItems(transasctWriteItemsRequest)</pre>  | 
|  Réaliser une lecture transactionnelle **Fonctionnement DynamoDB :** `TransactGetItems`  |  <pre>mapper.transactionLoad(transactionLoadRequest)</pre>  |  <pre>enhancedClient.transactGetItems(transactGetItemsRequest) </pre>  | 
|  Obtenir le nombre d'éléments correspondants d'une requête **Fonctionnement DynamoDB** : avec `Query` `Select.COUNT`  |  <pre>mapper.count(Customer.class, queryExpression)</pre>  |  <pre>// Get the count from query results.<br />PageIterable<Customer> pageIterable =<br />    customerTable.query(QueryEnhancedRequest.builder()<br />        .queryConditional(queryConditional)<br />        .select(Select.COUNT)<br />        .build());<br />Iterator<Page<Customer>> iterator = pageIterable.iterator();<br />Page<Customer> page = iterator.next();<br />int count = page.count();<br /><br />// For a more concise approach, you can chain the method calls:<br />int count = customerTable.query(QueryEnhancedRequest.builder()<br />                .queryConditional(queryConditional)<br />                .select(Select.COUNT)<br />                .build())<br />            .iterator().next().count();</pre>  | 
|  Obtenez le nombre d'éléments correspondants d'un scan **Fonctionnement DynamoDB** : avec `Scan` `Select.COUNT`  |  <pre>mapper.count(Customer.class, scanExpression)</pre>  |  <pre>// Get the count from scan results.<br />PageIterable<Customer> pageIterable =<br />    customerTable.scan(ScanEnhancedRequest.builder()<br />        .filterExpression(filterExpression)<br />        .select(Select.COUNT)<br />        .build());<br />Iterator<Page<Customer>> iterator = pageIterable.iterator();<br />Page<Customer> page = iterator.next();<br />int count = page.count();<br /><br />// For a more concise approach, you can chain the method calls:<br />int count = customerTable.scan(ScanEnhancedRequest.builder()<br />                .filterExpression(filterExpression)<br />                .select(Select.COUNT)<br />                .build())<br />            .iterator().next().count();</pre>  | 
|  Créez une table dans DynamoDB correspondant à la classe POJO **Fonctionnement DynamoDB :** `CreateTable`  |  <pre>mapper.generateCreateTableRequest(Customer.class)</pre> L'instruction précédente génère une demande de création de table de bas niveau ; les utilisateurs doivent appeler `createTable` le client DynamoDB.  |  <pre>table.createTable(createTableRequest)<br /><br />table.createTable(r -> r.provisionedThroughput(defaultThroughput())<br />    .globalSecondaryIndices(<br />        EnhancedGlobalSecondaryIndex.builder()<br />            .indexName("gsi_1")<br />            .projection(p -> p.projectionType(ProjectionType.ALL))<br />            .provisionedThroughput(defaultThroughput())<br />            .build()));</pre>  | 
|  Effectuer un scan parallèle dans DynamoDB **Fonctionnement `Scan` DynamoDB** : avec et paramètres `Segment` `TotalSegments`  |  <pre>mapper.parallelScan(Customer.class, <br />                    scanExpression, <br />                    numTotalSegments)</pre>  |  Les utilisateurs sont tenus de gérer les threads de travail et d'appeler `scan` pour chaque segment : <pre>table.scan(r -> r.segment(0).totalSegments(5))</pre>  | 
|  Intégrez Amazon S3 à DynamoDB pour stocker des liens S3 intelligents  |  <pre>mapper.createS3Link(bucket, key)<br />mapper.getS3ClientCache()</pre>  |  Non pris en charge car il associe Amazon S3 et DynamoDB.  | 

## Classes et propriétés de cartes
<a name="dynamodb-mapping-schemas"></a>

Dans les versions V1 et V2, vous mappez des classes à des tables à l'aide d'annotations de style haricot. La V2 propose également [d'autres moyens de définir des schémas](ddb-en-client-adv-features.md#ddb-en-client-adv-features-schm-overview) pour des cas d'utilisation spécifiques, tels que l'utilisation de classes immuables.

### Annotations sur les haricots
<a name="dynamodb-mapping-schemas-annos"></a>

Le tableau suivant montre les annotations de bean équivalentes pour un cas d'utilisation spécifique qui sont utilisées dans les versions V1 et V2. Un scénario `Customer` de classe est utilisé pour illustrer les paramètres.

Les annotations, ainsi que les classes et les énumérations, de la version 2 suivent la convention Camel Case et utilisent « », et non « DynamoDB ». DynamoDb


| Cas d’utilisation | V1 | V2 | 
| --- | --- | --- | 
| Associer une classe à une table |  <pre>@DynamoDBTable (tableName ="CustomerTable")</pre>  | <pre>@DynamoDbBean<br />@DynamoDbBean(converterProviders = {...})</pre>Le nom de la table est défini lors de l'appel de la DynamoDbEnhancedClient\$1table() méthode. | 
| Désigner un membre de classe comme attribut de table  |  <pre>@DynamoDBAttribute(attributeName = "customerName")</pre>  |  <pre>@DynamoDbAttribute("customerName") </pre>  | 
| Désigner un membre de la classe est hash/partition essentiel |  <pre>@DynamoDBHashKey </pre>  |  <pre>@DynamoDbPartitionKey</pre>  | 
| Désigner un membre de la classe est range/sort essentiel |  <pre>@DynamoDBRangeKey </pre>  |  <pre>@DynamoDbSortKey </pre>  | 
| Désigner un membre de classe comme clé de hachage ou de partition d'index secondaire |  <pre>@DynamoDBIndexHashKey </pre>  |  <pre>@DynamoDbSecondaryPartitionKey </pre>  | 
| Désigner un membre de classe comme plage d'index secondaire/clé de tri |  <pre>@DynamoDBIndexRangeKey </pre>  |  <pre>@DynamoDbSecondarySortKey </pre>  | 
| Ignorer ce membre de classe lors du mappage vers une table |  <pre>@DynamoDBIgnore </pre>  |  <pre>@DynamoDbIgnore</pre>  | 
| Désigner un membre de classe comme attribut clé UUID généré automatiquement |  <pre>@DynamoDBAutoGeneratedKey</pre>  |  <pre>@DynamoDbAutoGeneratedUuid </pre> L'extension qui fournit cela n'est pas chargée par défaut ; vous devez ajouter l'extension au générateur de clients.  | 
| Désigner un membre de classe comme attribut d'horodatage généré automatiquement |  <pre>@DynamoDBAutoGeneratedTimestamp</pre>  |  <pre>@DynamoDbAutoGeneratedTimestampAttribute</pre> L'extension qui fournit cela n'est pas chargée par défaut ; vous devez ajouter l'extension au générateur de clients.  | 
| Désigner un membre de classe comme attribut de version auto-incrémenté |  <pre>@DynamoDBVersionAttribute</pre>  |  <pre>@DynamoDbVersionAttribute</pre> L'extension qui fournit cela est chargée automatiquement.  | 
| Désigner un membre de la classe comme nécessitant une conversion personnalisée |  <pre>@DynamoDBTypeConverted</pre>  |  <pre>@DynamoDbConvertedBy</pre>  | 
| Désignez un membre de classe à stocker sous un autre type d'attribut |  <pre>@DynamoDBTyped(<DynamoDBAttributeType>)</pre>  |  Utilisez une `AttributeConverter` implémentation. La V2 fournit de nombreux convertisseurs intégrés pour les types Java courants. Vous pouvez également implémenter votre propre personnalisation `AttributeConverter` ou`AttributeConverterProvider`. Voir [Conversion des attributs de contrôle](ddb-en-client-adv-features-conversion.md) dans ce guide.  | 
| Désignez une classe qui peut être sérialisée dans un document DynamoDB (document de style JSON) ou un sous-document  |  <pre>@DynamoDBDocument</pre>  | Utilisez l'API de document améliorée. Consultez les ressources suivantes :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/dynamodb-mapping-api-changes.html) | 

### Annotations supplémentaires V2
<a name="dynamodb-mapping-schemas-annos-v2-addnl"></a>


| Cas d’utilisation | V1 | V2 | 
| --- | --- | --- | 
| Désignez un membre de classe à ne pas stocker en tant qu'attribut NULL si la valeur Java est nulle | N/A |  <pre>@DynamoDbIgnoreNulls</pre>  | 
| Désignez un membre de classe comme un objet vide si tous les attributs sont nuls | N/A |  <pre>@DynamoDbPreserveEmptyObject</pre>  | 
| Désigner une action de mise à jour spéciale pour un membre du groupe | N/A |  <pre>@DynamoDbUpdateBehavior</pre>  | 
| Désigner une classe immuable | N/A |  <pre>@DynamoDbImmutable</pre>  | 
| Désigner un membre de classe comme attribut de compteur auto-incrémenté | N/A |  <pre>@DynamoDbAtomicCounter</pre> L'extension qui fournit cette fonctionnalité est chargée automatiquement.  | 

## Configuration
<a name="dynamodb-mapping-configuration"></a>

Dans la version 1, vous contrôlez généralement des comportements spécifiques à l'aide d'une instance de`DynamoDBMapperConfig`. Vous pouvez fournir l'objet de configuration lorsque vous créez le mappeur ou lorsque vous faites une demande. Dans la version 2, la configuration est spécifique à l'objet de demande pour l'opération.


| Cas d’utilisation | V1 | Par défaut dans la V1 | V2 | 
| --- | --- | --- | --- | 
|  |  <pre>DynamoDBMapperConfig.builder()</pre>  |  |  | 
| Stratégie de load/write nouvelle tentative par lots |  <pre>  .withBatchLoadRetryStrategy(loadRetryStrategy)</pre> <pre>  .withBatchWriteRetryStrategy(writeRetryStrategy)</pre>  | réessayer les articles ayant échoué | Configurez la stratégie de nouvelle tentative sur le sous-jacentDynamoDBClient. Voir [Configurez le comportement des nouvelles tentatives dans AWS SDK for Java 2.x](retry-strategy.md) dans ce guide. | 
| Lectures cohérentes |  <pre>  .withConsistentReads(CONSISTENT)</pre>  | EVENTUAL | Par défaut, les lectures cohérentes ont la valeur false pour les opérations de lecture. Remplacez par .consistentRead(true) sur l'objet de la requête. | 
| Schéma de conversion avec des ensembles de marshallers/unmarshallers |  <pre>  .withConversionSchema(conversionSchema)</pre> Les implémentations statiques offrent une rétrocompatibilité avec les anciennes versions.  | V2\$1COMPATIBLE | Non applicable. Il s'agit d'une fonctionnalité héritée qui fait référence à la manière dont les premières versions de DynamoDB (V1) stockaient les types de données. Ce comportement ne sera pas conservé dans le client amélioré. Un exemple de comportement dans DynamoDB V1 consiste à stocker les booléens sous forme de nombre plutôt que sous forme de booléen. | 
| Noms des tables |  <pre>  .withObjectTableNameResolver()<br />  .withTableNameOverride() <br />  .withTableNameResolver()</pre> Les implémentations statiques offrent une rétrocompatibilité avec les anciennes versions  | utiliser une annotation ou deviner à partir de la classe |  Le nom de la table est défini lors de l'appel de la `DynamoDbEnhancedClient#table()` méthode.  | 
| Stratégie de chargement de pagination |  <pre>  .withPaginationLoadingStrategy(strategy)</pre>  Les options sont : LAZY\$1`LOADING`, ou `EAGER_LOADING` `ITERATION_ONLY`  | LAZY\$1LOADING |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/dynamodb-mapping-api-changes.html)  | 
| Demander la collecte de métriques |  <pre>  .withRequestMetricCollector(collector)</pre>  | null | metricPublisher()À utiliser ClientOverrideConfiguration lors de la création du client DynamoDB standard.  | 
| Enregistrer le comportement |  <pre>  .withSaveBehavior(SaveBehavior.CLOBBER) </pre> Les options sont `UPDATE``CLOBBER`,`PUT`,`APPEND_SET`, ou`UPDATE_SKIP_NULL_ATTRIBUTES`.  | UPDATE |  Dans la V2, vous appelez `putItem()` ou `updateItem()` explicitement. `CLOBBER or PUT`: L'action correspondante dans la version 2 est l'appel`putItem()`. Il n'existe aucune `CLOBBER` configuration spécifique. `UPDATE`: Correspond à `updateItem()` `UPDATE_SKIP_NULL_ATTRIBUTES`: Correspond à`updateItem()`. Contrôlez le comportement des mises à jour à l'aide du paramètre de demande `ignoreNulls` et de l'`DynamoDbUpdateBehavior`annotation/de la balise. `APPEND_SET`: Non pris en charge  | 
| Type : usine de convertisseurs |  <pre>  .withTypeConverterFactory(typeConverterFactory) </pre>  | convertisseurs de type standard |  Fixez le haricot en utilisant <pre>@DynamoDbBean(converterProviders = {ConverterProvider.class, <br />        DefaultAttributeConverterProvider.class})</pre>  | 

### Configuration par opération
<a name="dynamodb-mapping-configuration-per-op"></a>

Dans la version 1, certaines opérations, telles que`query()`, sont hautement configurables via un objet « expression » soumis à l'opération. Par exemple :

```
DynamoDBQueryExpression<Customer> emailBwQueryExpr = new DynamoDBQueryExpression<Customer>()
    .withRangeKeyCondition("Email",
        new Condition()
            .withComparisonOperator(ComparisonOperator.BEGINS_WITH)
            .withAttributeValueList(
                new AttributeValue().withS("my")));

mapper.query(Customer.class, emailBwQueryExpr);
```

Dans la version 2, au lieu d'utiliser un objet de configuration, vous définissez les paramètres de l'objet de demande à l'aide d'un générateur. Par exemple :

```
QueryEnhancedRequest emailBw = QueryEnhancedRequest.builder()
    .queryConditional(QueryConditional
        .sortBeginsWith(kb -> kb
            .sortValue("my"))).build();

customerTable.query(emailBw);
```

## Conditionnels
<a name="dynamodb-mapping-conditionals"></a>

Dans la version 2, les expressions conditionnelles et filtrantes sont exprimées à l'aide d'un `Expression` objet qui encapsule la condition et le mappage des noms et des filtres. 


| Cas d’utilisation | Opérations | V1 | V2 | 
| --- | --- | --- | --- | 
| Conditions d'attribut attendues | enregistrer (), supprimer (), interroger (), scanner () |  <pre>new DynamoDBSaveExpression()<br />  .withExpected(Collections.singletonMap(<br />      "otherAttribute", new ExpectedAttributeValue(false)))<br />  .withConditionalOperator(ConditionalOperator.AND);</pre>  | Obsolète ; à utiliser ConditionExpression à la place. | 
| Expression de condition | supprimer () |  <pre>deleteExpression.setConditionExpression("zipcode = :zipcode")<br />deleteExpression.setExpressionAttributeValues(...)<br /></pre>  |  <pre>Expression conditionExpression =<br />    Expression.builder()<br />        .expression("#key = :value OR #key1 = :value1")<br />        .putExpressionName("#key", "attribute")<br />        .putExpressionName("#key1", "attribute3")<br />        .putExpressionValue(":value", AttributeValues.stringValue("wrong"))<br />        .putExpressionValue(":value1", AttributeValues.stringValue("three"))<br />        .build();<br /><br />DeleteItemEnhancedRequest request = DeleteItemEnhancedRequest.builder()<br />         .conditionExpression(conditionExpression).build();</pre>  | 
| Expression de filtre | requête (), scan () |  <pre>scanExpression<br />  .withFilterExpression("#statename = :state")<br />  .withExpressionAttributeValues(attributeValueMapBuilder.build())<br />  .withExpressionAttributeNames(attributeNameMapBuilder.build())<br /></pre>  |  <pre>Map<String, AttributeValue> values = singletonMap(":key", stringValue("value"));<br />Expression filterExpression =<br />    Expression.builder()<br />        .expression("name = :key")<br />        .expressionValues(values)<br />        .build();<br />QueryEnhancedRequest request = QueryEnhancedRequest.builder()<br />    .filterExpression(filterExpression).build();<br /></pre>  | 
| Expression de condition pour la requête | requête () |  <pre>queryExpression.withKeyConditionExpression()</pre>  |  <pre>QueryConditional keyEqual = QueryConditional.keyEqualTo(b -> b<br />                .partitionValue("movie01"));<br /><br />QueryEnhancedRequest tableQuery = QueryEnhancedRequest.builder()<br />                .queryConditional(keyEqual)<br />                .build();</pre>  | 

## Conversion de type
<a name="dynamodb-mapping-type-conv"></a>

### Convertisseurs par défaut
<a name="dynamodb-mapping-type-conv-defaults"></a>

Dans la version 2, le SDK fournit un ensemble de convertisseurs par défaut pour tous les types courants. Vous pouvez modifier les convertisseurs de type à la fois au niveau global du fournisseur et pour un seul attribut. Vous trouverez une liste des convertisseurs disponibles dans la référence de l'[AttributeConverter](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/AttributeConverter.html)API.

### Définir un convertisseur personnalisé pour un attribut
<a name="dynamodb-mapping-type-conv-anno"></a>

Dans la version 1, vous pouvez annoter une méthode getter `@DynamoDBTypeConverted` pour spécifier la classe qui effectue la conversion entre le type d'attribut Java et le type d'attribut DynamoDB. Par exemple, une `CurrencyFormatConverter` conversion entre un `Currency` type Java et une chaîne DynamoDB peut être appliquée comme indiqué dans l'extrait suivant.

```
@DynamoDBTypeConverted(converter = CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
```

L'équivalent V2 de l'extrait précédent est illustré ci-dessous.

```
@DynamoDbConvertedBy(CurrencyFormatConverter.class)
public Currency getCurrency() { return currency; }
```

**Note**  
Dans la version 1, vous pouvez appliquer l'annotation à l'attribut lui-même, à un type ou à une annotation définie par l'utilisateur, tandis que la version 2 prend en charge l'application de l'annotation uniquement au getter.

### Ajouter un convertisseur de type, une usine ou un fournisseur
<a name="dynamodb-mapping-type-conv-factory"></a>

Dans la version 1, vous pouvez fournir votre propre ensemble de convertisseurs de type ou remplacer les types qui vous intéressent en ajoutant une usine de convertisseurs de type à la configuration. La fabrique de convertisseurs de types s'étend`DynamoDBTypeConverterFactory`, et les remplacements sont effectués en obtenant une référence à l'ensemble par défaut et en l'étendant. L'extrait suivant montre comment procéder.

```
DynamoDBTypeConverterFactory typeConverterFactory =
    DynamoDBTypeConverterFactory.standard().override()
        .with(String.class, CustomBoolean.class, new DynamoDBTypeConverter<String, CustomBoolean>() {
            @Override
            public String convert(CustomBoolean bool) {
                return String.valueOf(bool.getValue());
            }
            @Override
            public CustomBoolean unconvert(String string) {
                return new CustomBoolean(Boolean.valueOf(string));
            }}).build();
DynamoDBMapperConfig config =
    DynamoDBMapperConfig.builder()
        .withTypeConverterFactory(typeConverterFactory)
        .build();
DynamoDBMapper mapperWithTypeConverterFactory = new DynamoDBMapper(dynamo, config);
```

La V2 fournit des fonctionnalités similaires par le biais de l'`@DynamoDbBean`annotation. Vous pouvez fournir une commande unique `AttributeConverterProvider` ou une chaîne de `AttributeConverterProvider` commandes. Notez que si vous fournissez votre propre chaîne de fournisseurs de convertisseurs d'attributs, vous remplacerez le fournisseur de conversion par défaut et devrez l'inclure dans la chaîne pour utiliser ses convertisseurs d'attributs. 

```
@DynamoDbBean(converterProviders = {
   ConverterProvider1.class, 
   ConverterProvider2.class,
   DefaultAttributeConverterProvider.class})
public class Customer {
  ...
}
```

La section de ce guide consacrée à la [conversion d'attributs](ddb-en-client-adv-features-conversion.md#ddb-en-client-adv-features-conversion-example) contient un exemple complet pour la version 2.

# Différences de gestion des chaînes entre la version 1 et la version 2 du SDK for Java
<a name="dynamodb-migration-string-handling"></a>

Les versions V1 et V2 traitent différemment les chaînes vides lors de l'envoi de données vers DynamoDB :
+ **V1** : Convertit les chaînes vides en valeurs nulles avant de les envoyer à DynamoDB (aucun attribut n'est donc créé)
+ **V2** : envoie des chaînes vides sous forme de valeurs de chaînes vides réelles à DynamoDB

**Important**  
Après la migration vers la version V2, si vous ne souhaitez pas que des chaînes vides soient stockées dans DynamoDB, vous devez implémenter des convertisseurs personnalisés. Sans convertisseurs personnalisés, la V2 stocke les chaînes vides en tant qu'attributs de chaînes vides réels dans vos éléments DynamoDB, ce qui est différent du comportement de la V1 qui consiste à omettre complètement ces attributs.

**Example convertisseur personnalisé pour V2 qui convertit un attribut de chaîne vide en null**  

```
/**
 * Custom converter that maintains V1 behavior by converting empty strings to null values
 * when writing to DynamoDB, ensuring compatibility with existing data. No attribute will be saved to DynamoDB.
 */
public class NullifyEmptyStringConverter implements AttributeConverter<String> {
    @Override
    public AttributeValue transformFrom(String value) {
        if (value == null || value.isEmpty()) {
            return AttributeValue.builder().nul(true).build();
        }
        return AttributeValue.builder().s(value).build();
    }

    @Override
    public String transformTo(AttributeValue attributeValue) {
        if (attributeValue.nul()) {
            return null;
        }
        return attributeValue.s();
    }

    @Override
    public EnhancedType<String> type() {
        return EnhancedType.of(String.class);
    }

    @Override
    public AttributeValueType attributeValueType() {
        return AttributeValueType.S;
    }
}

// V2 usage:
@DynamoDbBean
public class Customer {
    private String name;

    @DynamoDbConvertedBy(NullifyEmptyStringConverter.class)
    public String getName() {
        return name;
    }
}
```



# Différences de verrouillage optimistes entre la version 1 et la version 2 du SDK for Java
<a name="dynamodb-migrate-optimstic-locking"></a>

Les versions V1 et V2 implémentent un verrouillage optimiste avec une annotation d'attribut qui marque une propriété de votre classe de bean pour stocker le numéro de version.


**Différences entre les comportements de verrouillage optimistes**  

|  | V1 | V2 | 
| --- | --- | --- | 
| Annotation de classe Bean | @DynamoDBVersionAttribute | @DynamoDbVersionAttribute(notez que la V2 utilise un « b » minuscule) | 
| Sauvegarde initiale | Attribut du numéro de version défini sur 1. |  La valeur de départ de l'attribut de version défini avec`@DynamoDbVersionAttribute(startAt = X)`. La valeur par défaut est 0.  | 
| Mettre à jour | L'attribut du numéro de version est incrémenté de 1 si le contrôle conditionnel vérifie que le numéro de version de l'objet mis à jour correspond au numéro de la base de données. |  L'attribut du numéro de version est incrémenté si le contrôle conditionnel vérifie que le numéro de version de l'objet mis à jour correspond au numéro de la base de données. L'attribut du numéro de version incrémenté par l'`incrementBy`option définie avec`@DynamoDbVersionAttribute(incrementBy = X)`. La valeur par défaut est 1.  | 
| Suppression | DynamoDBMapperajoute une vérification conditionnelle pour vérifier que le numéro de version de l'objet supprimé correspond au numéro de version de la base de données. |  La V2 n'ajoute pas automatiquement de conditions pour les opérations de suppression. Vous devez ajouter des expressions de condition manuellement si vous souhaitez contrôler le comportement de suppression. Dans l'exemple suivant, `recordVersion` il s'agit de l'attribut version du bean. <pre>// 1. Read the item and get its current version.<br />Customer item = customerTable.getItem(Key.builder().partitionValue("someId").build());<br />AttributeValue currentVersion = item.getRecordVersion();<br /><br />// 2. Create conditional delete with the `currentVersion` value.<br />DeleteItemEnhancedRequest deleteItemRequest =<br />    DeleteItemEnhancedRequest.builder()<br />       .key(KEY)<br />       .conditionExpression(Expression.builder()<br />           .expression("recordVersion = :current_version_value")<br />           .putExpressionValue(":current_version_value", currentVersion)<br />           .build()).build();<br /><br />customerTable.deleteItem(deleteItemRequest);</pre>  | 
| Rédaction transactionnelle avec vérification des conditions | Vous ne pouvez pas utiliser une classe de bean annotée @DynamoDBVersionAttribute dans une addConditionCheck méthode. | Vous pouvez utiliser une classe de bean avec l'@DynamoDbVersionAttributeannotation dans une addConditionCheck méthode de création pour une transactWriteItems demande. | 
| Désactiver | Désactivez le verrouillage optimiste en modifiant la valeur de l' DynamoDBMapperConfig.SaveBehaviorénumération de UPDATE àCLOBBER. |  N'utilisez pas l'`@DynamoDbVersionAttribute`annotation.  | 

# Différences entre les versions 1 et 2 du SDK for Java avec Fluent Setters
<a name="dynamodb-migrate-fluent-setters"></a>

Vous pouvez l'utiliser POJOs avec des setters fluides dans l'API de mappage DynamoDB pour la version V1 et avec la version V2 depuis la version 2.30.29. 

Par exemple, le POJO suivant renvoie une `Customer` instance à partir de la `setName` méthode :

```
// V1

@DynamoDBTable(tableName ="Customer")
public class Customer{
  private String name;
  // Other attributes and methods not shown.
  public Customer setName(String name){
     this.name = name;
     return this;
  }
}
```

Toutefois, si vous utilisez une version de V2 antérieure à la version 2.30.29, `setName` renvoie une `Customer` instance avec une `name` valeur de. `null`

```
// V2 prior to version 2.30.29.

@DynamoDbBean
public class Customer{
  private String name;
  // Other attributes and methods not shown.
  public Customer setName(String name){ 
     this.name = name;
     return this;  // Bug: returns this instance with a `name` value of `null`.
  }
}
```

```
// Available in V2 since version 2.30.29.

@DynamoDbBean
public class Customer{
  private String name;
  // Other attributes and methods not shown.
  public Customer setName(String name){ 
     this.name = name;
     return this;  // Returns this instance for method chaining with the `name` value set.
  }
}
```

# Différences entre l'API des documents entre la version 1 et la version 2 du AWS SDK pour Java
<a name="dynamodb-mapping-document-api"></a>

L'API Document permet de travailler avec des documents de style JSON sous forme d'éléments uniques dans une table DynamoDB. L'API de document V1 possède une API correspondante dans la version V2, mais au lieu d'utiliser un client distinct pour l'API de document comme dans la version V1, la version V2 intègre les fonctionnalités de l'API de document dans le client amélioré DynamoDB. 

Dans la version 1, la [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Item.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Item.html)classe représente un enregistrement non structuré d'une table DynamoDB. Dans la version 2, un enregistrement non structuré est représenté par une instance de la [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocument.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocument.html)classe. Notez que les clés primaires sont définies dans le schéma de table pour la version 2 et sur l'élément lui-même dans la version 1.

Le tableau ci-dessous compare les différences entre le document APIs de la version 1 et de la version 2.


| Cas d’utilisation | V1 | V2 | 
| --- |--- |--- |
| Création d'un client de documents |  <pre>AmazonDynamoDB client = ... //Create a client.<br />DynamoDB documentClient = new DynamoDB(client);</pre>  |  <pre>// The V2 Document API uses the same DynamoDbEnhancedClient<br />// that is used for mapping POJOs.<br />DynamoDbClient standardClient = ... //Create a standard client.<br />DynamoDbEnhancedClient enhancedClient = ... // Create an enhanced client.<br /></pre>  | 
| Référencer un tableau |  <pre>Table documentTable = docClient.documentClient("Person");</pre>  |  <pre>DynamoDbTable<EnhancedDocument> documentTable = enhancedClient.table("Person",  <br />        TableSchema.documentSchemaBuilder()<br />              .addIndexPartitionKey(TableMetadata.primaryIndexName(),"id", AttributeValueType.S)<br />              .attributeConverterProviders(AttributeConverterProvider.defaultProvider())<br />              .build());</pre>  | 
| **Work with semi-structured data** | 
| --- |
| Mettre un élément |  <pre>Item item = new Item()<br />      .withPrimaryKey("id", 50)<br />      .withString("firstName", "Shirley");<br />PutItemOutcome outcome = documentTable.putItem(item);</pre>  |  <pre>EnhancedDocument personDocument = EnhancedDocument.builder()<br />        .putNumber("id", 50)<br />        .putString("firstName", "Shirley")<br />        .build();<br />documentTable.putItem(personDocument);</pre>  | 
| Obtenir un élément |  <pre>GetItemOutcome outcome = documentTable.getItemOutcome( "id", 50);<br />Item personDocFromDb = outcome.getItem();<br />String firstName = personDocFromDb.getString("firstName");<br /></pre>  |  <pre>EnhancedDocument personDocFromDb = documentTable<br />        .getItem(Key.builder()<br />            .partitionValue(50)<br />            .build()); <br />String firstName = personDocFromDb.getString("firstName");<br /></pre>  | 
| **Work with JSON items** | 
| --- |
| Convertir une structure JSON pour l'utiliser avec l'API Document |  <pre>// The 'jsonPerson' identifier is a JSON string. <br />Item item = new Item().fromJSON(jsonPerson);</pre>  |  <pre>// The 'jsonPerson' identifier is a JSON string.<br />EnhancedDocument document = EnhancedDocument.builder()<br />        .json(jsonPerson).build());</pre>  | 
| Mettez JSON |  <pre>documentTable.putItem(item)</pre>  |  <pre>documentTable.putItem(document);</pre>  | 
| Lire le JSON |  <pre>GetItemOutcome outcome = //Get item.<br />String jsonPerson = outcome.getItem().toJSON();</pre>  |  <pre>String jsonPerson = documentTable.getItem(Key.builder()<br />        .partitionValue(50).build())<br />        .fromJson();</pre>  | 

## Référence de l'API et guides pour le document APIs
<a name="dynamodb-mapping-document-api-ref"></a>


|  | V1 | V2 | 
| --- | --- | --- | 
| Référence des API | [Référence d’API](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/package-summary.html) | [Référence d’API](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/document/package-summary.html) | 
| Guide de documentation | [Guide du développeur Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaDocumentAPIItemCRUD.html) | [API de documents améliorée](ddb-en-client-doc-api.md) (ce guide) | 

# API Xpec V1 vers API d'expressions V2
<a name="ddb-v1-xspec-migrate"></a>

L'API Expression Specification (Xspec) disponible dans la version 1 qui permet de créer des expressions destinées à fonctionner avec des données orientées document n'est pas disponible dans la version 2. La V2 utilise l'API Expression, qui fonctionne à la fois avec des données orientées document et des données object-to-item mappées.


****  

|  | V1 | V2 | 
| --- | --- | --- | 
| Nom de l’API | API de spécification d'expression (Xspec) | API d'expression | 
| Fonctionne avec | [Méthodes de la classe Document API [Table](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Table.html), telles que [UpdateItem et scan](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Table.html#updateItem-java.lang.String-java.lang.Object-com.amazonaws.services.dynamodbv2.xspec.UpdateItemExpressionSpec-)](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Table.html#scan-com.amazonaws.services.dynamodbv2.xspec.ScanExpressionSpec-) |  Les deux APIs versions du client DynamoDB Enhanced : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/ddb-v1-xspec-migrate.html) Pour les deux types de APIs, après avoir acquis une [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/DynamoDbTable.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/DynamoDbTable.html)instance : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/ddb-v1-xspec-migrate.html) vous utilisez des expressions dans `DynamoDbTable` les méthodes lorsque vous créez des objets de demande. Par exemple, dans la `filterExpression` méthode du [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/enhanced/dynamodb/model/QueryEnhancedRequest.Builder.html)  | 
| Ressources |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sdk-for-java/latest/developer-guide/ddb-v1-xspec-migrate.html)  | [Informations sur les expressions](ddb-en-client-expressions.md) contenues dans ce guide du développeur Java | 

# Migration de bibliothèques de chiffrement
<a name="ddb-encryption-lib-migrate"></a>

Pour plus d'informations sur la migration de la bibliothèque de chiffrement pour que DynamoDB fonctionne avec la version V2 du SDK Java, consultez le guide du développeur du client de chiffrement Amazon [DynamoDB](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/ddb-java-migrate.html).

# Modifications apportées au traitement automatique des requêtes Amazon SQS de la version 1 à la version 2
<a name="migration-sqs-auto-batching"></a>

Cette rubrique détaille les modifications apportées au traitement automatique des demandes par lots pour Amazon SQS entre la version 1 et la version 2 du. AWS SDK pour Java

## Changements de haut niveau
<a name="migration-sqs-auto-batching-high-level-changes"></a>

La version AWS SDK pour Java 1.x effectue une mise en mémoire tampon côté client à l'aide d'une `[AmazonSQSBufferedAsyncClient](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/buffered/AmazonSQSBufferedAsyncClient.html)` classe distincte qui nécessite une initialisation explicite pour le traitement par lots de demandes. 

 AWS SDK for Java 2.x Simplifie et améliore la fonctionnalité de mise en mémoire tampon avec le`[SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html)`. La mise en œuvre de cette interface fournit des fonctionnalités de traitement automatique par lots de demandes directement intégrées à la norme`[SqsAsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/SqsAsyncClient.html)`. Pour en savoir plus sur les `SqsAsyncBatchManager` versions 2, consultez le [Utilisez le traitement automatique des demandes par lots pour Amazon SQS avec AWS SDK for Java 2.x](sqs-auto-batch.md) sujet de ce guide.


| Modifier | v1 |   v2 | 
| --- | --- | --- | 
|    Dépendances de Maven  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>1.12.7821</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-sqs</artifactId><br />    </dependency><br /></dependencies><br /></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>2.31.152</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>sqs</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| Noms des packages | com.amazonaws.services.sqs.buffered | software.amazon.awssdk.services.sqs.batchmanager | 
| Noms des classes |  `[AmazonSQSBufferedAsyncClient](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/sqs/buffered/AmazonSQSBufferedAsyncClient.html)`  | [SqsAsyncBatchManager](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sqs/batchmanager/SqsAsyncBatchManager.html) | 

1 [Dernière version](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom). 2 [Dernière version](https://central.sonatype.com/artifact/software.amazon.awssdk/bom).

## Utilisation du traitement automatique des requêtes SQS par lots
<a name="migration-sqs-auto-batching-using"></a>


| Modifier | v1 |   v2 | 
| --- | --- | --- | 
| Création d'un gestionnaire de lots |  <pre>AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient();<br />AmazonSQSAsync bufferedSqs = new <br />            AmazonSQSBufferedAsyncClient(sqsAsync);</pre>  |  <pre>SqsAsyncClient asyncClient = SqsAsyncClient.create();<br />SqsAsyncBatchManager sqsAsyncBatchManager = <br />            asyncClient.batchManager();</pre>  | 
| Création d'un gestionnaire de lots avec une configuration personnalisée |  <pre>AmazonSQSAsync sqsAsync = new AmazonSQSAsyncClient();<br /><br />QueueBufferConfig queueBufferConfig = new QueueBufferConfig()<br />        .withMaxBatchOpenMs(200)<br />        .withMaxBatchSize(10)<br />        .withMinReceiveWaitTimeMs(1000)<br />        .withVisibilityTimeoutSeconds(20)<br />        .withReceiveMessageAttributeNames(messageAttributeValues);<br /><br />AmazonSQSAsync bufferedSqs = <br />        new AmazonSQSBufferedAsyncClient(sqsAsync, queueBufferConfig);</pre>  |  <pre>BatchOverrideConfiguration batchOverrideConfiguration = <br />    BatchOverrideConfiguration.builder()<br />        .sendRequestFrequency(Duration.ofMillis(200))<br />        .maxBatchSize(10)<br />        .receiveMessageMinWaitDuration(Duration.ofMillis(1000))<br />        .receiveMessageVisibilityTimeout(Duration.ofSeconds(20))<br />        .receiveMessageSystemAttributeNames(messageSystemAttributeNames)<br />        .receiveMessageAttributeNames(messageAttributeValues)<br />        .build();<br /><br />SqsAsyncBatchManager sqsAsyncBatchManager = SqsAsyncBatchManager.builder()<br />        .overrideConfiguration(batchOverrideConfiguration)<br />        .client(SqsAsyncClient.create())<br />        .scheduledExecutor(Executors.newScheduledThreadPool(8))<br />        .build();</pre>  | 
| Envoyer des messages |  <pre>Future<SendMessageResult> sendResultFuture = <br />        bufferedSqs.sendMessageAsync(new SendMessageRequest()<br />                .withQueueUrl(queueUrl)<br />                .withMessageBody(body));</pre>  |  <pre>CompletableFuture<SendMessageResponse> sendCompletableFuture = <br />        sqsAsyncBatchManager.sendMessage(<br />                SendMessageRequest.builder()<br />                        .queueUrl(queueUrl)<br />                        .messageBody(body)<br />                        .build());</pre>  | 
| Supprimer des messages |  <pre>Future<DeleteMessageResult> deletResultFuture =<br />        bufferedSqs.deleteMessageAsync(new DeleteMessageRequest()<br />                .withQueueUrl(queueUrl));</pre>  |  <pre>CompletableFuture<DeleteMessageResponse> deleteResultCompletableFuture<br />        = sqsAsyncBatchManager.deleteMessage(<br />                DeleteMessageRequest.builder()<br />                        .queueUrl(queueUrl)<br />                        .build());</pre>  | 
| Modifier la visibilité des messages |  <pre>Future<ChangeMessageVisibilityResult> changeVisibilityResultFuture =<br />        bufferedSqs.changeMessageVisibilityAsync<br />                (new ChangeMessageVisibilityRequest()<br />                        .withQueueUrl(queueUrl)<br />                        .withVisibilityTimeout(20));</pre>  |  <pre>CompletableFuture<ChangeMessageVisibilityResponse> changeResponseCompletableFuture<br />        = sqsAsyncBatchManager.changeMessageVisibility(<br />                ChangeMessageVisibilityRequest.builder()<br />                        .queueUrl(queueUrl)<br />                        .visibilityTimeout(20)<br />                        .build());</pre>  | 
| Recevoir des messages |  <pre>ReceiveMessageResult receiveResult =<br />        bufferedSqs.receiveMessage(<br />                new ReceiveMessageRequest()<br />                        .withQueueUrl(queueUrl));</pre>  |  <pre>CompletableFuture<ReceiveMessageResponse> <br />        responseCompletableFuture = sqsAsyncBatchManager.receiveMessage(<br />                ReceiveMessageRequest.builder()<br />                        .queueUrl(queueUrl)<br />                        .build());</pre>  | 

## Différences entre les types de retour asynchrones
<a name="migration-sqs-auto-batching-asyc-return-type"></a>


| Modifier | v1 |   v2 | 
| --- | --- | --- | 
| Type de retour | Future<ResultType> | CompletableFuture<ResponseType> | 
| Mécanisme de rappel | Nécessite AsyncHandler une onError méthode onSuccess et des méthodes séparées | Utilisations CompletableFuture APIs fournies par le JDK, telles quewhenComplete(), thenCompose() thenApply() | 
| Gestion des exceptions | Utilise AsyncHandler\$1onError() la méthode | Utilisations CompletableFuture APIs fournies par le JDK, telles que exceptionally()handle(), ou whenComplete() | 
| Cancellation | Support de base via Future.cancel() | L'annulation d'un parent annule CompletableFuture automatiquement tous les futurs dépendants de la chaîne | 

## Différences de gestion de l'achèvement asynchrone
<a name="migration-sqs-auto-batching-asyc-completion-handling"></a>


| Modifier | v1 |   v2 | 
| --- | --- | --- | 
| Implémentation du gestionnaire de réponses |  <pre>Future<ReceiveMessageResult> future = bufferedSqs.receiveMessageAsync(<br />        receiveRequest,<br />        new AsyncHandler<ReceiveMessageRequest, ReceiveMessageResult>() {<br />            @Override<br />            public void onSuccess(ReceiveMessageRequest request, <br />                              ReceiveMessageResult result) {<br />                List<Message> messages = result.getMessages();<br />                System.out.println("Received " + messages.size() + " messages");<br />                for (Message message : messages) {<br />                    System.out.println("Message ID: " + message.getMessageId());<br />                    System.out.println("Body: " + message.getBody());<br />                }<br />            }<br /><br />            @Override<br />            public void onError(Exception e) {<br />                System.err.println("Error receiving messages: " + e.getMessage());<br />                e.printStackTrace();<br />            }<br />        }<br />);</pre>  |  <pre>CompletableFuture<ReceiveMessageResponse> completableFuture = sqsAsyncBatchManager<br />               .receiveMessage(ReceiveMessageRequest.builder()<br />               .queueUrl(queueUrl).build())<br />        .whenComplete((receiveMessageResponse, throwable) -> {<br />            if (throwable != null) {<br />                System.err.println("Error receiving messages: " + throwable.getMessage());<br />                throwable.printStackTrace();<br />            } else {<br />                List<Message> messages = receiveMessageResponse.messages();<br />                System.out.println("Received " + messages.size() + " messages");<br />                for (Message message : messages) {<br />                    System.out.println("Message ID: " + message.messageId());<br />                    System.out.println("Body: " + message.body());<br />                }<br />            }<br />        });</pre>  | 

## Principaux paramètres de configuration
<a name="migration-sqs-auto-batching-params"></a>


****  

| Paramètre | v1 |   v2 | 
| --- | --- | --- | 
| Taille maximale du lot | maxBatchSize(10 demandes par lot par défaut) | maxBatchSize(10 demandes par lot par défaut) | 
| Temps d'attente par lots | maxBatchOpenMs(par défaut 200 ms) | sendRequestFrequency(par défaut 200 ms) | 
| Délai d'expiration de visibilité | visibilityTimeoutSeconds(-1 pour la file d'attente par défaut) | receiveMessageVisibilityTimeout(file d'attente par défaut) | 
| Temps d'attente minimal | longPollWaitTimeoutSeconds(20 s quand longPoll c'est vrai) | receiveMessageMinWaitDuration(par défaut 50 ms) | 
| Attributs de message | Régler en utilisant ReceiveMessageRequest | receiveMessageAttributeNames(aucun par défaut) | 
| Attributs système | Régler en utilisant ReceiveMessageRequest | receiveMessageSystemAttributeNames(aucun par défaut) | 
| Longue période de sondage | longPoll(la valeur par défaut est vraie) | Non pris en charge pour éviter les connexions ouvertes qui attendent que le serveur envoie les messages | 
| Temps d'attente maximal pour un long sondage | longPollWaitTimeoutSeconds(par défaut : 20 s) | Non pris en charge pour éviter les connexions ouvertes qui attendent que le serveur envoie les messages | 
| Nombre maximum de lots de réception préextraits stockés côté client | maxDoneReceiveBatches(10 lots) | Non pris en charge car il est géré en interne | 
| Nombre maximum de lots sortants actifs traités simultanément | maxInflightOutboundBatches(par défaut 5 lots) | Non pris en charge car il est géré en interne | 
| Nombre maximum de lots de réception actifs traités simultanément | maxInflightReceiveBatches(10 lots par défaut) | Non pris en charge car il est géré en interne | 

# Utiliser le SDK pour Java 1.x et 2.x side-by-side
<a name="migration-side-by-side"></a>

Vous pouvez utiliser les deux versions de AWS SDK pour Java dans vos projets.

Voici un exemple de `pom.xml` fichier pour un projet qui utilise Amazon S3 la version 1.x et la version DynamoDB 2.27.21.

**Example Exemple de POM**  
Cet exemple montre une entrée de `pom.xml` fichier pour un projet qui utilise à la fois les versions 1.x et 2.x du SDK.  

```
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-bom</artifactId>
            <version>1.12.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
          <groupId>software.amazon.awssdk</groupId>
          <artifactId>bom</artifactId>
          <version>2.27.21</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-s3</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>dynamodb</artifactId>
    </dependency>
</dependencies>
```