Azure Data Lake StorageADLS Gen2中的java.lang.NoSuchMethodError:reactor.core.publisher.Flux.toIterableILjava / lang / Iterable”

问题描述

我正在编写一个Java程序以连接到Azure Data Lake Storage(ADLS Gen2)。但是,当我尝试迭代存储帐户的文件系统列表时,出现“ java.lang.NoSuchMethodError:reactor.core.publisher.Flux.toIterable(I)Ljava / lang / Iterable”错误。

堆栈跟踪:

HTTP Status 500 - Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: reactor.core.publisher.Flux.toIterable(I)Ljava/lang/Iterable;</h1><HR size="1" noshade="noshade"><p><b>type</b> Exception report</p><p><b>message</b> <u>Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: reactor.core.publisher.Flux.toIterable(I)Ljava/lang/Iterable;</u></p><p><b>description</b> <u>The server encountered an internal error that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: reactor.core.publisher.Flux.toIterable(I)Ljava/lang/Iterable; org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) javax.servlet.http.HttpServlet.service(HttpServlet.java:650) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) javax.servlet.http.HttpServlet.service(HttpServlet.java:731) </pre></p><p><b>root cause</b> <pre>java.lang.NoSuchMethodError: reactor.core.publisher.Flux.toIterable(I)Ljava/lang/Iterable; com.azure.core.util.IterableStream.iterator(IterableStream.java:85) 

代码示例:

    ClientSecretCredential servicePrincipalCreds  = new ClientSecretCredentialBuilder()
                    .clientId(clientID)
                    .clientSecret(clientSecret)
                    .tenantId(tenantID)
                    .build();
                    
    DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
                    .endpoint("https://"+accountName+".dfs.core.windows.net")
                    .credential(servicePrincipalCreds)
                    .httpClient(new OkHttpAsyncHttpClientBuilder().build())
                    .buildClient();
    
    PagedIterable<FileSystemItem> pageItr = dataLakeServiceClient.listFileSystems();
    Iterator<FileSystemItem> itr = pageItr.iterator(); // Here I get error
            while(itr.hasNext()){
                FileSystemItem fileSystemItem = itr.next();
                if(fileSystemItem.getName().equals(fileSystemName)){
                    System.out.println("FileSystem Exist:: "+fileSystemName);
                    break;
                }
            }

下面是pom.xml

        <dependencies>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-storage-file-datalake</artifactId>
          <version>12.2.0-beta.1</version>
          <exclusions>
             <exclusion>
                <groupId>com.azure</groupId>
                <artifactId>azure-core-http-netty</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-identity</artifactId>
          <version>1.0.8</version>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-core-http-okhttp</artifactId>
          <version>1.2.4</version>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-core</artifactId>
          <version>1.6.0</version>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-storage-blob</artifactId>
          <version>12.8.0-beta.1</version>
          <exclusions>
             <exclusion>
                <groupId>com.azure</groupId>
                <artifactId>azure-core-http-netty</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-storage-common</artifactId>
          <version>12.8.0-beta.1</version>
          <exclusions>
             <exclusion>
                <groupId>com.azure</groupId>
                <artifactId>azure-core-http-netty</artifactId>
             </exclusion>
          </exclusions>
       </dependency>
       <dependency>
          <groupId>com.azure</groupId>
          <artifactId>azure-storage-internal-avro</artifactId>
          <version>12.0.0-beta.1</version>
       </dependency>
    </dependencies>

尽管反应堆核心依赖关系随上述依赖关系而来。仍然我尝试显式添加它,但不能解决问题。

任何帮助将不胜感激。预先感谢。

解决方法

我已经尝试过您的代码,并且它对我有效。 导入类:

import com.azure.core.http.okhttp.OkHttpAsyncHttpClientBuilder;
import com.azure.core.http.rest.PagedIterable;
import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.storage.file.datalake.DataLakeServiceClient;
import com.azure.storage.file.datalake.DataLakeServiceClientBuilder;
import com.azure.storage.file.datalake.models.FileSystemItem;
import java.util.Iterator;

您可以使用它进行尝试。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...