

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

# 遷移工具不支援的程式碼模式
<a name="migration-tool-unsupported-patterns"></a>

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

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

## 使用參數請求物件建構函數
<a name="request-pojo-constructors"></a>

對於請求 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();
```

## 具有個別參數的服務用戶端方法
<a name="service-client-method-overloads"></a>

遷移工具無法轉換採用個別參數的服務用戶端方法，而非請求物件 (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);
```

## 請求逾時方法
<a name="request-pojo-timeout-configuration"></a>

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

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

## 具有參數的服務用戶端建構函數
<a name="service-client-constructors-with-args"></a>

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

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