Patrones de código no compatibles de la herramienta de migración
La herramienta de migración convierte automáticamente la mayor parte del código de la v1 a la v2. Sin embargo, algunos patrones de código requieren migración manual. En este tema se proporcionan ejemplos detallados de los patrones no compatibles más comunes y se muestra cómo convertirlos manualmente.
Lo que sigue no es una lista de patrones exhaustiva. Si el código no se compila después de ejecutar la herramienta de migración, siga las instrucciones de migración paso a paso para migrar manualmente el resto del código de la v1.
Solicitud de constructores de objetos con parámetros
En el caso de los POJO de solicitud (excepto Amazon S3), la herramienta de migración solo transforma los métodos setter. La herramienta no admite constructores con parámetros.
Patrón compatible: solicite un objeto mediante setters (sin parámetros de constructor)
Antes (código de 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");
Después (resultado de la herramienta de migración):
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();
Patrón no compatible: solicite un constructor de objetos con parámetros
La herramienta de migración no puede convertir constructores con parámetros:
Antes de la migración manual, pero después de la herramienta de migración:
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");
La herramienta de migración transforma la importación a la v2, pero el código del constructor permanece sin cambios y requiere actualizaciones manuales para utilizar el patrón del compilador.
Después de la migración manual:
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étodos del cliente de servicio con parámetros individuales
La herramienta de migración no puede convertir los métodos del cliente de servicio que utilizan parámetros individuales en lugar de objetos de solicitud (excepto Amazon S3).
Antes (código de 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");
Después (resultado de la herramienta de migración, no se compila):
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");
Debe actualizar manualmente los argumentos del método para usar un objeto de solicitud:
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étodos de tiempo de espera de solicitud
La herramienta de migración no convierte los métodos que establecen tiempos de espera en objetos de solicitud.
Antes (código de v1):
import com.amazonaws.services.sqs.model.SendMessageRequest; SendMessageRequest request = new SendMessageRequest(); request.setSdkRequestTimeout(7);
Después (resultado de la herramienta de migración, no se compila):
import software.amazon.awssdk.services.sqs.model.SendMessageRequest; // Import updated to v2. SendMessageRequest request = SendMessageRequest.builder().build(); // Does not compile. request.setSdkRequestTimeout(7);
Debe migrar manualmente para usar el método overrideConfiguration 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();
Constructores de clientes de servicio con parámetros
La herramienta de migración convierte los constructores de clientes de servicio vacíos, pero no puede convertir los constructores que aceptan parámetros como credenciales o configuración.
Antes (código de 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);
Después (resultado de la herramienta de migración, no se compila):
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);
Debe actualizar manualmente el constructor de clientes de servicio para utilizar el patrón del compilador:
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();