遷移工具不支援的程式碼模式 - AWS SDK for Java 2.x

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

遷移工具不支援的程式碼模式

遷移工具會自動將大多數 v1 程式碼轉換為 v2。不過,某些程式碼模式需要手動遷移。本主題提供最常見的不支援模式的詳細範例,並說明如何手動轉換。

下列模式清單並不詳盡。如果您的程式碼在執行遷移工具後未編譯,請依照step-by-step遷移說明手動遷移剩餘的 v1 程式碼。

使用參數請求物件建構函數

對於請求 POJOs(Amazon S3 除外),遷移工具只會轉換設定程式方法。工具不支援具有參數的建構函數。

支援的模式:使用設定器請求物件 (無建構器參數)

之前 (原始 v1 程式碼):

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");

After (遷移工具結果):

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();

不支援的模式:使用參數請求物件建構函數

遷移工具無法轉換具有參數的建構函數:

在手動遷移之前,但在遷移工具之後:

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");

遷移工具會將匯入轉換為 v2,但建構函式程式碼保持不變,且需要手動更新才能使用建置器模式。

手動遷移之後:

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();

具有個別參數的服務用戶端方法

遷移工具無法轉換採用個別參數而非請求物件 (Amazon S3 除外) 的服務用戶端方法。

之前 (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");

After (遷移工具結果 – 不編譯):

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");

您必須手動更新方法引數,才能使用請求物件:

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);

請求逾時方法

遷移工具不會轉換在請求物件上設定逾時的方法。

之前 (v1 程式碼):

import com.amazonaws.services.sqs.model.SendMessageRequest; SendMessageRequest request = new SendMessageRequest(); request.setSdkRequestTimeout(7);

After (遷移工具結果 – 不編譯):

import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2. SendMessageRequest request = SendMessageRequest.builder().build(); // Does not compile. request.setSdkRequestTimeout(7);

您必須手動遷移,才能使用 v2 的 overrideConfiguration方法:

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();

具有參數的服務用戶端建構函數

遷移工具會轉換空的服務用戶端建構函數,但無法轉換接受登入資料或組態等參數的建構函數。

之前 (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);

After (遷移工具結果 – 不編譯):

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);

您必須手動更新服務用戶端建構函數,才能使用建置器模式:

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();