Java.lang.NoClassDefFoundError: реактор/утилита/контекст/ContextView

Я обновляю azure sdk для java до версии 12.21.1. Весенняя загрузочная версия — 2.1.6. Я использую следующую зависимость в gradle: реализация 'com.azure:azure-storage-blob:12.21.1'.

Я использую следующий код для создания BlobServiceClient:

String accountUrl = "https://" + accountName + ".blob.core.windows.net";
 StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);

try{
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().credential(sharedKeyCredential).endpoint(accountUrl).buildClient();
}

Но во время выполнения выдает ошибку:

 Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: reactor/util/context/ContextView] with root cause

java.lang.ClassNotFoundException: reactor.util.context.ContextView
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
BuiltinClassLoader.java:581
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
ClassLoaders.java:178
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
ClassLoader.java:522
    at com.azure.core.http.policy.HttpPolicyProviders.addAfterRetryPolicies(HttpPolicyProviders.java:52) ~[azure-core-1.37.0.jar:1.37.0]
HttpPolicyProviders.java:52
    at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:128) ~[azure-storage-blob-12.21.1.jar:12.21.1]
BuilderHelper.java:128
    at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:135) ~[azure-storage-blob-12.21.1.jar:12.21.1]
BlobServiceClientBuilder.java:135
    at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:114) ~[azure-storage-blob-12.21.1.jar:12.21.1]

Как это решить?

Вы пытаетесь создать BlobServiceClient с помощью java sdk? Это ваше требование?

Pravallika KV 30.03.2023 09:47

Да. Я хочу загружать/загружать файлы из BLOB-объектов с помощью java azure sdk.

Yatharth Mishra 30.03.2023 11:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
289
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

java.lang.NoClassDefFoundError: реактор/утилита/контекст/ContextView

Это может быть из-за отсутствия зависимости в вашем приложении. Проверьте, добавили ли вы необходимые зависимости в путь к классам вашего проекта.

Я воспроизвел ваше требование для отправки/скачивания файла с помощью Azure Java SDK.

Ниже приведены зависимости, которые я использовал в своем приложении.

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation group: 'com.azure', name: 'azure-storage-blob', version: '12.16.0'
implementation group: 'com.microsoft.azure', name: 'azure-storage-spring-boot-starter', version: '2.2.5'
implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

Обратите внимание на токен доступа вашей учетной записи хранения на портале Azure:

Я создал простой API для вызова этого метода, который создает файл и загружает его из хранилища BLOB-объектов Azure.

@PostMapping("/upload")
public  void  uploadFile(@RequestParam(value  =  "file")  MultipartFile  file)  throws  IOException  {

// Code To Create and File In Blob Storage
String  str = "DefaultEndpointsProtocol=https;AccountName=<storage_account_name>;AccountKey=storage_account_access_key;EndpointSuffix=core.windows.net";
OffsetDateTime  expiryTime  =  OffsetDateTime.now().plusDays(1);
BlobSasPermission  permission  =  new  BlobSasPermission().setReadPermission(true);
BlobServiceSasSignatureValues  values  =  new  BlobServiceSasSignatureValues(expiryTime,  permission).setStartTime(OffsetDateTime.now());
BlobContainerClient  container  =  new  BlobContainerClientBuilder().connectionString(str).containerName("<conatiner_name>").buildClient();
BlobClient  blob  =  container.getBlobClient(file.getOriginalFilename());
blob.upload(file.getInputStream(),  file.getSize(),  true);
String  sasToken  =  blob.generateSas(values);
// Code To Create and File In Blob Storage

// Code To download the File From Blob Storage
URL  url  =  new  URL(blob.getBlobUrl()  +  "?"  +  sasToken);
HttpURLConnection  httpConn  =  (HttpURLConnection)  url.openConnection();
int  responseCode  =  httpConn.getResponseCode();
// Check if the response code is HTTP_OK (200)
if  (responseCode  ==  HttpURLConnection.HTTP_OK)  {
// Open input stream from the HTTP connection
InputStream  inputStream  =  httpConn.getInputStream();
// Open output stream to save the file
FileOutputStream  outputStream  =  new FileOutputStream("C:\\Users\\win10\\Downloads\\data.txt");
// Read bytes from input stream and write to output stream
int  bytesRead;
byte[]  buffer  =  new  byte[4096];
while  ((bytesRead  =  inputStream.read(buffer))  !=  -1)  {
outputStream.write(buffer,  0,  bytesRead);
}
// Close streams
outputStream.close();
inputStream.close();
System.out.println("File downloaded");
}  else  {
System.out.println("Failed to download file: "  +  httpConn.getResponseMessage());
}
httpConn.disconnect();
// Code To download the File From Blob Storage
}

Вызов API, который я создал, и он генерирует URL-адрес для загрузки файла, который был загружен, как показано ниже:

Загрузил файл в хранилище BLOB-объектов Azure, используя приведенный выше код:

Используя приведенный выше код, загрузите файл как data.txt.

В этом случае вы используете версию весенней загрузки 2.1.6? Я знаю, что это должно работать с новыми версиями. Но я хочу решить эту проблему с помощью весенней загрузки 2.1.6.

Yatharth Mishra 30.03.2023 14:36

Да, он будет работать с версией Spring Boot 2.1.6. Я проверил и подтвердил. Прикрепляю Изображение для ознакомления.

Pravallika KV 30.03.2023 14:44
Ответ принят как подходящий

Похоже, между spring boot version и swagger возник конфликт зависимостей. Я обновил весеннюю загрузку до 2.7.10 и перешел на openAPI. После этого этот вопрос был решен. Спасибо.

Другие вопросы по теме