本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
迁移工具不支持的代码模式
迁移工具会自动将大多数 v1 代码转换为 v2。但是,某些代码模式需要手动迁移。本主题提供了最常见的不支持的模式的详细示例,并向您展示了如何手动转换这些模式。
以下模式列表并非详尽无遗。如果运行迁移工具后您的代码无法编译,请按照step-by-step迁移说明手动迁移剩余的 v1 代码。
请求带参数的对象构造函数
对于请求 POJOs (不包括 Amazon S3),迁移工具仅转换设置器方法。该工具不支持带参数的构造函数。
支持的模式:使用 setter 请求对象(没有构造函数参数)
之前(原始 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");
之后(迁移工具结果):
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");
之后(迁移工具结果-无法编译):
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);
之后(迁移工具结果-无法编译):
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);
之后(迁移工具结果-无法编译):
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();