You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2024/03/25 09:17:34 UTC
(camel-quarkus) branch 3.8.x updated: Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)
This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch 3.8.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/3.8.x by this push:
new 6379944974 Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)
6379944974 is described below
commit 63799449749945f35ffc8cdd6428c9b11a6d4fe8
Author: James Netherton <ja...@users.noreply.github.com>
AuthorDate: Mon Mar 25 04:03:02 2024 +0000
Fix potential UnsatisfiedLinkError for Azure extensions in native mode (#5916)
Fixes #5912
---
.../netty/deployment/AzureCoreSupportProcessor.java | 17 +++++++++++++++++
.../AbstractClientApplicationBaseSubstitutions.java | 2 +-
.../blob/deployment/AzureStorageBlobProcessor.java | 14 --------------
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java b/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
index 4af01eb684..d85be77c0f 100644
--- a/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
+++ b/extensions-support/azure-core/deployment/src/main/java/org/apache/camel/quarkus/support/reactor/netty/deployment/AzureCoreSupportProcessor.java
@@ -22,6 +22,7 @@ import java.util.stream.Stream;
import com.azure.core.annotation.ServiceInterface;
import com.azure.core.http.HttpClientProvider;
+import com.microsoft.aad.msal4j.AbstractClientApplicationBaseSubstitutions.Msal4jIsPresent;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
@@ -29,8 +30,10 @@ import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageProxyDefinitionBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.RuntimeReinitializedClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
import io.quarkus.deployment.util.ServiceUtil;
+import io.quarkus.utilities.OS;
import org.jboss.jandex.DotName;
public class AzureCoreSupportProcessor {
@@ -93,4 +96,18 @@ public class AzureCoreSupportProcessor {
.forEach(proxyDefinitions::produce);
}
+ @BuildStep(onlyIf = Msal4jIsPresent.class)
+ void enableLoadingOfNativeLibraries(BuildProducer<RuntimeReinitializedClassBuildItem> runtimeReinitializedClass) {
+ OS os = OS.determineOS();
+ if (os.equals(OS.LINUX) || os.equals(OS.MAC)) {
+ String iSecurityLibraryClassName = "com.microsoft.aad.msal4jextensions.persistence.%s.ISecurityLibrary"
+ .formatted(os.name().toLowerCase());
+ runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem(iSecurityLibraryClassName));
+ }
+
+ if (os.equals(OS.WINDOWS)) {
+ runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem("com.sun.jna.platform.win32.Crypt32"));
+ runtimeReinitializedClass.produce(new RuntimeReinitializedClassBuildItem("com.sun.jna.platform.win32.Kernel32"));
+ }
+ }
}
diff --git a/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java b/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
index 746d4b917b..c3ec5a3f50 100644
--- a/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
+++ b/extensions-support/azure-core/runtime/src/main/java/com/microsoft/aad/msal4j/AbstractClientApplicationBaseSubstitutions.java
@@ -59,7 +59,7 @@ public final class AbstractClientApplicationBaseSubstitutions {
return supplier;
}
- static final class Msal4jIsPresent implements BooleanSupplier {
+ public static final class Msal4jIsPresent implements BooleanSupplier {
@Override
public boolean getAsBoolean() {
try {
diff --git a/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java b/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
index 91b9c79de9..ff38b1668a 100644
--- a/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
+++ b/extensions/azure-storage-blob/deployment/src/main/java/org/apache/camel/quarkus/component/azure/storage/blob/deployment/AzureStorageBlobProcessor.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.quarkus.component.azure.storage.blob.deployment;
-import com.azure.identity.implementation.IdentityClient;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
@@ -25,7 +24,6 @@ import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
@@ -69,16 +67,4 @@ class AzureStorageBlobProcessor {
nativeResources.produce(new NativeImageResourceBuildItem(
"azure-storage-blob.properties"));
}
-
- @BuildStep
- void runtimeInitializedClasses(BuildProducer<RuntimeInitializedClassBuildItem> runtimeInitializedClass) {
- // Required by azure-identity
- runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem("com.sun.jna.platform.win32.Crypt32"));
- runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem("com.sun.jna.platform.win32.Kernel32"));
- runtimeInitializedClass.produce(new RuntimeInitializedClassBuildItem(IdentityClient.class.getName()));
- runtimeInitializedClass.produce(
- new RuntimeInitializedClassBuildItem("com.microsoft.aad.msal4jextensions.persistence.linux.ISecurityLibrary"));
- runtimeInitializedClass.produce(
- new RuntimeInitializedClassBuildItem("com.microsoft.aad.msal4jextensions.persistence.mac.ISecurityLibrary"));
- }
}