Spring Boot Azure Storage Client yields java.lang.NoSuchFieldError: NOOP_CONFIGURER
Spring Boot Azure Storage Client yields java.lang.NoSuchFieldError: NOOP_CONFIGURER
我正在尝试创建一个能够访问 Azure 存储的 Spring 启动应用程序。
到目前为止,这是我尝试在 build.gradle
中声明的一些依赖项...
implementation 'com.azure:azure-storage-blob:+' // Current Dependency
implementation 'com.azure.spring:azure-spring-boot-starter-storage:+' // Previous Dependency
两者都允许我访问我用来访问我的 Azure Blob 容器的 BlobServiceClient
class。
在我的 application.properties
文件中,我有以下属性:
#Storage settings
# Current Attempt
azure.connection=${STORAGE_ACCOUNT_CONNECTION}
# Previous Attempt
azure.storage.account-name=${STORAGE_ACCOUNT_NAME}
azure.storage.account-key=${STORAGE_ACCOUNT_KEY}
azure.storage.blob-endpoint=${STORAGE_ACCOUNT_ENDPOINT}
然后我在名为 StorageService
的 Spring 服务 Class 中使用这些属性来管理 BlobServiceClient
。这是我设置它的两次尝试:
1(当前)。
@Autowired
StorageService(@Value("${azure.connection}") String connection)
{
client = new BlobServiceClientBuilder().connectionString(connection).buildClient();
objectMapper = new ObjectMapper();
}
- (上一个)。
@Autowired
StorageService(@Value("${azure.storage.account-name}") String name,
@Value("${azure.storage.account-key}") String key,
@Value("${azure.storage.blob-endpoint}") String endpoint)
{
AzureNamedKeyCredential credential = new AzureNamedKeyCredential(name, key);
client = new BlobServiceClientBuilder().credential(credential).endpoint(endpoint).buildClient();
objectMapper = new ObjectMapper();
}
我什至尝试同时使用 Java 11 和 Java 17。但是,每次我在 Intelli-J 中设法 运行 它时,我都会收到此错误。
Caused by: java.lang.NoSuchFieldError: NOOP_CONFIGURER
at reactor.netty.ChannelPipelineConfigurer.emptyConfigurer(ChannelPipelineConfigurer.java:40)
at reactor.netty.transport.TransportConfig.<init>(TransportConfig.java:207)
at reactor.netty.transport.ClientTransportConfig.<init>(ClientTransportConfig.java:164)
at reactor.netty.http.client.HttpClientConfig.<init>(HttpClientConfig.java:327)
at reactor.netty.http.client.HttpClientConnect.<init>(HttpClientConnect.java:85)
at reactor.netty.http.client.HttpClient.create(HttpClient.java:393)
at com.azure.core.http.netty.NettyAsyncHttpClientBuilder.build(NettyAsyncHttpClientBuilder.java:141)
at com.azure.core.http.netty.NettyAsyncHttpClientProvider.createInstance(NettyAsyncHttpClientProvider.java:19)
at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:67)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:50)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:40)
at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:73)
at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:138)
at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:135)
at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:114)
at com.trecapps.users.services.StorageService.<init>(StorageService.java:40)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
... 49 common frames omitted
当我用谷歌搜索 "NOOP_CONFIGURER"
(带引号)时,我得到了 2 个结果,所以这个错误似乎没有得到很好的记录。关于如何启动我的应用程序的任何建议?
请检查以下几点。
NoSuchField
,通常表示链接目标class时,字段
不在这里。但是在编译时, class 应该有那个字段,
否则代码无法编译。
i.e; it indicates that an application tries to access or modify an
object’s field, but that field no longer exists.
- 如果定义了一个 class,这个错误可能会在运行时发生
发生了不兼容的变化。
显示的异常发生在 ChannelPipelineConfigurer in empty configure method which returns NOOP_configurer which is present in reactor netty core
under the package reactor.netty
这好像是reactor-nettyjar
版本不匹配导致的
ChannelPipelineConfigurer.java
package reactor.netty;
import io.netty.channel.Channel;
import reactor.util.annotation.Nullable;
import java.net.SocketAddress;
import static reactor.netty.ReactorNetty.CompositeChannelPipelineConfigurer.compositeChannelPipelineConfigurer;
@FunctionalInterface
public interface ChannelPipelineConfigurer {
static ChannelPipelineConfigurer emptyConfigurer() {
return ReactorNetty.NOOP_CONFIGURER;
}
所以请检查 reactor netty 核心发布版本不兼容是否是一个或多个版本冲突发生的原因 & 尝试升级到最新版本的发布 jar 并检查是否存在任何不兼容的依赖项。
到 handle/deal 并出现 NoSuchFieldError 错误,尝试清除所有现有的 .class 文件并编译来自 scratch.so 的所有内容,以验证每个引用的 class 都被编译为它的最新版本。
但是,如果在运行时仍然抛出错误,则可能必须使用一个版本的库进行编译,但在运行时使用另一个版本。您必须验证您的 class 路径是否包含指定库的正确版本。
已添加
implementation "io.projectreactor.netty:reactor-netty-core:+"
implementation "io.projectreactor.netty:reactor-netty-http:+"
到我的 build.gradle
文件。
我正在尝试创建一个能够访问 Azure 存储的 Spring 启动应用程序。
到目前为止,这是我尝试在 build.gradle
中声明的一些依赖项...
implementation 'com.azure:azure-storage-blob:+' // Current Dependency
implementation 'com.azure.spring:azure-spring-boot-starter-storage:+' // Previous Dependency
两者都允许我访问我用来访问我的 Azure Blob 容器的 BlobServiceClient
class。
在我的 application.properties
文件中,我有以下属性:
#Storage settings
# Current Attempt
azure.connection=${STORAGE_ACCOUNT_CONNECTION}
# Previous Attempt
azure.storage.account-name=${STORAGE_ACCOUNT_NAME}
azure.storage.account-key=${STORAGE_ACCOUNT_KEY}
azure.storage.blob-endpoint=${STORAGE_ACCOUNT_ENDPOINT}
然后我在名为 StorageService
的 Spring 服务 Class 中使用这些属性来管理 BlobServiceClient
。这是我设置它的两次尝试:
1(当前)。
@Autowired
StorageService(@Value("${azure.connection}") String connection)
{
client = new BlobServiceClientBuilder().connectionString(connection).buildClient();
objectMapper = new ObjectMapper();
}
- (上一个)。
@Autowired
StorageService(@Value("${azure.storage.account-name}") String name,
@Value("${azure.storage.account-key}") String key,
@Value("${azure.storage.blob-endpoint}") String endpoint)
{
AzureNamedKeyCredential credential = new AzureNamedKeyCredential(name, key);
client = new BlobServiceClientBuilder().credential(credential).endpoint(endpoint).buildClient();
objectMapper = new ObjectMapper();
}
我什至尝试同时使用 Java 11 和 Java 17。但是,每次我在 Intelli-J 中设法 运行 它时,我都会收到此错误。
Caused by: java.lang.NoSuchFieldError: NOOP_CONFIGURER
at reactor.netty.ChannelPipelineConfigurer.emptyConfigurer(ChannelPipelineConfigurer.java:40)
at reactor.netty.transport.TransportConfig.<init>(TransportConfig.java:207)
at reactor.netty.transport.ClientTransportConfig.<init>(ClientTransportConfig.java:164)
at reactor.netty.http.client.HttpClientConfig.<init>(HttpClientConfig.java:327)
at reactor.netty.http.client.HttpClientConnect.<init>(HttpClientConnect.java:85)
at reactor.netty.http.client.HttpClient.create(HttpClient.java:393)
at com.azure.core.http.netty.NettyAsyncHttpClientBuilder.build(NettyAsyncHttpClientBuilder.java:141)
at com.azure.core.http.netty.NettyAsyncHttpClientProvider.createInstance(NettyAsyncHttpClientProvider.java:19)
at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:67)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:50)
at com.azure.core.http.HttpClient.createDefault(HttpClient.java:40)
at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:73)
at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:138)
at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:135)
at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:114)
at com.trecapps.users.services.StorageService.<init>(StorageService.java:40)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
... 49 common frames omitted
当我用谷歌搜索 "NOOP_CONFIGURER"
(带引号)时,我得到了 2 个结果,所以这个错误似乎没有得到很好的记录。关于如何启动我的应用程序的任何建议?
请检查以下几点。
NoSuchField
,通常表示链接目标class时,字段 不在这里。但是在编译时, class 应该有那个字段, 否则代码无法编译。
i.e; it indicates that an application tries to access or modify an object’s field, but that field no longer exists.
- 如果定义了一个 class,这个错误可能会在运行时发生 发生了不兼容的变化。
显示的异常发生在 ChannelPipelineConfigurer in empty configure method which returns NOOP_configurer which is present in
reactor netty core
under the package reactor.netty这好像是reactor-nettyjar
版本不匹配导致的
ChannelPipelineConfigurer.java
package reactor.netty;
import io.netty.channel.Channel;
import reactor.util.annotation.Nullable;
import java.net.SocketAddress;
import static reactor.netty.ReactorNetty.CompositeChannelPipelineConfigurer.compositeChannelPipelineConfigurer;
@FunctionalInterface
public interface ChannelPipelineConfigurer {
static ChannelPipelineConfigurer emptyConfigurer() {
return ReactorNetty.NOOP_CONFIGURER;
}
所以请检查 reactor netty 核心发布版本不兼容是否是一个或多个版本冲突发生的原因 & 尝试升级到最新版本的发布 jar 并检查是否存在任何不兼容的依赖项。
到 handle/deal 并出现 NoSuchFieldError 错误,尝试清除所有现有的 .class 文件并编译来自 scratch.so 的所有内容,以验证每个引用的 class 都被编译为它的最新版本。
但是,如果在运行时仍然抛出错误,则可能必须使用一个版本的库进行编译,但在运行时使用另一个版本。您必须验证您的 class 路径是否包含指定库的正确版本。
已添加
implementation "io.projectreactor.netty:reactor-netty-core:+"
implementation "io.projectreactor.netty:reactor-netty-http:+"
到我的 build.gradle
文件。