ОШИБКА AWS SDK Java V2 SIGNING_REGION_SCOPE

#java #amazon-web-services #spring-boot #amazon-s3 #aws-sdk-java-2.0

Вопрос:

Я использую следующую зависимость AWS:

 <dependency>
  <groupId>software.amazon.awssdk</groupId>
  <artifactId>s3</artifactId>
  <version>2.17.34</version>
</dependency>
 

И вот моя конфигурация компонента для S3Client

 @Bean
S3Client amazonS3Client() {
  return S3Client.builder().region(Region.EU_WEST_1).build();
}
 

И, наконец, вот мой метод реализации для загрузки файла:

 private void uploadToS3(byte[] fileBytes, String fileKey) {
  PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket("MY_S3_BUCKET_NAME").key(fileKey).build();
  RequestBody requestBody = RequestBody.fromBytes(fileBytes);
  s3Client.putObject(putObjectRequest, requestBody);
}
 

Но этот код выдает мне следующий журнал ошибок:

java.lang.NoSuchFieldError: РЕГИСТРАЦИЯ_РЕГИОН_СКОПА в software.amazon.awssdk.services.s3.internal.обработчики.EndpointAddressInterceptor.lambda$modifyHttpRequest$1(EndpointAddressInterceptor.java:71) в java.base/java.util.Необязательно.orElseGet(необязательно.java:369) на software.amazon.awssdk.services.s3.internal.handlers.EndpointAddressInterceptor.modifyHttpRequest(EndpointAddressInterceptor.java:71) в software.amazon.awssdk.core.перехватчик.ExecutionInterceptorChain.modifyHttpRequestAndHttpContent(ExecutionInterceptorChain.java:90) в программном обеспечении.amazon.awssdk.core.внутренний.обработчик.Базовый обработчик.runModifyHttpRequestAndHttpContentИнтерцепторы(базовый обработчик.java:164) в software.amazon.awssdk.core.внутренний.обработчик.BaseClientHandler.Завершает выполнение запроса(BaseClientHandler.java:89) в software.amazon.awssdk.core.internal.обработчик.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:145) в software.amazon.awssdk.core.внутренний.обработчик.BaseSyncClientHandler.лямбда$выполнить$1(BaseSyncClientHandler.java:114) в программном обеспечении.amazon.awssdk.core.внутренний.обработчик.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:169) в software.amazon.awssdk.core.internal.обработчик.BaseSyncClientHandler.выполнить(BaseSyncClientHandler.java:95) в software.amazon.awssdk.core.client.обработчик.SdkSyncClientHandler.выполнить(SdkSyncClientHandler.java:45) в software.amazon.awssdk.awscore.клиент.обработчик.AwsSyncClientHandler.выполнить(AwsSyncClientHandler.java:55) в software.amazon.awssdk.services.s3.DefaultS3Client.putObject(DefaultS3Client.java:8829) в xxx.db.репо.сообщение.MessageRepositoryImpl.uploadToS3(MessageRepositoryImpl.java:110) в xxx.db.repo.сообщение.MessageRepositoryImpl.doWrite(MessageRepositoryImpl.java:82) в xxx.db.repo.сообщение.MessageRepositoryImpl.write(MessageRepositoryImpl.java:56) в xxx.service.upload.MessageUploadServiceImpl.uploadMessages(MessageUploadServiceImpl.java:132) в xxx.service.upload.MessageUploadServiceImpl.doUploadMessages(MessageUploadServiceImpl.java:113) в xxx.service.upload.MessageUploadServiceImpl.загрузить(MessageUploadServiceImpl.java:72) в xxx.домен.UploadDomainManagerImpl.upload(UploadDomainManagerImpl.java:37) в xxx.rest.MessageUploadRestController.uploadMessages(MessageUploadRestController.java:31) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Собственный метод) в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) в java.base/jdk.internal.reflect.Делегирование methodaccessorimpl.invoke(делегирование methodaccessorimpl.java:43) в java.base/java.lang.reflect.Метод.вызов(Метод.java:566) в организации.springframework.web.метод.поддержка.Вызываемый метод.Вызовите(вызываемый метод.java:197) в org.springframework.web.метод.поддержка.Вызываемый метод.invokeForRequest(вызываемый метод.java:141) в org.springframework.web.сервлет.mvc.метод.аннотация.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) в org.springframework.web.servlet.mvc.метод.аннотация.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) в организации.springframework.web.сервлет.mvc.метод.аннотация.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) в org.springframework.web.servlet.mvc.метод.AbstractHandlerMethodAdapter.дескриптор(AbstractHandlerMethodAdapter.java:87) в org.springframework.web.сервлет.Диспетчер-сервер.doDispatch(диспетчерский сервлет.java:1063) в org.springframework.web.сервлет.Диспетчер сервлета.doService(диспетчер сервлета.java:963) в org.springframework.web.сервлет.FrameworkServlet.ProcessRequest(FrameworkServlet.java:1006) в организации.springframework.web.сервлет.Фреймворксервлета.доПост(FrameworkServlet.java:909) в javax.servlet.http.HttpServlet.service(HttpServlet.java:681) в org.springframework.web.сервлет.FrameworkServlet.service(FrameworkServlet.java:883) в javax.servlet.http.HttpServlet.сервис(HttpServlet.java:764) в org.apache.catalina.core.Цепочка фильтров приложений.Внутренний фильтр(цепочка фильтров приложений.java:228) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(цепочка фильтров приложений.java:163) в org.apache.tomcat.websocket.сервер.WsFilter.doFilter(WsFilter.java:53) в орг.apache.каталина.ядро.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в org.springframework.web.servlet.resource.Фильтр кодирования ресурсов.doFilter(ResourceUrlEncodingFilter.java:67) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в организации.пружинная рамка.веб.фильтр.Фильтр запроса контекста.doFilterInternal(RequestContextFilter.java:100) в org.springframework.web.filter.Фильтр повторных запросов.doFilter(OncePerRequestFilter.java:119) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(цепочка фильтров приложений.java:163) в org.springframework.web.filter.Фильтр формконтента.doFilterInternal(FormContentFilter.java:93) в org.springframework.web.filter.Фильтр повторных запросов.doFilter(OncePerRequestFilter.java:119) в орг.apache.каталина.ядро.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в com.xxx.framework.web.filter.OAuth2AuthFilter.Авторизуйте, если это необходимо(OAuth2AuthFilter.java:129) в com.xxx.framework.web.filter.OAuth2AuthФильтр.doFilterInternal(OAuth2AuthFilter.java:81) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в организации.apache.каталина.ядро.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в com.xxx.framework.web.filter.Интеграционный логфильтр.doFilterInternal(IntegrationLogFilter.java:68) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в com.xxx.framework.web.filter.Фильтр TispContextFilter.doFilterInternal(TispContextFilter.java:79) в организации.пружинная рамка.веб.фильтр.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в org.springframework.boot.actuate.metrics.web.сервлет.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:97) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) в организации.apache.каталина.ядро.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в org.springframework.web.filter.Фильтр кодирования символов.doFilterInternal(CharacterEncodingFilter.java:201) в org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(ApplicationFilterChain.java:163) в режиме ввода-вывода.opentracing.contrib.web.сервлет.фильтр.Фильтр отслеживания.doFilter(TracingFilter.java:189) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) в org.apache.catalina.core.Цепочка фильтров приложений.doFilter(цепочка фильтров приложений.java:163) в org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) в org.apache.catalina.аутентификатор.AuthenticatorBase.invoke(AuthenticatorBase.java:542) в организации.apache.каталина.ядро.StandardHostValve.invoke(StandardHostValve.java:143) в org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) в org.apache.catalina.core.StandardEngineValve.вызовите(StandardEngineValve.java:78) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) в org.apache.coyote.AbstractProcessorLight.процесс(AbstractProcessorLight.java:65) в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) в организации.apache.tomcat.util.net.NioEndpoint$SocketПроцессор.doRun(NioEndpoint.java:1723) в org.apache.tomcat.util.net.SocketProcessorBase.выполнить(SocketProcessorBase.java:49) в java.base/java.util.одновременно.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) в java.base/java.util.concurrent.ThreadPoolExecutor$Рабочий.запуск(ThreadPoolExecutor.java:628) в org.apache.tomcat.util.потоки.TaskThread$обертывание. запуск(TaskThread.java:61) в java.base/java.lang.Thread.run(поток.java:829)

Итак, в чем проблема в моей конфигурации, поэтому я исправляю эту проблему с SIGNING_REGION_SCOPE?

Ответ №1:

Ваша проблема может быть связана с неправильным ПОМ. Трудно сказать, не увидев все ваши файлы проектов.

Однако обратитесь к следующему учебнику AWS, в котором вы узнаете, как успешно использовать API Java Amazon S3 версии 2 в приложении для весенней загрузки. В этом примере объект S3Client создается с помощью средства EnvironmentVariableCredentialsProvider:

 // Create the S3Client object.
private S3Client getClient() {
    Region region = Region.US_WEST_2;
    S3Client s3 = S3Client.builder()
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .region(region)
            .build();

    return s3;
}
 

Видеть:

Создание динамического веб — приложения, анализирующего фотографии с помощью AWS SDK для Java

В этом примере используется динамическое веб-приложение, которое анализирует изображения природы, расположенные в корзине Amazon Simple Storage Service (Amazon S3), с помощью службы распознавания Amazon. Это приложение отлично работает:

введите описание изображения здесь