azure-sdk-for-java
azure-sdk-for-java copied to clipboard
NoClassDefFoundError in azure-keyvault-secrets-spring-boot-starter:2.3.5 about reactor
Query/Question I am currently using this dependency in my pom.xml and accessing secrets from Key-vault using property value annotation.
<dependency>
<artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
<groupId>com.microsoft.azure</groupId>
<version>2.3.5</version>
</dependency>
But i am getting this exception java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: reactor/netty/tcp/ProxyProvider$TypeSpec 19:18:01 at com.azure.core.http.netty.NettyAsyncHttpClientBuilder.lambda$build$7(NettyAsyncHttpClientBuilder.java:139) 19:18:01 at reactor.netty.http.client.HttpClient.tcpConfiguration(HttpClient.java:1493) 19:18:01 at com.azure.core.http.netty.NettyAsyncHttpClientBuilder.build(NettyAsyncHttpClientBuilder.java:121) 19:18:01 at com.azure.core.http.netty.implementation.ReactorNettyClientProvider.createInstance(ReactorNettyClientProvider.java:14) 19:18:01 at com.azure.core.implementation.http.HttpClientProviders.createInstance(HttpClientProviders.java:37) 19:18:01 at com.azure.core.http.HttpClient.createDefault(HttpClient.java:27) 19:18:01 at com.azure.core.http.HttpPipelineBuilder.build(HttpPipelineBuilder.java:60) 19:18:01 at com.azure.security.keyvault.secrets.SecretClientBuilder.buildAsyncClient(SecretClientBuilder.java:161) 19:18:01 at com.azure.security.keyvault.secrets.SecretClientBuilder.buildClient(SecretClientBuilder.java:104) 19:18:01 at com.microsoft.azure.keyvault.spring.KeyVaultEnvironmentPostProcessorHelper.addKeyVaultPropertySource(KeyVaultEnvironmentPostProcessorHelper.java:83) 19:18:01 at com.microsoft.azure.keyvault.spring.KeyVaultEnvironmentPostProcessor.postProcessEnvironment(KeyVaultEnvironmentPostProcessor.java:47) 19:18:01 at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102) 19:18:01 at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87) 19:18:01 at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) 19:18:01 at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) 19:18:01 at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) 19:18:01 at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) 19:18:01 at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:82) 19:18:01 at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:63) 19:18:01 Caused by: java.lang.NoClassDefFoundError: reactor/netty/tcp/ProxyProvider$TypeSpec 19:18:01 ... 77 common frames omitted 19:18:01 Caused by: java.lang.ClassNotFoundException: reactor.netty.tcp.ProxyProvider$TypeSpec 19:18:01 at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 19:18:01 at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 19:18:01 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) 19:18:01 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 19:18:01 ... 77 common frames omitted
Setup
- OS: iOS
- IDE: IntelliJ
- Library/Libraries: com.microsoft.azure:azure-keyvault-secrets-spring-boot-starter:2.3.5
Using Spring Boot version 2.5.12
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.12</version>
Hi @shweta5595 , thanks for your reaching out!
The azure-keyvault-secrets-spring-boot-starter:2.3.5
has already ended support, could you upgrade to the latest version 4.3.0 ? Or you can refer to here to find the latest version suitable for you.
Hi @moarychan , We are using this dependency in our project azure-keyvault-secrets-spring-boot-starter:2.3.5 , upgrading to the spring-cloud variant , would incur a lot of structural changes . As we have cosmos dependency also in our project without spring-cloud. Earlier we were using azure-keyvault-secrets-spring-boot-starter:2.3.0 version which worked fine without the above mentioned error. But due to security concerns we wanted it to upgrade to 2.3.5 . Could you please help with the same.
Hi @shweta5595 , thanks for your update!
Is azure-cosmosdb-spring-boot-starter
also the same version 2.3.5
? We would like to hear about your concerns, which may help us improve subsequent migration documentation.
Could you please provide more info with the below questions for us?
- What major changes do you need to make to upgrade to the latest version? Would it be better to upgrade to version 3.x (such as
3.14.0
)? - Are there any special considerations for not upgrading a version?
Hi @moarychan ,
-
Earlier when we used spring-webflux along with
azure-keyvault-secrets-spring-boot-starter:2.3.0
which worked fine and we were able to retrieve secrets from key vault. -
Due to security concerns we want it to upgrade it to azure-keyvault-secrets-spring-boot-starter:2.3.5 along with spring-webflux. But we are facing the above mentioned issue.
-
We are not upgrading it to spring-cloud-azure-starter-keyvault-secrets:4.3.0 as we are not sure that this would also work well with reactive spring i.e spring-webflux . And also this will incur some amount of code changes which we do not want to do right now , as we are already live in production.
-
Not using 3.14.0 version or above , because we are using the configs in a certain way which is again rewriting the piece again. So to refrain from that we are looking for an alternative that will allow us to use 2.3.5 version , which I know is migrated now.
I am looking out for some solution that will help azure-keyvault-secrets-spring-boot-starter:2.3.5 this version work and we dont face the above mentioned issue.
Hi @shweta5595 , thanks for your update!
I can reproduce your exception, and I try to downgrade the dependencies, such as reactor, netty, reactory-netty, but will occur new issues when listing the secrets from Azure KV. In fact, this modification may bring unpredictable problems, because it's not compatible with the current Spring Boot.
I notice you are using Spring Boot 2.5.12, this version is compatible with com.azure.spring:azure-spring-boot-starter-keyvault-secrets:3.14.0
, and after testing, works fine. Please evaluate this update to resolve the issue you are experiencing, you can find this test project here.
Hi @moarychan , Thankyou so much !! I was able to proceed.