This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new d744ccb671 NIFI-15364 Fixed QUIC NoClassDefFoundError for Azure
Parameter Provider (#10663)
d744ccb671 is described below
commit d744ccb671e40c0a73a77b2af5f6e5934c5ace41
Author: Pierre Villard <[email protected]>
AuthorDate: Thu Dec 18 22:50:15 2025 +0100
NIFI-15364 Fixed QUIC NoClassDefFoundError for Azure Parameter Provider
(#10663)
Signed-off-by: David Handermann <[email protected]>
---
nifi-code-coverage/pom.xml | 12 +++++++++++-
.../nifi-azure-bundle/nifi-azure-parameter-providers/pom.xml | 4 ++++
.../azure/AzureKeyVaultSecretsParameterProvider.java | 4 ++++
.../nifi-azure-bundle/nifi-azure-processors/pom.xml | 4 ++++
.../azure/StandardAzureCredentialsControllerService.java | 12 +++++++++++-
.../nifi-azure-bundle/nifi-azure-services-api/pom.xml | 4 ++++
nifi-extension-bundles/nifi-azure-bundle/pom.xml | 12 +++++++++++-
7 files changed, 49 insertions(+), 3 deletions(-)
diff --git a/nifi-code-coverage/pom.xml b/nifi-code-coverage/pom.xml
index 7383583286..59df818e06 100644
--- a/nifi-code-coverage/pom.xml
+++ b/nifi-code-coverage/pom.xml
@@ -93,7 +93,7 @@
<!--
Reactor Netty 1.3 includes HTTP/3 support requiring
native QUIC libraries.
Exclude netty-codec-http3 to prevent HTTP/3
initialization.
- Keep netty-codec-classes-quic so
Http3.isHttp3Available() can run and
+ Explicitly add netty-codec-classes-quic below so
Http3.isHttp3Available() can run and
properly detect that native QUIC support is
unavailable.
-->
<exclusion>
@@ -102,6 +102,16 @@
</exclusion>
</exclusions>
</dependency>
+ <!--
+ Required for reactor-netty-http Http3.isHttp3Available() to
detect
+ that native QUIC support is unavailable. This is a transitive
dependency
+ of netty-codec-http3, which is excluded above, so it must be
added explicitly.
+ -->
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-classes-quic</artifactId>
+ <version>${netty.4.version}</version>
+ </dependency>
<!-- SSHD from Registry and other modules -->
<dependency>
<groupId>org.apache.sshd</groupId>
diff --git
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/pom.xml
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/pom.xml
index 0acc6820c3..fc22516d89 100644
---
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/pom.xml
+++
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/pom.xml
@@ -50,5 +50,9 @@
</exclusion>
</exclusions>
</dependency>
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-core-http-jdk-httpclient</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/src/main/java/org/apache/nifi/parameter/azure/AzureKeyVaultSecretsParameterProvider.java
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/src/main/java/org/apache/nifi/parameter/azure/AzureKeyVaultSecretsParameterProvider.java
index a04aeb3a32..2132966c6f 100644
---
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/src/main/java/org/apache/nifi/parameter/azure/AzureKeyVaultSecretsParameterProvider.java
+++
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-parameter-providers/src/main/java/org/apache/nifi/parameter/azure/AzureKeyVaultSecretsParameterProvider.java
@@ -16,6 +16,8 @@
*/
package org.apache.nifi.parameter.azure;
+import com.azure.core.http.HttpClient;
+import com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
@@ -190,7 +192,9 @@ public class AzureKeyVaultSecretsParameterProvider extends
AbstractParameterProv
final AzureCredentialsService credentialsService =
context.getProperty(AZURE_CREDENTIALS_SERVICE).asControllerService(AzureCredentialsService.class);
final String vaultUrl = context.getProperty(KEY_VAULT_URI).getValue();
+ final HttpClient httpClient = new JdkHttpClientBuilder().build();
return new SecretClientBuilder()
+ .httpClient(httpClient)
.credential(credentialsService.getCredentials())
.vaultUrl(vaultUrl)
.buildClient();
diff --git
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/pom.xml
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/pom.xml
index a625199fed..b03b6b7756 100644
--- a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/pom.xml
+++ b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/pom.xml
@@ -116,6 +116,10 @@
<groupId>com.azure</groupId>
<artifactId>azure-core-http-netty</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-classes-quic</artifactId>
+ </dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
diff --git
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/StandardAzureCredentialsControllerService.java
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/StandardAzureCredentialsControllerService.java
index c0ecf745fa..fb648155c9 100644
---
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/StandardAzureCredentialsControllerService.java
+++
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-processors/src/main/java/org/apache/nifi/services/azure/StandardAzureCredentialsControllerService.java
@@ -17,6 +17,8 @@
package org.apache.nifi.services.azure;
import com.azure.core.credential.TokenCredential;
+import com.azure.core.http.HttpClient;
+import com.azure.core.http.netty.NettyAsyncHttpClientBuilder;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.identity.ManagedIdentityCredentialBuilder;
@@ -144,8 +146,14 @@ public class StandardAzureCredentialsControllerService
extends AbstractControlle
config.renameProperty("managed-identity-client-id",
MANAGED_IDENTITY_CLIENT_ID.getName());
}
+ private HttpClient getHttpClient() {
+ return new NettyAsyncHttpClientBuilder().build();
+ }
+
private TokenCredential getDefaultAzureCredential() {
- return new DefaultAzureCredentialBuilder().build();
+ return new DefaultAzureCredentialBuilder()
+ .httpClient(getHttpClient())
+ .build();
}
private TokenCredential getManagedIdentityCredential(final
ConfigurationContext context) {
@@ -153,6 +161,7 @@ public class StandardAzureCredentialsControllerService
extends AbstractControlle
return new ManagedIdentityCredentialBuilder()
.clientId(clientId)
+ .httpClient(getHttpClient())
.build();
}
@@ -165,6 +174,7 @@ public class StandardAzureCredentialsControllerService
extends AbstractControlle
.tenantId(tenantId)
.clientId(clientId)
.clientSecret(clientSecret)
+ .httpClient(getHttpClient())
.build();
}
diff --git
a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-services-api/pom.xml
b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-services-api/pom.xml
index 3515c07f04..d00265034b 100644
--- a/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-services-api/pom.xml
+++ b/nifi-extension-bundles/nifi-azure-bundle/nifi-azure-services-api/pom.xml
@@ -32,6 +32,10 @@
<groupId>com.azure</groupId>
<artifactId>azure-cosmos</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-classes-quic</artifactId>
+ </dependency>
<!-- azure-core does not bring jackson-dataformat-xml dependency from
version 1.37.0 on -->
<!-- but some libraries in the processor nar module depend on
jackson-dataformat-xml -->
diff --git a/nifi-extension-bundles/nifi-azure-bundle/pom.xml
b/nifi-extension-bundles/nifi-azure-bundle/pom.xml
index cefc2b19b8..2c70a2e72a 100644
--- a/nifi-extension-bundles/nifi-azure-bundle/pom.xml
+++ b/nifi-extension-bundles/nifi-azure-bundle/pom.xml
@@ -83,7 +83,7 @@
<!--
Reactor Netty 1.3 includes HTTP/3 support requiring
native QUIC libraries.
Exclude netty-codec-http3 to prevent HTTP/3
initialization.
- Keep netty-codec-classes-quic so
Http3.isHttp3Available() can run and
+ Explicitly add netty-codec-classes-quic below so
Http3.isHttp3Available() can run and
properly detect that native QUIC support is
unavailable.
-->
<exclusion>
@@ -92,6 +92,16 @@
</exclusion>
</exclusions>
</dependency>
+ <!--
+ Required for reactor-netty-http Http3.isHttp3Available() to
detect
+ that native QUIC support is unavailable. This is a transitive
dependency
+ of netty-codec-http3, which is excluded above, so it must be
added explicitly.
+ -->
+ <dependency>
+ <groupId>io.netty</groupId>
+ <artifactId>netty-codec-classes-quic</artifactId>
+ <version>${netty.4.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
</project>