Как решить, «Клиент неизменен, если он создан вместе со строителем»? - PullRequest
0 голосов
/ 07 июня 2018

Я создаю приложение, в которое хочу загрузить файл в корзину S3.Я получаю сообщение об ошибке из следующего фрагмента кода:

BasicAWSCredentials awsCreds = new BasicAWSCredentials("<myKey>", "<mySecretId>");
                                AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                                        .withRegion("<myRegion>")
                                        .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                                        .build();

                                PutObjectRequest request = new PutObjectRequest("testbucketupdate", "testFile", new File("D:\\Attachments\\LICENSE"));
                                ObjectMetadata metadata = new ObjectMetadata();
                                metadata.setContentType("plain/text");
                                metadata.addUserMetadata("x-amz-meta-title", "someTitle");
                                request.setMetadata(metadata);
                                s3Client.setS3ClientOptions(S3ClientOptions.builder().setPathStyleAccess(true).disableChunkedEncoding().build());
                                s3Client.putObject(request);

Я получаю следующую ошибку:

Java.lang.UnsupportedOperationException: Client is immutable when created with the builder.
    at com.amazonaws.AmazonWebServiceClient.checkMutability(AmazonWebServiceClient.java:937)
    at com.amazonaws.services.s3.AmazonS3Client.setS3ClientOptions(AmazonS3Client.java:716)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.check(LambdaFunctionHandler.java:123)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.main(LambdaFunctionHandler.java:208)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:51)
    at com.amazonaws.lambda.demo.LambdaFunctionHandler.handleRequest(LambdaFunctionHandler.java:1)
    at lambdainternal.EventHandlerLoader$PojoHandlerAsStreamHandler.handleRequest(EventHandlerLoader.java:178)
    at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:888)
    at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:283)
    at lambdainternal.AWSLambda.<clinit>(AWSLambda.java:64)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at lambdainternal.LambdaRTEntry.main(LambdaRTEntry.java:94)

Какие изменения необходимо внести, чтобы успешно загрузить файл в требуемое ведро?

1 Ответ

0 голосов
/ 07 июня 2018

Очевидно, что ошибка говорит о том, что если вы используете AmazonS3ClientBuilder для построения клиента, он будет неизменным, и вы не сможете изменить его после его сборки.

Решение состоит в том, чтобы удалить позже s3Client.setS3ClientOptions(...) и установить необходимые параметры с помощью AmazonS3ClientBuilder builder.Нечто подобное:

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
    .withRegion("<myRegion>")
    .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
    .enablePathStyleAccess()
    .disableChunkedEncoding()
    .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...